Endpoint reference
Every endpoint, its parameters and its response fields, generated directly from the API schema so it always matches the current version.
OpenAPI specification
This reference is generated from our machine-readable OpenAPI 3 schema, which you can use directly in your own tools: Postman and Insomnia import it via Import → link, and it works with Swagger UI and any OpenAPI code generator.
Base URL: https://api.endute.com/v1. Every path below is relative to it, and every request carries your API key in the Authorization header. Paths are exact and have no trailing slash.
Accounts
/v1/accountsList the bank accounts the key's user has connected.
Response Account[]
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | string (uuid) | no | - |
| institution | string | no | - |
| name | string | no | The account display name: the name set in the portal when one is set, otherwise the name the bank reports. |
| masked_identifier | string | yes | Last 4 of the IBAN, else last 4 of the BBAN, else null. |
| account_type | string | yes | The account type: current, savings, credit_card, cash, loan or investment. Derived from what the bank reports and correctable in the portal (some banks omit type metadata entirely). For credit_card accounts the balance endpoint serves the amount OWED (negative), not the available credit — if a card's balance looks like remaining credit, its type needs correcting in the portal. Nullable. |
| currency | string | no | - |
| status | string | no | Account status as reported by the bank (e.g. enabled). |
| sandbox | boolean | no | - |
| last_synced_at | string (date-time) | no | When transaction DATA was last received for this account. Honest caveat: this is the last successful data delivery, not the last poll attempt -- a quiet account with no new transactions keeps an older stamp. |
| oldest_booking_date | string (date) | no | Booking date of the earliest transaction served for this account: the stored feed spans this date to now and only ever grows (history is never trimmed or expired). Use it with the transactions from/to filters to pull the window you want. Null until the first transaction lands. |
| consent_renewal_due | string (date-time) | no | When bank access for this account's connection next needs renewing (UTC). For UK connections this is a periodic confirmation checkpoint (renewed in the portal without a bank sign-in); for EU connections it is the consent end date and renewal is a full reconnect with a bank sign-in. After this passes without renewal, the feed stops receiving new data until the connection is renewed. Null for connections whose access does not time-expire (e.g. US and Canadian connections) and for the sandbox. |
| available_history_days | integer | no | The approximate number of days of transaction history this bank serves when an account is FIRST linked (90 for most banks; some card providers serve less, some banks more). The stored feed only ever grows from that starting window, so oldest_booking_date-to-now can exceed this figure over time. |
/v1/accounts/{id}Retrieve a single connected bank account by its id.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string (uuid) | yes | - |
Response Account
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | string (uuid) | no | - |
| institution | string | no | - |
| name | string | no | The account display name: the name set in the portal when one is set, otherwise the name the bank reports. |
| masked_identifier | string | yes | Last 4 of the IBAN, else last 4 of the BBAN, else null. |
| account_type | string | yes | The account type: current, savings, credit_card, cash, loan or investment. Derived from what the bank reports and correctable in the portal (some banks omit type metadata entirely). For credit_card accounts the balance endpoint serves the amount OWED (negative), not the available credit — if a card's balance looks like remaining credit, its type needs correcting in the portal. Nullable. |
| currency | string | no | - |
| status | string | no | Account status as reported by the bank (e.g. enabled). |
| sandbox | boolean | no | - |
| last_synced_at | string (date-time) | no | When transaction DATA was last received for this account. Honest caveat: this is the last successful data delivery, not the last poll attempt -- a quiet account with no new transactions keeps an older stamp. |
| oldest_booking_date | string (date) | no | Booking date of the earliest transaction served for this account: the stored feed spans this date to now and only ever grows (history is never trimmed or expired). Use it with the transactions from/to filters to pull the window you want. Null until the first transaction lands. |
| consent_renewal_due | string (date-time) | no | When bank access for this account's connection next needs renewing (UTC). For UK connections this is a periodic confirmation checkpoint (renewed in the portal without a bank sign-in); for EU connections it is the consent end date and renewal is a full reconnect with a bank sign-in. After this passes without renewal, the feed stops receiving new data until the connection is renewed. Null for connections whose access does not time-expire (e.g. US and Canadian connections) and for the sandbox. |
| available_history_days | integer | no | The approximate number of days of transaction history this bank serves when an account is FIRST linked (90 for most banks; some card providers serve less, some banks more). The stored feed only ever grows from that starting window, so oldest_booking_date-to-now can exceed this figure over time. |
/v1/accounts/{id}/balancesGet the current balances for one bank account, each stamped with when it was last fetched.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string (uuid) | yes | - |
Response Balance
| Field | Type | Nullable | Description |
|---|---|---|---|
| account_id | string (uuid) | no | - |
| balance | string (decimal) | no | Decimal string, 4 decimal places as stored. |
| currency | string | no | - |
| fetched_at | string (date-time) | no | - |
Transactions
/v1/accounts/{account_id}/transactionsList an account's transactions, newest first, with cursor pagination.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| account_id | path | string (uuid) | yes | - |
| cursor | query | string | no | Opaque pagination cursor from the previous response's "next" URL. Newest first; treat transaction ids as the idempotency key when walking the feed. |
| from | query | string (date) | no | Only transactions with booking_date on or after this date. Strictly YYYY-MM-DD. |
| to | query | string (date) | no | Only transactions with booking_date on or before this date. Strictly YYYY-MM-DD. |
Response PaginatedTransactionList (results: Transaction[])
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | string (uuid) | no | - |
| booking_date | string (date) | no | - |
| value_date | string (date) | no | - |
| amount | string (decimal) | no | Signed, as the bank reported: negative = outflow. |
| currency | string | no | - |
| description | string | no | - |
| counterparty | string | yes | - |
| enrichment | TransactionEnrichment | no | - |
| sandbox | boolean | no | - |
| upstream_transaction_id | string | yes | The transaction id assigned by the BANK itself, when it assigns one -- stable at the bank across fetches, so use it for reconciliation against statements or other tools. Distinct from id (our stable identifier). Nullable. |
| merchant_category_code | string | yes | Four-digit card Merchant Category Code, where the bank supplies it (mostly card issuers). Nullable. |
| bank_transaction_code | string | yes | ISO 20022 bank transaction code (domain-family-subfamily, e.g. PMNT-CCRD-POSD), where the bank supplies it. Nullable. |
| proprietary_bank_transaction_code | string | yes | The bank's own transaction-type code, verbatim (vocabulary varies per bank). The most widely supplied of the code fields. Nullable. |
| end_to_end_id | string | yes | PSD2 end-to-end payment identifier, where the bank supplies it. Nullable. |
| mandate_id | string | yes | Direct Debit mandate identifier, where the bank supplies it. Useful for grouping recurring payments. Nullable. |
| entry_reference | string | yes | The bank's ledger entry reference, where the bank supplies it. Nullable. |
Connections
/v1/connectionsList the user's bank connections and their status.
Response Connection[]
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | string (uuid) | no | - |
| institution | string | no | - |
| status | string | no | - |
| expires_at | string (date-time) | no | When the underlying bank consent expires; null for connections without consent expiry (e.g. sandbox). |
| sandbox | boolean | no | - |
/v1/connections/{id}Retrieve a single bank connection by its id.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string (uuid) | yes | - |
Response Connection
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | string (uuid) | no | - |
| institution | string | no | - |
| status | string | no | - |
| expires_at | string (date-time) | no | When the underlying bank consent expires; null for connections without consent expiry (e.g. sandbox). |
| sandbox | boolean | no | - |
Export
/v1/exportResponse none
See the schema for the full response body.
Investments
/v1/investment-accountsList the user's connected investment accounts.
Response InvestmentAccount[]
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | integer | no | - |
| name | string | no | - |
| number | string | yes | Masked/partial account number as the provider supplied it (provider_metadata); null when unavailable. |
| currency | string | yes | - |
| connection_id | integer | no | - |
| sandbox | boolean | no | - |
| last_holdings_sync_at | string (date-time) | no | When holdings were last successfully synced for this account; null until the first sync. |
/v1/investment-accounts/{account_id}/activitiesList an investment account's activity (trades and cash events), newest first.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| account_id | path | integer | yes | - |
| from | query | string (date) | no | Only activities with trade_date on or after this date. Strictly YYYY-MM-DD. Cash-only rows (null trade_date) are excluded when this filter is set. |
| to | query | string (date) | no | Only activities with trade_date on or before this date. Strictly YYYY-MM-DD. Cash-only rows (null trade_date) are excluded when this filter is set. |
Response InvestmentActivities (results: InvestmentActivity[])
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | integer | no | - |
| type | string | no | Provider activity type (e.g. BUY, SELL, DIVIDEND). |
| symbol | string | no | Provider ticker; "" for cash-only rows. |
| units | string (decimal) | no | Quantity, Decimal string; null for cash-only rows. |
| price | string (decimal) | no | Per-unit price, Decimal string; null for cash-only rows. |
| amount | string (decimal) | no | Total cash amount, Decimal string; signed as the provider reported. |
| currency | string | no | - |
| trade_date | string (date) | no | Trade/settlement date; null for cash-only rows. |
| sandbox | boolean | no | - |
/v1/investment-accounts/{account_id}/positionsGet the latest holdings for one investment account, with the snapshot date.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| account_id | path | integer | yes | - |
Response InvestmentPositions
| Field | Type | Nullable | Description |
|---|---|---|---|
| as_of | string (date-time) | no | Provider data timestamp the snapshot reflects; null when no snapshot exists yet. |
| positions | InvestmentPosition[] | no | - |
/v1/investment-connectionsList the user's investment connections and their status.
Response InvestmentConnection[]
| Field | Type | Nullable | Description |
|---|---|---|---|
| id | integer | no | - |
| broker | string | no | The user-facing brokerage name (e.g. "Interactive Brokers"). Never an aggregation provider identity. |
| status | string | no | - |
| sandbox | boolean | no | - |
| last_synced_at | string (date-time) | no | When the most recent successful sync completed; null until the first sync. |
