# List card transactions

> Returns a paginated list of card transactions

`GET https://api.light.inc/v1/card-transactions`

## Note

The filter and sort field lists below are incomplete. The server also accepts ownerId , amount , originalAmount , originalCurrency , receiptDocumentKey , taxId and accountId as filters and originalAmount as a sort; an unknown field fails with INVALID_QUERY_FIELD listing the real set. The two undocumented flags: onlyPostable=true returns transactions a post would currently succeed for (a flag recomputed in the background after each edit, so it can lag a moment behind a PATCH ); missingData=true returns transactions with no receipt, or not yet posted and not postable. Sending both fails with CARD_TRANSACTION_INVALID_FILTER_COMBINATION . This list (and the single GET ) returns the enriched shape with labels and exportedAt , but without editStatus — that field only appears on the PATCH , post and reset responses. amount is an unsigned magnitude; direction ( DEBIT for spend, CREDIT for a refund or incoming credit) carries the sign. A refund is a separate transaction with status: REFUNDED , not a change to the original capture, and nothing on the model links the two. If the company's card setup has auto-posting on, a transaction can already be POSTED the first time you see it. A cardholder-only credential must filter on its own ownerId or cardId or it receives 403 .

## Authorization

- API key
- Bearer token

See https://light.inc/docs/getting-started/authentication.

## Query parameters

- `sort` (string) — Sort string in the format field:direction . To provide multiple sort fields, separate them with commas. Available directions: asc , desc . Available fields: companyEntityId , status , performedAt .
- `filter` (string) — Filter string in the format field:operator:value . To provide multiple filters, separate them with commas. Available operators: eq , ne , in , not_in , gt , gte , lt , lte . - For in and not_in operators, provide multiple values separated by the pipe character ( ). Available fields: transactionId , cardBalanceAccountId , companyEntityId , cardId , status , performedAt , updatedAt .
- `limit` (integer, int32) — Maximum number of items to return. Default is 50, maximum is 200.
- `offset` (integer, int64) — Number of items to skip before starting to collect the result set. Deprecated, use 'cursor' instead.
- `cursor` (string) — The cursor position to start returning results from. To opt-in into cursor-based pagination, provide 0 for the initial request. For subsequent requests, use nextCursor and prevCursor from the previous response to navigate. Cursor values are opaque and should not be constructed manually.
- `onlyPostable` (boolean)
- `missingData` (boolean)


## Response

- `records.id` — The transaction id, also its accounting document id.
- `records.companyId` — Your company id.
- `records.companyEntityId` — The entity the card belongs to.
- `records.companyEntityName` — That entity's name.
- `records.cardBalanceAccountId` — The balance account the card draws on.
- `records.cardBalanceAccountLabel` — Its name.
- `records.cardId` — The card that was charged.
- `records.cardVendorId` — The vendor Light matched to the merchant, if any.
- `records.cardVendorAvatarUrl` — That vendor's logo URL.
- `records.cardVendorName` — That vendor's name.
- `records.cardOwnerName` — The cardholder's name.
- `records.cardOwnerId` — The cardholder's user id.
- `records.cardLastFour` — Last four digits of the card number.
- `records.originalAmount` — The amount charged by the merchant, in the merchant's currency, minor units.
- `records.originalCurrency` — The merchant's currency.
- `records.amount` — Unsigned, in minor units. The sign is `direction`: `DEBIT` is money out, `CREDIT` is a refund or incoming credit.
- `records.currency` — The balance account's currency, which `amount` is in.
- `records.status` — Set by the card issuer, never by this API, apart from `POSTED`. `AUTHORIZED` moves to `CAPTURED`, `DECLINED` or `VOIDED`; `CAPTURED` and `REFUNDED` can be posted. A `REFUNDED` transaction is its **own record** with `direction: CREDIT` — the original capture keeps its status and nothing on the model links the two.
- `records.merchant` — The merchant, as reported by the card network.
- `records.merchant.name` — Merchant name as reported by the card network.
- `records.merchant.cleanName` — The name cleaned up by Light, used for display and vendor matching.
- `records.merchant.zipcode` — The merchant's postal code.
- `records.merchant.id` — The card network's merchant id.
- `records.merchant.mcc` — Merchant category code.
- `records.merchant.acquirerId` — Id of the merchant's acquiring bank.
- `records.merchant.logoUrl` — Logo URL, when Light has one.
- `records.receiptDocumentKey` — Filled asynchronously after a receipt upload with the key of the converted PDF, which is not the `key` the upload endpoint returned.
- `records.lines` — The accounting split of the transaction: account, tax code and cost center per line.
- `records.lines.id` — The line id.
- `records.lines.transactionId` — The card transaction the line belongs to.
- `records.lines.companyId` — Your company id.
- `records.lines.accountId` — The expense account for the line.
- `records.lines.accountLabel` — Its name.
- `records.lines.taxCodeId` — The tax code on the line.
- `records.lines.taxCodeLabel` — Its name.
- `records.lines.costCenterId` — Cost center on the line.
- `records.lines.costCenterName` — Its name.
- `records.lines.amount` — Gross line amount in the balance account currency, minor units.
- `records.lines.netAmount` — Line amount excluding tax, minor units.
- `records.lines.description` — The line description.
- `records.lines.createdAt` — When the line was created.
- `records.lines.updatedAt` — When it was last changed.
- `records.lines.customProperties` — Custom property values on the line.
- `records.lines.amortizationTemplateId` — Release template id when the line is spread over a schedule; `null` otherwise.
- `records.lines.amortizationStartDate` — First date of that schedule.
- `records.lines.amortizationEndDate` — Last date of that schedule.
- `records.failureContext` — Set when a batch update or a post fails validation, or when receipt conversion fails; cleared by the next successful post. The description about vendor onboarding is a copy-paste from another model.
- `records.description` — The transaction description.
- `records.performedAt` — When the card was charged.
- `records.exportedAt` — When the transaction's export to accounting completed; `null` until then. Legacy field from before card transactions posted to the ledger as documents.
- `records.createdAt` — When Light received the transaction.
- `records.updatedAt` — When it was last changed.
- `records.customProperties` — Custom property values on the transaction.

