Expensicat
API Reference

Transactions

GET
/v1/transactions

List transactions with filtering, search, and pagination

Authorization

bearerAuth
AuthorizationBearer <token>

Session JWT or OAuth2 access token

In: header

Query Parameters

cursor?string

Pagination cursor

limit?integer

Number of items per page (1-100; higher values cap at 100)

Range1 <= value
Default20
start_date?string

Start date (YYYY-MM-DD)

end_date?string

End date (YYYY-MM-DD)

amount?string
amount[eq]?string
amount[neq]?string
amount[gt]?string
amount[gte]?string
amount[lt]?string
amount[lte]?string
amount[in]?string
amount[nin]?string
base_amount?string
base_amount[eq]?string
base_amount[neq]?string
base_amount[gt]?string
base_amount[gte]?string
base_amount[lt]?string
base_amount[lte]?string
base_amount[in]?string
base_amount[nin]?string
booking_date?string
booking_date[eq]?string
booking_date[neq]?string
booking_date[gt]?string
booking_date[gte]?string
booking_date[lt]?string
booking_date[lte]?string
booking_date[in]?string
booking_date[nin]?string
status?string
status[eq]?string
status[neq]?string
status[gt]?string
status[gte]?string
status[lt]?string
status[lte]?string
status[in]?string
status[nin]?string
category_id?string
category_id[eq]?string
category_id[neq]?string
category_id[gt]?string
category_id[gte]?string
category_id[lt]?string
category_id[lte]?string
category_id[in]?string
category_id[nin]?string
bank_account_id?string
bank_account_id[eq]?string
bank_account_id[neq]?string
bank_account_id[gt]?string
bank_account_id[gte]?string
bank_account_id[lt]?string
bank_account_id[lte]?string
bank_account_id[in]?string
bank_account_id[nin]?string
is_recurring?string
is_recurring[eq]?string
is_recurring[neq]?string
is_recurring[gt]?string
is_recurring[gte]?string
is_recurring[lt]?string
is_recurring[lte]?string
is_recurring[in]?string
is_recurring[nin]?string
currency?string
currency[eq]?string
currency[neq]?string
currency[gt]?string
currency[gte]?string
currency[lt]?string
currency[lte]?string
currency[in]?string
currency[nin]?string
q?string

Search query (FTS)

categories?string

Category IDs (comma-separated) - legacy, use category_id[in]

bank_accounts?string

Bank account IDs (comma-separated) - legacy, use bank_account_id[in]

statuses?string

Statuses (comma-separated) - legacy, use status[in]

types?string

Types: credit,debit,under-50,50-200,200-500,over-500

sort?string

Sort column

Default"booking_date"

Value in

  • "booking_date"
  • "amount"
  • "created_at"
order?string

Sort order

Default"desc"

Value in

  • "asc"
  • "desc"

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/transactions"
{  "data": [    {      "id": "string",      "organization_id": "string",      "bank_account_id": "string",      "transaction_id": "string",      "booking_date": "string",      "amount": 0,      "currency": "string",      "description": "string",      "status": "string",      "raw_data": null,      "created_at": "string",      "updated_at": "string",      "name": "string",      "method": "string",      "category_id": "string",      "base_amount": 0,      "base_currency": "string",      "exclude_from_analytics": true,      "notes": "string",      "is_recurring": true,      "recurrence_period": "string",      "recurring_last_detected_at": "string",      "recurring_series_id": "string",      "bank_account": {        "id": "string",        "name": "string"      },      "category": {        "id": "string",        "name": "string",        "slug": "string",        "color": "string"      },      "enrichment": {        "display_name": "string",        "category_slug": "string",        "references": [          "string"        ]      }    }  ],  "meta": {    "count": 0,    "next_cursor": "string"  }}
POST
/v1/transactions

Create a bank or cash transaction

Authorization

bearerAuth
AuthorizationBearer <token>

Session JWT or OAuth2 access token

In: header

Header Parameters

idempotency-key?string

Optional idempotency key. Reusing the same key with an identical body replays the original response; reusing it with a different body returns 409.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/transactions" \  -H "Content-Type: application/json" \  -d '{    "bank_account_id": "9335a679-63ab-44d5-9de9-e01e0c5a1fff",    "booking_date": "string",    "amount": 0,    "currency": "str"  }'
{  "data": {    "id": "string",    "organization_id": "string",    "bank_account_id": "string",    "transaction_id": "string",    "booking_date": "string",    "amount": 0,    "currency": "string",    "description": "string",    "status": "string",    "raw_data": null,    "created_at": "string",    "updated_at": "string",    "name": "string",    "method": "string",    "category_id": "string",    "base_amount": 0,    "base_currency": "string",    "exclude_from_analytics": true,    "notes": "string",    "is_recurring": true,    "recurrence_period": "string",    "recurring_last_detected_at": "string",    "recurring_series_id": "string",    "bank_account": {      "id": "string",      "name": "string"    },    "category": {      "id": "string",      "name": "string",      "slug": "string",      "color": "string"    },    "enrichment": {      "display_name": "string",      "category_slug": "string",      "references": [        "string"      ]    }  }}
GET
/v1/transactions/{id}

Get a single transaction by ID

Authorization

bearerAuth
AuthorizationBearer <token>

Session JWT or OAuth2 access token

In: header

Path Parameters

id*string

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v1/transactions/string"
{  "data": {    "id": "string",    "organization_id": "string",    "bank_account_id": "string",    "transaction_id": "string",    "booking_date": "string",    "amount": 0,    "currency": "string",    "description": "string",    "status": "string",    "raw_data": null,    "created_at": "string",    "updated_at": "string",    "name": "string",    "method": "string",    "category_id": "string",    "base_amount": 0,    "base_currency": "string",    "exclude_from_analytics": true,    "notes": "string",    "is_recurring": true,    "recurrence_period": "string",    "recurring_last_detected_at": "string",    "recurring_series_id": "string",    "bank_account": {      "id": "string",      "name": "string"    },    "category": {      "id": "string",      "name": "string",      "slug": "string",      "color": "string"    },    "enrichment": {      "display_name": "string",      "category_slug": "string",      "references": [        "string"      ]    }  }}
PATCH
/v1/transactions/{id}

Update transaction fields (category, notes, exclude_from_analytics)

Authorization

bearerAuth
AuthorizationBearer <token>

Session JWT or OAuth2 access token

In: header

Path Parameters

id*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X PATCH "https://example.com/v1/transactions/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "data": {    "id": "string",    "organization_id": "string",    "bank_account_id": "string",    "transaction_id": "string",    "booking_date": "string",    "amount": 0,    "currency": "string",    "description": "string",    "status": "string",    "raw_data": null,    "created_at": "string",    "updated_at": "string",    "name": "string",    "method": "string",    "category_id": "string",    "base_amount": 0,    "base_currency": "string",    "exclude_from_analytics": true,    "notes": "string",    "is_recurring": true,    "recurrence_period": "string",    "recurring_last_detected_at": "string",    "recurring_series_id": "string",    "bank_account": {      "id": "string",      "name": "string"    },    "category": {      "id": "string",      "name": "string",      "slug": "string",      "color": "string"    },    "enrichment": {      "display_name": "string",      "category_slug": "string",      "references": [        "string"      ]    }  }}
DELETE
/v1/transactions/{id}

Delete a transaction by ID

Authorization

bearerAuth
AuthorizationBearer <token>

Session JWT or OAuth2 access token

In: header

Path Parameters

id*string

Response Body

application/json

application/json

curl -X DELETE "https://example.com/v1/transactions/string"
Empty