---
title: "Retrieve transfer details"
method: GET
path: "/pty/account/v1/transfers/{transfer_id}"
tags: ["Ledger API - Transfers"]
---

# Retrieve transfer details

`GET /pty/account/v1/transfers/{transfer_id}`

## Request

- Base URL: `https://api.uat.paymentology.com`
- URL: `https://api.uat.paymentology.com/pty/account/v1/transfers/{transfer_id}`
- Auth: HTTP bearer

<ul>
<li class="docBullet">Retrieves the details of a transfer by its identifier.</li>
</ul>

## Path parameters

- `transfer_id` string, uuid, required

## Response `200`

Transfer retrieved

- Transfer: Transfer record. Both `source_amount` and `destination_amount` are fully populated (`amount` + `currency`) — the server fills in whichever side's `amount` was not supplied on the request.
  - `transfer_id` string, uuid, required: Unique transfer identifier.
  - `source_account_id` string, required: Source account identifier.
  - `destination_account_id` string, required: Destination account identifier.
  - `source_amount` Money, required: A monetary amount with currency. `amount` is in minor units (positive integer string). - On a transfer request, both `source_amount` and `destination_amount` are present and each carries its `currency`. **Exactly one** must supply `amount` — the server computes the other and populates both on the stored record. - On a deposit request (`destination_amount`) and a withdrawal request (`source_amount`), both `amount` and `currency` are always required. - On every response (Create or Get), all `Money` objects are fully populated (`amount` + `currency`).
    - `amount` string: Amount in minor units. Must be greater than 0 (e.g., 2000 = 20.00 USD).
    - `currency` string, required: ISO 4217 currency code
  - `destination_amount` Money, required: A monetary amount with currency. `amount` is in minor units (positive integer string). - On a transfer request, both `source_amount` and `destination_amount` are present and each carries its `currency`. **Exactly one** must supply `amount` — the server computes the other and populates both on the stored record. - On a deposit request (`destination_amount`) and a withdrawal request (`source_amount`), both `amount` and `currency` are always required. - On every response (Create or Get), all `Money` objects are fully populated (`amount` + `currency`).
    - `amount` string: Amount in minor units. Must be greater than 0 (e.g., 2000 = 20.00 USD).
    - `currency` string, required: ISO 4217 currency code
  - `exchange_rate` string: Exchange rate applied (present for cross-currency transfers).
  - `fee` TransferFee: Fee on an account-to-account transfer. The fee is additive to the principal: - Fee on source: source account is debited `source_amount.amount + fee.amount`. - Fee on destination: destination account is credited `destination_amount.amount - fee.amount`. `fee.currency` must match the currency of the side the fee is charged to.
    - `amount` string, required: Fee amount in minor units. Must be greater than 0.
    - `currency` string, required: ISO 4217 currency code. Must equal `source_amount.currency` when `charged_to = SOURCE`, and must equal `destination_amount.currency` when `charged_to = DESTINATION`.
    - `charged_to` 'SOURCE' | 'DESTINATION', required: Indicates which side of the transfer pays the fee.
    - `type` string, required: Client-defined fee classification tag
  - `transaction_reference` string, required: Client-provided unique transaction reference.
  - `transaction_description` string: Human-readable description.
  - `status` 'IN_PROGRESS' | 'COMPLETED' | 'REJECTED' | 'FAILED', required: Transaction processing status (shared across transfers, deposits, and withdrawals). - `IN_PROGRESS` — request persisted, operation in progress (non-terminal). - `COMPLETED` — operation executed successfully (terminal). - `REJECTED` — operation refused by a business rule (terminal). The specific reason is carried in `failure_reason.code`. - `FAILED` — operation failed due to a transient error (non-terminal). The specific reason is carried in `failure_reason.code`.
  - `failure_reason` FailureReason: Structured rejection or failure detail. Present iff `status ∈ {REJECTED, FAILED}`; absent on `COMPLETED` and `IN_PROGRESS`. - `REJECTED` codes: `INSUFFICIENT_FUNDS`, `ACCOUNT_LIMIT_EXCEEDED`, `TRANSFER_LIMIT_EXCEEDED`. - `FAILED` codes: `DEPENDENCY_UNAVAILABLE`, `INTERNAL_ERROR`.
    - `code` string, required: Rejection or failure code. Codes currently emitted: - `INSUFFICIENT_FUNDS` - `ACCOUNT_LIMIT_EXCEEDED` - `TRANSFER_LIMIT_EXCEEDED` - `DEPENDENCY_UNAVAILABLE` - `INTERNAL_ERROR` Clients should handle unknown codes gracefully.
    - `message` string, required: Human-readable detail.
  - `updated_at` string, date-time, required: Timestamp of the last update.
  - `source_account_balance_after` string, nullable: The source account's net available balance, in minor units, immediately after this transfer. Present only when `status` is `COMPLETED`.
  - `destination_account_balance_after` string, nullable: The destination account's net available balance, in minor units, immediately after this transfer. Present only when `status` is `COMPLETED`.

## Other responses

- `400`: `VALIDATION_ERROR`: the identifier is not a valid UUID.
- `401`: Missing or invalid access token: `UNAUTHORIZED`, `INVALID_CLIENT` or `INVALID_TENANT`.
- `403`: Access token rejected by the API gateway (for example, expired).
- `404`: `TRANSFER_NOT_FOUND`: no transfer with this identifier for the client.
- `500`: `INTERNAL_SERVER_ERROR`: unexpected error.
- `503`: `INFRASTRUCTURE_ERROR`: temporary failure, retry later.

---

[API](https://skmtc.dev/paymentology/apis/ledger-api.md) - [All operations](https://skmtc.dev/paymentology/apis/ledger-api/llms.txt) - [OpenAPI document](https://skmtc.dev/paymentology/apis/ledger-api/revisions/a5700c501bee?raw)
