---
title: "Retrieve one"
method: GET
path: "/v1/card_transactions/{card_transaction_id}"
tags: ["Card transaction"]
---

# Retrieve one

`GET /v1/card_transactions/{card_transaction_id}`

## Request

- Base URL: `https://api.cardda.com`
- URL: `https://api.cardda.com/v1/card_transactions/{card_transaction_id}`
- Auth: HTTP bearer

Returns a single card transaction by id. Visible to admins, holders of the
`card_transactions_manage` permission, or the cardholder the transaction
belongs to.

The response includes the transaction's `transaction_labels` and the computed
fields `commission_id`, `type`, `amount_formatted`, and
`target_amount_formatted`. The internal `embedding` vector is never exposed.

**Multi-provider note.** Amounts are Cardda's own reconstruction across issuing
partners (Slash, PLH, Pomelo, etc.): `amount_in_clp` is the CLP reconversion at
settlement, and for some vendors the balance/decline context is derived from the
vendor payload rather than a native field. Decline reasons surface in
`status_reason`.

## Path parameters

- `card_transaction_id` string, required

## Parameters

- `#/paths/~1v1~1merchants/get/parameters/0` (unresolved $ref)

## Response `200`

The card transaction.

- Transaction
  - `id` string: Vendor-prefixed transaction id (often base64-encoded; not a UUID).
  - `user_id` string: Firebase user id of the cardholder.
  - `vendor_card_id` string: Id of the `VendorCard` that incurred the transaction (vendor-prefixed string, not a UUID).
  - `description` string
  - `merchant_name` string
  - `cleaned_merchant_name` string, nullable: Cardda-normalized merchant name (e.g. 'AMZN MKTP US' → 'Amazon').
  - `merchant_image_url` string, nullable
  - `merchant_id` string, uuid, nullable
  - `status` 'pending' | 'approved' | 'declined' | 'reversed' | 'settled' | 'superseded' | 'disputed' | 'refunded': Lifecycle status of the transaction.
  - `kind` 'purchase' | 'refund' | 'fee' | 'adjustment' | 'reversal' | 'allocation' | 'allocation_release' | 'fx_fee': What sort of monetary movement the row represents.
  - `type` string: STI subclass — the issuing vendor that produced the transaction.
  - `amount_cents` integer: Transaction amount in the merchant currency, in minor units (e.g. cents). **Spends are negative** (`purchase`, `fee`, `fx_fee`, `allocation`); **refunds/reversals/`allocation_release` are positive**.
  - `amount_in_clp` integer: Amount of the transaction in CLP at settlement time. Follows the same sign convention as `amount_cents` (spends negative, refunds positive).
  - `amount_in_limit_currency` integer, nullable: Amount converted to the card's `limit_currency`.
  - `currency` string: Merchant currency in upper-case ISO-4217 (e.g. `USD`, `CLP`).
  - `exchange_rate` string
  - `migrated` boolean, nullable
  - `invoice_id` string, uuid, nullable: UUID of a legacy `Invoice` row (internal billing record kept for backwards compatibility). **Not** a `FiscalInvoice` / SII DTE id — fiscal invoice ids use the composite `<rut>-<document_type>-<number>` string format and are exposed via `GET /v1/fiscal_invoices`, not via this field.
  - `status_reason` string, nullable: Reason of the current transaction status
  - `commission_id` string, uuid, nullable: UUID of the linked commission row, when the transaction accrued a Cardda commission (computed field).
  - `target_amount_cents` integer: Settled amount in the company's accounting currency, in minor units. Follows the same sign convention as `amount_cents` (spends negative, refunds positive).
  - `target_currency` string: Currency the company sees the transaction in (the user's preferred accounting currency), in upper-case ISO-4217.
  - `amount_formatted` string, nullable: UI-ready formatted amount including currency.
  - `target_amount_formatted` string, nullable: UI-ready formatted settled amount including currency.
  - `comments` string, nullable: Free-form internal notes attached by the company.
  - `transaction_labels` object[]: Tags applied to the transaction by the company.
    - `id` string, uuid
    - `label` string
    - `color` string
  - `superseding_transaction_id` string, nullable: When a pending transaction is replaced by the final one, the new id.
  - `superseding_reason` string, nullable: Why the transaction was superseded.
  - `completed_at` string, date-time, nullable: When the transaction was captured/cleared.
  - `settled_at` string, date-time, nullable: When the transaction reached final settlement.
  - `company_id` string, uuid
  - `card` VendorCard
    - `id` string: Card id. Cardda card ids are vendor-prefixed base64-encoded strings (e.g. `Q2FyZDoxMDIwNjQ5Mw==`), not UUIDs.
    - `user_id` string: Firebase user id of the cardholder (not a UUID).
    - `company_id` string, uuid
    - `type` 'AptoCard' | 'BrexCard' | 'Cards::Increase::Card' | 'Cards::Plh::Card' | 'DivvyCard' | 'Issuing::Relay::Card' | 'Issuing::Slash::Card' | 'MercuryCard' | 'MeshCard' | 'PomeloCard' | 'StripeCard': Single Table Inheritance discriminator (issuing vendor / STI sub-class). A persisted column, so it always serializes into the row for **every** caller.
    - `name` string
    - `spending_control_strategy` 'allocation_based' | 'limit_based': How the card limits spend, and therefore which update fields act on it. - `allocation_based` (prepaid): the card spends the funds allocated to it (`allocated_amount`). Configured with `allocated_amount_preference_cents` and the `allocation_*` / `recurring_allocation_amount_cents` fields. - `limit_based`: the card is capped at `limit_amount` per `limit_interval`. Configured with `limit_amount_preference_cents` and `limit_interval_preference`.
    - `last4` string
    - `status` 'active' | 'inactive' | 'pending' | 'canceled'
    - `status_preference` string
    - `migrated` boolean
    - `usage` integer, nullable
    - `limit_amount` MoneyAmount, nullable: Monetary amount. All numeric fields are serialized as strings to preserve precision (BigDecimal).
      - `amount` string: Amount in the main currency unit (e.g., '3000.0' for 3,000 CLP, '176.0' for 176 USD).
      - `formatted` string: Human-readable formatted amount including currency symbol.
      - `cents` string: Amount in the currency's smallest subunit. For CLP (no subunits) this equals the main amount; for USD this is 100× the main amount.
      - `currency_iso` string: ISO 4217 currency code.
    - `limit_interval` 'daily' | 'weekly' | 'monthly' | 'yearly' | 'all_time' | 'per_authorization': Current spending limit interval.
    - `limit_amount_preference` MoneyAmount, nullable: Monetary amount. All numeric fields are serialized as strings to preserve precision (BigDecimal).
      - `amount` string: Amount in the main currency unit (e.g., '3000.0' for 3,000 CLP, '176.0' for 176 USD).
      - `formatted` string: Human-readable formatted amount including currency symbol.
      - `cents` string: Amount in the currency's smallest subunit. For CLP (no subunits) this equals the main amount; for USD this is 100× the main amount.
      - `currency_iso` string: ISO 4217 currency code.
    - `limit_interval_preference` 'daily' | 'weekly' | 'monthly' | 'yearly' | 'all_time' | 'per_authorization', nullable: Requested spending limit interval.
    - `allocated_amount` MoneyAmount, nullable: Monetary amount. All numeric fields are serialized as strings to preserve precision (BigDecimal).
      - `amount` string: Amount in the main currency unit (e.g., '3000.0' for 3,000 CLP, '176.0' for 176 USD).
      - `formatted` string: Human-readable formatted amount including currency symbol.
      - `cents` string: Amount in the currency's smallest subunit. For CLP (no subunits) this equals the main amount; for USD this is 100× the main amount.
      - `currency_iso` string: ISO 4217 currency code.
    - `allocated_amount_preference` MoneyAmount, nullable: Monetary amount. All numeric fields are serialized as strings to preserve precision (BigDecimal).
      - `amount` string: Amount in the main currency unit (e.g., '3000.0' for 3,000 CLP, '176.0' for 176 USD).
      - `formatted` string: Human-readable formatted amount including currency symbol.
      - `cents` string: Amount in the currency's smallest subunit. For CLP (no subunits) this equals the main amount; for USD this is 100× the main amount.
      - `currency_iso` string: ISO 4217 currency code.
    - `allocation_interval_preference` 'per_transaction' | 'daily' | 'weekly' | 'monthly' | 'yearly', nullable: When the recurring allocation is applied. `daily`, `weekly`, `monthly` and `yearly` reload the card at the start of each period; `per_transaction` reloads it back to `recurring_allocation_amount_cents` after each purchase. Only acts on `allocation_based` cards.
    - `allocation_priority_preference` 'low' | 'mid' | 'high' | 'max', nullable: Priority level for fund allocation across multiple cards.
    - `recurring_allocation_amount_cents` integer, nullable: Recurring allocation amount, in the **minor unit of the card's `limit_currency`** — for a CLP card that is the whole peso (`50000` is $50.000, not $500), for a USD card the cent. See [Amounts and currency](https://docs.cardda.com/docs/amounts-and-currency).
    - `remaining_balance` string, nullable: Actual amount the card can spend right now, as a decimal string in the card's currency (not cents). This is the minimum between the user's spending limit and the company's available balance.
    - `spent` integer
    - `company_expendable_balance_in_limit_currency` string, nullable: Company funds this card can still draw, expressed in the card's `limit_currency`, as a decimal string (a BigDecimal serialized to JSON, not a number). **Show-only** — returned by `GET /v1/vendor_cards/{id}` only, and only when the caller can read the company balance (`policy(company).balance?`). Absent from the list endpoint.
    - `spent_in_interval_with_limit_currency` number, float: Amount spent in the current limit interval, converted to the card's `limit_currency`. Always a number (defaults to `0.0`); never `null`. **Show-only** — returned by `GET /v1/vendor_cards/{id}` only.
    - `vendor_max_spending_limits` unknown
    - `vendor_max_allocation` MoneyAmount, nullable: Monetary amount. All numeric fields are serialized as strings to preserve precision (BigDecimal).
      - `amount` string: Amount in the main currency unit (e.g., '3000.0' for 3,000 CLP, '176.0' for 176 USD).
      - `formatted` string: Human-readable formatted amount including currency symbol.
      - `cents` string: Amount in the currency's smallest subunit. For CLP (no subunits) this equals the main amount; for USD this is 100× the main amount.
      - `currency_iso` string: ISO 4217 currency code.
    - `non_sensitive_information` object, nullable: Non-sensitive cardholder/configuration attributes (`user_name`, `user_identifier`, `country`, `address`, `postal_code`, `restricted_merchants`, `phone`). Empty object when unavailable. **Show-only** — returned by `GET /v1/vendor_cards/{id}` only.
    - `last_allocation_transaction_status` string, nullable: Status of the most recent allocation transaction on this card. **Show-only** — returned by `GET /v1/vendor_cards/{id}` only.
    - `last_allocation_transaction_created_at` string, date-time, nullable: Creation timestamp of the most recent allocation transaction. **Show-only** — returned by `GET /v1/vendor_cards/{id}` only.
    - `allocation_priority_stats` object, nullable: Total recurring allocation (cents) per priority group across the company's active cards (e.g. `{ "low": 5000000, "mid": 3000000 }`), or `null` for card types that don't compute it. **Show-only** — returned by `GET /v1/vendor_cards/{id}` only.
    - `preference_restricted_spendable` string, nullable: Amount the card can still spend before hitting its configured spending limit, as a decimal string in the card's currency (not cents). Calculated as the spending limit minus amount already spent in the current interval. Unlike `remaining_balance`, this does not consider the company's available funds.
    - `spent_in_interval` number, float
    - `spent_in_vendor_interval` number, float
    - `fees_in_vendor_interval` number, float
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `merchant` Merchant: A merchant (payee) resolved from card transactions. The company's scope is the set of merchants referenced by its ledger transactions.
    - `id` string, uuid
    - `name` string: Normalized merchant name.
    - `image_url` string, nullable: Logo / image URL for the merchant.
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `401`: Unauthorized
- `404`: Card transaction not found (or not visible to the caller).

---

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