---
title: "Find one Gateway Operation"
method: GET
path: "/gateway-operations/{id}"
tags: ["Gateway Operations"]
---

# Find one Gateway Operation

`GET /gateway-operations/{id}`

Retrieve a Gateway Operation by its ID

## Path parameters

- `id` string, required

## Response `200`

OK

- GatewayOperationDTO
  - `createdAt` string, date-time, required — The date and time when the entity was created.
  - `updatedAt` string, date-time, nullable, required — The date and time when the entity was last updated.
  - `metadata` object, nullable — Metadata used by merchants to store additional information about the entity.
  - `id` string, required — The unique identifier of the gateway operation
  - `type` 'authorize' | 'capture' | 'refund' | 'void' | 'confirm' | 'create_apple_pay_session' | 'process_webhook', required — The type of operation performed against the payment service provider
  - `status` 'pending' | 'completed', required — Current status of the gateway operation
  - `amount` number, nullable, required — Operation amount in minor currency units (e.g., 1500 for $15.00)
  - `currency` 'usd' | 'eur' | 'gbp' | 'cad' | 'aud' | 'pln' | 'czk' | 'sek' | 'dkk' | 'null', nullable, required — Currency of the operation
  - `processorId` string, nullable — The external identifier returned by the payment service provider. Only available from the dashboard.
  - `processorResponse` union — 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.
    - object
    - string
  - `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, nullable, required
  - `outcome` object, nullable — Outcome details from the gateway operation. Only available from the dashboard.
    - `status` 'success' | 'partial' | 'failure', required
    - `errorCode` 'internal_error' | 'not_supported' | 'generic_decline' | 'insufficient_funds' | 'authentication_failed' | 'authentication_cancelled' | 'authentication_unavailable' | 'cancelled' | 'invalid_card_details' | 'expired_card' | 'transaction_not_permitted' | 'generic_issuer_error' | 'generic_processor_error' | 'processor_rate_limited' | 'processor_timeout' | 'fraud_suspected' | 'card_restricted' | 'authentication_rejected' | 'generic_hard_decline' | 'null', nullable, required
    - `errorMessage` string, nullable, required
    - `errorCodeUnmapped` boolean, nullable
    - `safeErrorMessage` string, nullable, required
    - `declineType` 'soft_decline' | 'hard_decline' | 'null', nullable, required
    - `retryStrategy` 'never_retry' | 'retry_with_new_payment_method' | 'retry_after_delay' | 'retry_immediately' | 'null', nullable, required
    - `specialCode` 'confirmation_requested' | 'null', nullable, required
    - `processorCode` string, nullable, required
    - `processorMessage` string, nullable, required
  - `transaction` string, nullable, required — The ID of the transaction this operation belongs to

## Other responses

- `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.
- `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; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.
- `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. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.
- `500` — The request could not be completed because of an unexpected error. `type` is `api_error`.
- `503` — A dependency needed to authorize the request is temporarily 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.

## Changes

- **2026-09-02** `de9880e65aea` — 1 info
  - added the non-success response with the status `503`

[Change history](https://skmtc.dev/odus/apis/odus-orchestration-api/changes/gateway-operations/:id/get.md)

---

[API](https://skmtc.dev/odus/apis/odus-orchestration-api.md) · [All operations](https://skmtc.dev/odus/apis/odus-orchestration-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/odus/odus-orchestration-api/revisions/de9880e65aea/schema)