```json
{
  "records": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "companyEntityId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "companyEntityName": "string",
      "cardBalanceAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "cardBalanceAccountLabel": "string",
      "cardId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "cardVendorId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "cardVendorAvatarUrl": "string",
      "cardVendorName": "string",
      "cardOwnerName": "string",
      "cardOwnerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "cardLastFour": "string",
      "originalAmount": 100000,
      "originalCurrency": "USD",
      "amount": 100000,
      "currency": "USD",
      "direction": "DEBIT",
      "transactionReason": "ACCOUNT_NOT_ACTIVE",
      "purchaseType": "ATM",
      "status": "AUTHORIZED",
      "type": "PAYMENT",
      "merchant": {
        "name": "string",
        "cleanName": "string",
        "country": "UNDEFINED",
        "zipcode": "string",
        "id": "string",
        "mcc": "string",
        "acquirerId": "string",
        "logoUrl": "string"
      },
      "receiptDocumentKey": "string",
      "lines": [
        {
          "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "accountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "accountLabel": "string",
          "taxCodeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "taxCodeLabel": "string",
          "costCenterId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "costCenterName": "string",
          "amount": 100000,
          "netAmount": 100000,
          "description": "string",
          "createdAt": "2026-01-15T09:30:00Z",
          "updatedAt": "2026-01-15T09:30:00Z",
          "customProperties": [
            {}
          ],
          "amortizationTemplateId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "amortizationStartDate": "2026-01-15",
          "amortizationEndDate": "2026-01-15"
        }
      ],
      "failureContext": {
        "name": "string",
        "type": "BAD_REQUEST",
        "errors": [
          {
            "type": "string",
            "message": "string",
            "path": [],
            "context": null
          }
        ]
      },
      "description": "string",
      "performedAt": "2026-01-15T09:30:00Z",
      "exportedAt": "2026-01-15T09:30:00Z",
      "createdAt": "2026-01-15T09:30:00Z",
      "updatedAt": "2026-01-15T09:30:00Z",
      "customProperties": [
        {
          "groupId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "groupInternalName": "string",
          "values": [
            {}
          ]
        }
      ]
    }
  ],
  "hasMore": true,
  "total": 100000,
  "nextCursor": "string",
  "prevCursor": "string"
}
```

Values above are generated from the schema: the shapes and types are real, the values are placeholders.

## Code

```bash
curl -X GET "https://api.light.inc/v1/card-transactions" \
  -H "Authorization: Basic YOUR_API_KEY"
```

---

Full page: https://light.inc/docs/api-reference/v1--card-transactions/list-card-transactions · Index: https://light.inc/docs/llms.txt
