# Find one Gateway Operation

`GET /v2/gateway-operations/{id}`

Core API v2, Gateway Operations.

Retrieve a Gateway Operation by its ID

**Authentication:** Send `Authorization: Bearer <token>`. To authenticate, generate a Secret API Key from your ODUS Dashboard and include it in the `Authorization` header as follows: `Authorization: Bearer <YOUR_SECRET_API_KEY>`

## Parameters

### Path parameters

- `id` (string, required)

## Responses

### `200`

OK

Type: object (GatewayOperationDTO).

- `createdAt` (string (date-time), required): The date and time when the entity was created. Example: `2024-02-18T12:00:00Z`.
- `updatedAt` (string (date-time), required, nullable): The date and time when the entity was last updated. Example: `2024-02-21T12:15:00Z`.
- `metadata` (map of string to string, nullable): Metadata used by merchants to store additional information about the entity.
- `id` (string, required): The unique identifier of the gateway operation.
- `type` (string, required): The type of operation performed against the payment service provider. One of `authorize`, `capture`, `refund`, `void`, `confirm`, `create_apple_pay_session`, `process_webhook`. Example: `authorize`.
- `status` (string, required): Current status of the gateway operation. One of `pending`, `completed`. Example: `completed`.
- `amount` (number, required, nullable): Operation amount in minor currency units (e.g., 1500 for $15.00) Example: `1500`.
- `currency` (string, required, nullable): Currency of the operation. One of `usd`, `eur`, `gbp`, `cad`, `aud`, `pln`, `czk`, `sek`, `dkk`. Example: `usd`.
- `processorId` (string, nullable): The external identifier returned by the payment service provider. Only available from the dashboard. Example: `ch_1J8lZpJ9j1bSv2Jr6sVjXZ1N`.
- `processorResponse` (object or string, nullable): The raw response returned by the payment service provider. A string where the provider answered with a non-JSON body. May contain redacted card data for PCI compliance. Only available from the dashboard.
- `request` (object, nullable): The sanitized request sent to the payment service provider. May contain redacted sensitive data for PCI compliance. Only available from the dashboard.
  - `requestUrl` (string, required)
  - `method` (string, required)
  - `requestHeaders` (object)
  - `requestBody` (object, required, nullable)
- `outcome` (object, nullable): Outcome details from the gateway operation. Only available from the dashboard.
  - `status` (string, required): One of `success`, `partial`, `failure`.
  - `errorCode` (string, required, nullable): One of `internal_error`, `not_supported`, `generic_decline`, `insufficient_funds`, `authentication_failed`, `authentication_cancelled`, `authentication_unavailable`, `cancelled`, `invalid_card_details`, `expired_card`, `authentication_required`, `transaction_not_permitted`, `generic_issuer_error`, `generic_processor_error`, `processor_rate_limited`, `processor_timeout`, `fraud_suspected`, `card_restricted`, `authentication_rejected`, `payment_method_unusable`, `generic_hard_decline`, `already_captured`, `merchant_account_restricted`, `merchant_configuration_error`, `invalid_request`, `blocked_by_policy`, `order_not_permitted`, `stored_credential_revoked`.
  - `errorMessage` (string, required, nullable)
  - `safeErrorMessage` (string, required, nullable)
  - `declineType` (string, required, nullable): One of `soft_decline`, `hard_decline`, `not_attempted`.
  - `retryStrategy` (string, required, nullable): One of `never_retry`, `retry_with_new_payment_method`, `retry_after_delay`, `retry_immediately`.
  - `specialCode` (string, required, nullable): One of `confirmation_requested`.
  - `authCode` (string, required, nullable)
  - `processorCode` (string, required, nullable)
  - `processorMessage` (string, required, nullable)
- `transaction` (string, required, nullable): The ID of the transaction this operation belongs to.

### `202`

The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.

Type: object (ProvisioningInProgress).

- `status` (string, required): Signals the merchant environment is still being provisioned. One of `provisioning`.
- `merchantAccountId` (string, required): The merchant account whose environment is being provisioned. Example: `dAI3aa87ROOeupeBCjNSKCOBOisBCYjB`.

### Errors

- `400`: The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; or `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it.
- `401`: No API key was supplied, or the key is not valid. `type` is `authentication_error`.
- `403`: The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.
- `404`: No resource exists with the requested identifier. `type` is `not_found_error`.
- `429`: Too many requests. A limit applies per operation; requests to other operations are unaffected. `type` is `rate_limit_error`. Use the `Retry-After-global` header to know when to retry.
- `500`: The request could not be completed because of an unexpected error. `type` is `api_error`.
- `503`: The request could not be served right now: the API is temporarily at capacity, or a dependency needed to authorize the request is unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.
- `504`: The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.

Every error response has the same body: see [Errors](https://docs.odus.com/docs/guides/api-features/errors.md).

---

Generated from the Core API v2 OpenAPI document, https://api.odus.com/openapi.v2.json. Interactive page: https://docs.odus.com/docs/api/core/v2/gateway-operation-controller-find-one
