# Get card transaction

Retrieve a card transaction by its ID.
Use in conjunction with the [card transaction state change webhook](/api-reference/webhook-event/eventcardstransactionstatechange) for versions V2.1.0 and later.
Only transactions created in the past 90 days can be accessed. A 422 error code will be returned otherwise.
When a refund happens, a separate transaction will be added with a `REFUND` transaction type.

Endpoint: GET /spend/profiles/{profileId}/cards/transactions/{transactionId}
Version: 2026Q4
Security: UserToken

## Security:

  - `UserToken` (unknown)
    http bearer JWT

## Path parameters:

  - `profileId` (integer, required)
    The ID of the profile that owns the card.

  - `transactionId` (integer, required)
    The ID of the transaction.

## Header parameters:

  - `X-External-Correlation-Id` (string)
    Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. [Learn more](/guides/developer/headers/correlation-id).

## Response 200:

  - `200` (unknown)
    Card transaction retrieved successfully.

## Response 200 fields (application/json):

  - `id` (integer)
    ID of the transaction
    Example: 342671

  - `cardToken` (string)
    Unique identifier of the card
    Example: 59123122-223d-45f9-b840-0ad4a4f80937

  - `type` (string)
    [Type](/api-reference/card-transaction#card-transaction-type) of the transaction. One of:
- `ACCOUNT_CREDIT`
- `ACCOUNT_FUNDING`
- `CASH_ADVANCE`
- `CASH_WITHDRAWAL`
- `CHARGEBACK`
- `CREDIT_TRANSACTION`
- `ECOM_PURCHASE`
- `POS_PURCHASE`
- `REFUND`
    Enum: "ACCOUNT_CREDIT", "ACCOUNT_FUNDING", "CASH_ADVANCE", "CASH_WITHDRAWAL", "CHARGEBACK", "CREDIT_TRANSACTION", "ECOM_PURCHASE", "POS_PURCHASE", "REFUND"

  - `state` (string)
    The current [state](/api-reference/card-transaction#card-transaction-state) of the transaction. One of:
- `IN_PROGRESS`
- `COMPLETED`
- `DECLINED`
- `CANCELLED`
- `UNKNOWN`
    Enum: "IN_PROGRESS", "COMPLETED", "DECLINED", "CANCELLED", "UNKNOWN"

  - `declineReason` (string | null)
    Code of the [decline reason](/api-reference/card-transaction#card-transaction-decline-reasons) if applicable
    Example: null

  - `detailedDeclineReason` (string | null)
    Code of the [detailed decline reason](/api-reference/card-transaction#card-transaction-detailed-decline-reasons) if applicable
    Example: null

  - `creationTime` (string)
    When the transaction was created
    Example: 2022-11-28T08:17:54.241Z

  - `modificationTime` (string)
    When the transaction was last updated
    Example: 2022-11-28T08:17:54.241Z

  - `purgeTime` (string | null)
    Time at which reserved funds will be released after the authorisation hold expires
    Example: 2022-11-28T08:17:54.241Z

  - `transactionAmount` (object)
    Transaction amount, including any embedded fees such as ATM fees that are not applied by Wise

  - `transactionAmount.amount` (number)
    Transaction amount
    Example: 1.4

  - `transactionAmount.currency` (string)
    Currency code
    Example: SGD

  - `fees` (array)
    Array of fees

  - `fees.amount` (number)
    Fee amount
    Example: 0.1

  - `fees.currency` (string)
    Currency code
    Example: SGD

  - `fees.fee_type` (string)
    Fee type
    Example: ATM_MACHINE

  - `transactionAmountWithFees` (object)
    Transaction amount including all fees

  - `transactionAmountWithFees.amount` (number)
    Transaction amount including all fees
    Example: 1.5

  - `transactionAmountWithFees.currency` (string)
    Currency code
    Example: SGD

  - `merchant` (object)
    Merchant information

  - `merchant.name` (string)
    Name of the merchant
    Example: Test Payment

  - `merchant.location` (object)
    Merchant location

  - `merchant.location.country` (string | null)
    Country where merchant is located
    Example: France

  - `merchant.location.city` (string | null)
    City where merchant is located
    Example: Rouen

  - `merchant.location.zipCode` (string | null)
    Zip code where merchant is located
    Example: 00000

  - `merchant.location.region` (string | null)
    Region where merchant is located
    Example: null

  - `merchant.location.state` (string | null)
    State where merchant is located
    Example: null

  - `merchant.category` (object)
    Merchant category

  - `merchant.category.name` (string)
    Category of the merchant
    Example: MISCELLANEOUS_FOOD_STORES_CONVEN

  - `merchant.category.code` (string)
    MCC code of the merchant
    Example: 5999

  - `merchant.category.description` (string)
    Description of the merchant category
    Example: 5999 R Miscellaneous and Special

  - `authorisationMethod` (string)
    Authorisation method
    Example: MANUAL_ENTRY

  - `approvalCode` (string | null)
    Also called authorization code. This can be used to prove ownership of a customer's card/account to a merchant
    Example: 913647

  - `billingAmount` (object)
    Billing amount

  - `billingAmount.amount` (number)
    Billing amount
    Example: 1.1

  - `billingAmount.currency` (string)
    Currency code
    Example: EUR

  - `arn` (string | null)
    Acquirer reference number
    Example: 04300014127798385983852

  - `pinValidationResult` (string | null)
    PIN validation result. One of:
- `ONLINE_PIN_VALIDATED`
- `ONLINE_PIN_INVALID`
- `OFFLINE_PIN_VALIDATED`
- `OFFLINE_PIN_INVALID`
- `NOT_RECEIVED`
    Enum: "ONLINE_PIN_VALIDATED", "ONLINE_PIN_INVALID", "OFFLINE_PIN_VALIDATED", "OFFLINE_PIN_INVALID", "NOT_RECEIVED"

  - `balanceChannelReferenceId` (string | null)
    Balance channel reference ID associated with the card transaction
    Example: 6e71018d-2f4d-4fc3-6711-f517f4664712

  - `debits` (array)
    Array of debits. Only present when retrieving a single transaction by ID.
The debits list is a non-aggregated list of debit movements, meaning that the `balanceId` is not unique in the list. For example, a cancelled transaction may have a list of 2 debits where the absolute values of `debitedAmount.amount`, `forAmount.amount` and `fee.amount` are the same, but one is the negation of the other due to a reservation (first debit) which was then released (second debit with negated amounts). You can choose to perform the aggregation in your system or display the full list of debits to the end customer.

  - `debits.balanceId` (integer)
    Balance ID
    Example: 52832

  - `debits.debitedAmount` (object)
    Amount taken from the balance

  - `debits.debitedAmount.amount` (number)
    Amount
    Example: 1.1

  - `debits.debitedAmount.currency` (string)
    Currency code
    Example: EUR

  - `debits.forAmount` (object)
    Amount converted to

  - `debits.forAmount.amount` (number)
    Amount
    Example: 1.5

  - `debits.forAmount.currency` (string)
    Currency code
    Example: SGD

  - `debits.rate` (number)
    Exchange rate of debitedAmount to forAmount
    Example: 1.36363636364

  - `debits.fee` (object)
    Conversion fee

  - `debits.fee.amount` (number)
    Conversion fee amount
    Example: 0.04

  - `debits.fee.currency` (string)
    Currency code
    Example: EUR

  - `debits.creationTime` (string)
    Creation time of debit
    Example: 2022-11-28T08:17:54.241Z

  - `credits` (array)
    Array of credits. Only present when retrieving a single transaction by ID

  - `credits.balanceId` (integer)
    Balance ID
    Example: 52832

  - `credits.creditedAmount` (object)
    Amount credited to the balance

  - `credits.creditedAmount.amount` (number)
    Amount
    Example: 1.5

  - `credits.creditedAmount.currency` (string)
    Currency code
    Example: SGD

  - `credits.creationTime` (string)
    Creation time of credit
    Example: 2022-11-28T08:17:54.241Z

  - `relayAuthorisationData` (object | null)
    Relayed authorisation response data, only available if the partner has opted in for [relayed authorisation](/guides/product/issue-cards/relayed-authorisation)

  - `relayAuthorisationData.responseCode` (string)
    [ResponseCode](/guides/product/issue-cards/relayed-authorisation#authorisation-response) of the relayed authorisation. One of:
- `APPROVED`
- `PROCESSING_ERROR`
- `NON_SUPPORTED_CURRENCY`
- `NON_SUPPORTED_MCC_FOR_COUNTRY`
- `BLOCKED_COUNTRY`
- `TRANSACTION_TYPE_NOT_SUPPORTED`
- `SUSPECTED_FRAUD`
    Enum: "APPROVED", "PROCESSING_ERROR", "NON_SUPPORTED_CURRENCY", "NON_SUPPORTED_MCC_FOR_COUNTRY", "BLOCKED_COUNTRY", "TRANSACTION_TYPE_NOT_SUPPORTED", "SUSPECTED_FRAUD"

  - `relayAuthorisationData.fallback` (boolean)
    Indicating whether there was a fallback applied by Wise
    Example: true

## Response 200 headers (application/json):

  - `X-External-Correlation-Id` (string)
    Echoed back when `X-External-Correlation-Id` was included in the request. [Learn more](/guides/developer/headers/correlation-id).
    Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

  - `x-trace-id` (string)
    Unique trace identifier assigned by Wise. Useful when contacting support about a specific request.
    Example: fba501b6d453b96789f52338f019341f

## Response 404:

  - `404` (unknown)
    Not found.

## Response 404 fields (application/problem+json):

  - `type` (string)
    A domain type exception

  - `title` (string)
    The title of the exception

  - `status` (integer)
    The HTTP status error code

  - `detail` (string)
    A detailed description of the failure

  - `instance` (string)
    The URI that triggered the error

  - `code` (string)
    Specific application-level error code

## Response 404 headers (application/problem+json):

  - `X-External-Correlation-Id` (string)
    Echoed back when `X-External-Correlation-Id` was included in the request. [Learn more](/guides/developer/headers/correlation-id).
    Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

  - `x-trace-id` (string)
    Unique trace identifier assigned by Wise. Useful when contacting support about a specific request.
    Example: fba501b6d453b96789f52338f019341f

## Response 422:

  - `422` (unknown)
    Unprocessable request.

## Response 422 fields (application/problem+json):

  - `type` (string)
    A domain type exception (must be /errors/types/domain for this error type)

  - `title` (string)
    The title of the error

  - `status` (integer)
    The HTTP status error code

  - `detail` (string)
    A detailed description of the failure

  - `instance` (string)
    The URI that triggered the error

  - `code` (string)
    Error code of the request

## Response 422 headers (application/problem+json):

  - `X-External-Correlation-Id` (string)
    Echoed back when `X-External-Correlation-Id` was included in the request. [Learn more](/guides/developer/headers/correlation-id).
    Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

  - `x-trace-id` (string)
    Unique trace identifier assigned by Wise. Useful when contacting support about a specific request.
    Example: fba501b6d453b96789f52338f019341f

## Response 429:

  - `429` (unknown)
    Rate limit exceeded. Retry after the number of seconds specified in the `Retry-After` header.

## Response 429 headers (application/json):

  - `Retry-After` (integer)
    Number of seconds to wait before retrying the request.
    Example: 5

  - `X-Rate-Limited-By` (string)
    Identifies the rate limiter that triggered the 429 response.
    Example: wise-public-api

  - `X-External-Correlation-Id` (string)
    Echoed back when `X-External-Correlation-Id` was included in the request. [Learn more](/guides/developer/headers/correlation-id).
    Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

  - `x-trace-id` (string)
    Unique trace identifier assigned by Wise. Useful when contacting support about a specific request.
    Example: fba501b6d453b96789f52338f019341f

