Skip to content

List Transactions

Returns transaction details (purchases, refunds, reversals, fees, etc.) across all virtual cards under the current AppID account, with pagination and rich filters.

  • Scope is always your own account — the server binds the account from your HMAC credential; there is no way to query another account's data.
  • Strictly desensitized: no full PAN, no cardholder PII, no provider-side / internal order references. Each row carries card_id + last_four so you can attribute it to a card.
  • To query a single card, use List Card Transactions (or pass card_id here as an optional filter).

Endpoint

ItemValue
MethodPOST
Path/api/v1/openapi/transactions/list
AuthHMAC
IdempotencyNot required

Request Fields

All fields are optional.

FieldTypeDefaultDescription
card_idstringOptional filter — card_<id>. When provided, results are limited to that card (ownership + virtual-type validated).
transaction_time_fromstringStart of transaction-time range, format YYYY-MM-DD HH:MM:SS
transaction_time_tostringEnd of transaction-time range, format YYYY-MM-DD HH:MM:SS
typestringType filter — see Type values
statusstringStatus filter — one of PENDING / APPROVED / FAILED / REVERSED
amount_fromstringMinimum transaction amount, e.g. "10.00"
amount_tostringMaximum transaction amount, e.g. "1000.00"
merchant_namestringMerchant name (fuzzy match)
keywordstringFree-text keyword (fuzzy match over merchant / description / city / etc.)
pageint1Page number (≥ 1)
page_sizeint20Page size (≤ 100)

Example Request

json
{
  "status": "APPROVED",
  "transaction_time_from": "2026-04-01 00:00:00",
  "transaction_time_to": "2026-04-30 23:59:59",
  "page": 1,
  "page_size": 20
}

Response

A paginated envelope (list / total / page / page_size / total_pages / has_next / has_prev). Each item in list is a transaction:

Transaction Fields

FieldTypeDescription
transaction_idstringtxn_<id> — opaque token, do not parse
card_idstringcard_<id> the transaction belongs to
card_typestringLowercase business code (virtual_v …)
card_brandstringBrand display name (e.g. VISA)
last_fourstringLast 4 digits of the card (never the full PAN)
typestringNormalized upper-case type (PURCHASE / REFUND / AUTHORIZATION / REVERSAL / FEE …)
type_categorystringNormalized category for tag coloring — see Categories
type_i18nobject{ "en-US": …, "zh-CN": …, "zh-HK": … } display labels
statusstringPENDING / APPROVED / FAILED / REVERSED
transaction_timestring nullableWhen the transaction occurred (provider clock). null if unknown
transaction_currencystringTransaction currency (ISO 4217)
transaction_amountstringTransaction amount (decimal string, 2 dp)
billing_currencystringBilling / card currency
billing_amountstringBilling amount (decimal string, 2 dp)
merchant_namestringMerchant name
merchant_idstringMerchant ID (as reported by the network)
merchant_categorystringMerchant category / MCC label
merchant_countrystringMerchant country (e.g. US)
merchant_citystringMerchant city
merchant_logo_urlstringBrand logo URL (may be empty until resolved)
approval_codestringApproval code (reconciliation)
auth_codestringAuthorization code (reconciliation)
cross_border_typestring0 = domestic, 1 = cross-border
decline_reasonstringFailure / decline reason, when applicable
descriptionstringTransaction description
remarkstringRemark
created_atstringWhen the record was stored

Omitted fields are intentional

Empty optional string fields are omitted from the JSON entirely (not null). The documented shape is the complete contract — internal DB IDs, provider transaction IDs, related order numbers, user identity and full PAN are never returned. See IDs & Prefixes.

Example Response

json
{
  "code": 200,
  "message": "OK",
  "data": {
    "list": [
      {
        "transaction_id": "txn_9087654",
        "card_id": "card_12345",
        "card_type": "virtual_v",
        "card_brand": "VISA",
        "last_four": "1234",
        "type": "PURCHASE",
        "type_category": "consumption",
        "type_i18n": { "en-US": "Purchase", "zh-CN": "消费", "zh-HK": "消費" },
        "status": "APPROVED",
        "transaction_time": "2026-04-12T08:31:20Z",
        "transaction_currency": "USD",
        "transaction_amount": "12.90",
        "billing_currency": "USD",
        "billing_amount": "12.90",
        "merchant_name": "OPENAI",
        "merchant_country": "US",
        "merchant_logo_url": "https://img.logo.dev/openai.com",
        "approval_code": "091234",
        "cross_border_type": "0",
        "created_at": "2026-04-12T08:31:25Z"
      }
    ],
    "total": 1,
    "page": 1,
    "page_size": 20,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false
  }
}

Type values

The type request filter accepts these standard enums (mapped server-side to each provider's raw values):

ValueMeaning
PURCHASEConsumption / settled purchase
AUTHORIZATIONPre-authorization (held, not settled)
REFUNDRefund
REVERSALReversal
TOPUPTop-up / recharge posting
WITHDRAWWithdrawal
FEEFee

Unknown values are matched exactly (and will typically return no rows). The response type field is the normalized upper-case raw type; map it on your side for display, or use type_i18n.

Type categories

type_category is one of: consumption · refund · reversal · topup · fee · close · transfer · withdraw · interest · 3ds · unknown.

Hidden transaction types

Internal bookkeeping types (e.g. system-added cross-border fee lines and card-close entries) are hidden from this endpoint, matching the customer-facing app. Transactions after a card's close time are also excluded.

Common Errors

HTTPmessage_keyDescription
400openapi_invalid_card_idBad card_id filter
400openapi_card_type_not_supportedcard_id filter points to a non-virtual card
400invalid_date_formattransaction_time_from/to not in YYYY-MM-DD HH:MM:SS
400invalid_paramsBad amount format (amount_from / amount_to)
401openapi_invalid_credentialsAuth failure
404card_not_foundcard_id filter not found / not owned
500openapi_list_transactions_failedServer error

Notes

  • Data is served from Coinepay's local ledger (populated from provider webhooks); this endpoint does not call the upstream provider synchronously.
  • Prefer webhooks (card.*) for real-time flow; use this endpoint for periodic reconciliation and history.

Released under MIT-equivalent terms.