Docs

List transactions

GET /api/v1/programmatic/transactions

GET/api/v1/programmatic/transactions
Transactionsv1transactions:read

Returns posted, non-archived transactions with offset or cursor pagination.

Parameters

NameInType Description
typequerywithdrawal | deposit | transfer | loan_paymentOptional Return only transactions with this journal type. withdrawal
startquerystringOptional Inclusive start of the financial date range. 2026-07-01
endquerystringOptional Inclusive end of the financial date range. 2026-07-31
pagequerynumberOptional One-based offset page. Mutually exclusive with `after`; omit it for cursor pagination. <page>
limitquerynumberOptional Maximum transactions returned per page. <limit>
queryquerystringOptional Case-insensitive transaction description search. coffee
account_idquerystringOptional Return transactions that include this account. <account_id>
category_idquerystringOptional Return transactions assigned to this category. <category_id>
afterquerystringOptional Opaque cursor returned as `meta.next_cursor`. Mutually exclusive with `page`. <opaque-cursor>

Code examples

curl --request GET \
  --url 'https://api.tetri.app/api/v1/programmatic/transactions?type=withdrawal&start=2026-07-01&end=2026-07-31&page=<page>' \
  --header 'Authorization: Bearer $TETRI_API_TOKEN'

Responses

200Posted transactions with offset pagination metadata, or cursor metadata when `after` is supplied.
{
  "data": [
    {
      "type": "transactions",
      "id": "<uuid>",
      "attributes": {
        "revision": "2026-07-12T12:00:00Z",
        "group_title": "<string>",
        "execution_status": "scheduled",
        "executed_at": "2026-07-12T12:00:00Z",
        "archived_at": "2026-07-12T12:00:00Z",
        "is_archived": false,
        "created_by": {},
        "transactions": [
          {
            "transaction_journal_id": "<uuid>",
            "type": "withdrawal",
            "transfer_kind": "internal_fx",
            "date": "2026-07-12T12:00:00Z",
            "occurred_at": "2026-07-12T12:00:00Z",
            "business_date": "2026-07-12",
            "timezone": "Europe/Tbilisi",
            "description": "Grocery shopping",
            "amount": "42.50",
            "foreign_amount": "45.00",
            "foreign_currency_code": "EUR",
            "foreign_currency_symbol": "€",
            "currency_code": "USD",
            "currency_symbol": "$",
            "currency_decimal_places": 2,
            "source_id": "<uuid>",
            "source_name": "<string>",
            "source_type": "asset",
            "destination_id": "<uuid>",
            "destination_name": "<string>",
            "destination_type": "expense",
            "category_id": "<uuid>",
            "category_name": "<string>",
            "budget_id": "<uuid>",
            "budget_name": "<string>",
            "tags": [
              "<string>"
            ],
            "notes": "<string>",
            "last_reconciled_at": "2026-07-12",
            "reconciled": false,
            "status": "posted",
            "estimated_rate": "1.05",
            "final_rate": "1.058",
            "settled_at": "2026-07-12T12:00:00Z",
            "splits": [
              {
                "id": "<uuid>",
                "amount": "42.50",
                "category_id": "<uuid>",
                "note": "<string>",
                "tag_ids": [
                  "<uuid>"
                ]
              }
            ],
            "has_splits": false,
            "remainder": "0.00",
            "fx_delta_home": "1.23",
            "effective_rate_journal": "0.9200"
          }
        ]
      }
    }
  ],
  "meta": "<string>"
}
400Request parameters or payload failed validation. Inspect `code` and `message`.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}
401The personal access token is missing, invalid, expired, or revoked.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}
403The token lacks the required scope or no longer has workspace access.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}
429The credential exceeded its request rate limit.
{
  "statusCode": 400,
  "code": "PROGRAMMATIC_PAGINATION_MODE_CONFLICT",
  "message": "<string>",
  "error": "Bad Request",
  "request_id": "8cf64dcc-0f73-4f8d-a845-3d80c1040475"
}