Returns a paginated list of card transactions — every authorization, capture, refund, fee, and adjustment that touched any of the company's vendor cards.
The endpoint excludes the internal StripeAuthorization rows (those are partial pre-auths that get superseded by a final CardTransaction). The result is scoped per-caller across every company the caller has permission in (via policy_scope); the company-id header is not consulted, and omitting it still returns 200 with the caller's full permitted scope. To restrict results to one company, filter explicitly with the company_id query parameter.
When you'll use this endpoint
- Show the "transactions feed" in your dashboard.
- Build per-user / per-card / per-merchant spend reports.
- Audit pending vs. approved transactions ahead of month-end close.
- Reconcile each row with its legacy
Invoice(when set viainvoice_id). Note:invoice_idpoints to the internalInvoiceUUID — it is not aFiscalInvoice/ SII DTE id. To match a transaction against a SII DTE you have to cross the merchant + amount + date againstGET /v1/fiscal_invoices.
Response structure
Each row exposes:
| Field | Description |
|---|---|
id | Vendor-prefixed string (base64 encoded for some vendors). |
vendor_card_id | The VendorCard.id that incurred the transaction. |
user_id | Firebase user id of the cardholder. |
company_id | UUID of the company. |
amount_cents / currency | Transaction amount in the merchant's currency. |
target_amount_cents / target_currency | Settled amount in the company's accounting currency. |
amount_in_clp | Amount converted to CLP at settlement time (Chile-specific reporting). |
amount_in_limit_currency | Amount converted to the card's limit_currency. |
exchange_rate | FX rate applied at settlement. |
status | Lifecycle (see enum). |
kind | Transaction kind (purchase, refund, fee, adjustment, etc.). |
merchant (merchant_name, cleaned_merchant_name, merchant_image_url, merchant_id) | Merchant info. |
description | Free-form description from the vendor or the cardholder. |
comments | Internal notes (e.g. "client meeting Q1 review"). |
transaction_labels | Tags applied by the company. |
invoice_id | Legacy Invoice UUID (internal billing record kept for backwards compatibility). Not a FiscalInvoice / SII DTE id — fiscal invoices use the composite <rut>-<document_type>-<number> format and are exposed via GET /v1/fiscal_invoices. |
superseding_transaction_id | When a pending transaction is replaced by the final one, the new id. |
superseding_reason | Why it was superseded. |
completed_at / settled_at / created_at | Lifecycle timestamps. |
target_amount_formatted, amount_formatted | UI-ready strings. |
card | Embedded vendor-card summary. |
Common queries
# Most recent transactions of a single card, excluding superseded rows
GET /v1/card_transactions?\
vendor_card_id=Q2FyZDoxMDIwNjQ5Mw==&\
status={"$ne":"superseded"}&\
_order=desc&_field=created_at&_start=0&_end=25
# Approved transactions in the last 30 days, by status
GET /v1/card_transactions?\
status=approved&\
created_at={"$gte":"2026-04-01T00:00:00Z"}&\
_order=desc&_field=created_at
# Pending transactions of a specific user (declines and pre-auths)
GET /v1/card_transactions?\
user_id=<firebase_uid>&\
status=pending
# Search by merchant name (regex)
GET /v1/card_transactions?\
merchant_name={"$regex":"AWS"}
# By kind — purchases/refunds only, excluding fees
GET /v1/card_transactions?\
kind={"$in":["purchase","refund"]}
# USD-denominated transactions that haven't been linked to a legacy `Invoice` yet
GET /v1/card_transactions?\
currency={"$ne":"CLP"}&\
invoice_id=nullAll operators in Filters are supported on the columns listed below.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
401Unauthorized — missing or invalid bearer token, or the caller is not
permitted to list card transactions (Pundit authorization failure).
Returned with an empty body. Note: the company-id header is not
required for this endpoint.
