curl --request GET \
--url https://api.entendre.finance/v1/transactions \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/transactions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "txn_507f1f77bcf86cd799439011",
"account_id": null,
"organization_id": "org_507f1f77bcf86cd799439011",
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"source_class": "fiat",
"provider": "plaid",
"vendor": null,
"provider_category": null,
"external": {
"timestamp": "2026-08-31T12:00:00Z",
"description": "Customer deposit",
"direction": "credit",
"quantity": null,
"currency": "USD",
"value_fiat": {
"gross": "100.00",
"fee": "0.00",
"net": "100.00",
"currency": "USD"
}
},
"crypto": null,
"bank": {
"bank_name": "Example Bank",
"account_last4": "4242",
"counterparty_name": "Example Customer"
},
"card": null,
"internal": {
"transaction_type": "DEPOSIT",
"status": "pending",
"memo": null,
"journal_entry_id": null
},
"created_at": null,
"updated_at": null,
"tag_ids": [
"tag_507f1f77bcf86cd799439011"
]
}
],
"has_more": false,
"next_cursor": null
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required.",
"request_id": "req_example"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient access to organization",
"request_id": "req_example"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found",
"request_id": "req_example"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 30s.",
"request_id": "req_example"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error",
"request_id": "req_example"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service unavailable.",
"request_id": "req_example"
}
}List transactions
Lists transactions with their resolved vendor names and accounting references.
curl --request GET \
--url https://api.entendre.finance/v1/transactions \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/transactions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "txn_507f1f77bcf86cd799439011",
"account_id": null,
"organization_id": "org_507f1f77bcf86cd799439011",
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"source_class": "fiat",
"provider": "plaid",
"vendor": null,
"provider_category": null,
"external": {
"timestamp": "2026-08-31T12:00:00Z",
"description": "Customer deposit",
"direction": "credit",
"quantity": null,
"currency": "USD",
"value_fiat": {
"gross": "100.00",
"fee": "0.00",
"net": "100.00",
"currency": "USD"
}
},
"crypto": null,
"bank": {
"bank_name": "Example Bank",
"account_last4": "4242",
"counterparty_name": "Example Customer"
},
"card": null,
"internal": {
"transaction_type": "DEPOSIT",
"status": "pending",
"memo": null,
"journal_entry_id": null
},
"created_at": null,
"updated_at": null,
"tag_ids": [
"tag_507f1f77bcf86cd799439011"
]
}
],
"has_more": false,
"next_cursor": null
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required.",
"request_id": "req_example"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient access to organization",
"request_id": "req_example"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found",
"request_id": "req_example"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 30s.",
"request_id": "req_example"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error",
"request_id": "req_example"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service unavailable.",
"request_id": "req_example"
}
}include_spam=true. An ID filter cannot be combined with has_posted_journal_entry, status=posted or status=pending.Authorizations
Your organization API key. Some operations also need a key that is associated with a user; their pages say so.
Query Parameters
Filter by source class.
crypto, fiat, exchange, card, other Filter by transaction status.
pending, posted, spam Filter by whether the transaction has a posted journal entry.
Set to true to include spam transactions. Use status=spam for spam only.
Minimum gross fiat value in the selected currency. No currency conversion is applied.
^[0-9]+(?:\.[0-9]+)?$"100.00"
Maximum gross fiat value in the selected currency. No currency conversion is applied.
^[0-9]+(?:\.[0-9]+)?$"100.00"
Minimum gross asset quantity. For fiat transactions, this is the fiat amount.
^[0-9]+(?:\.[0-9]+)?$"0.5"
Maximum gross asset quantity. For fiat transactions, this is the fiat amount.
^[0-9]+(?:\.[0-9]+)?$"0.5"
Field to sort results by.
transaction_date, created_at, updated_at, gross_amount, net_amount, gross_price, asset_type, chain Sort order. Defaults to descending (newest first).
asc, desc Filter by one or more legal entity IDs. Omit to include all authorized entities. An empty list is invalid.
IDs to return, separated by commas. The other filters also apply. Do not combine with has_posted_journal_entry, status=posted or status=pending.
Exclude these transaction IDs. Can be combined with has_posted_journal_entry=false.
Any of these transaction sequence numbers, such as OT-123. Do not combine with has_posted_journal_entry=false.
10064^OT-\d+$Filter by IDs returned in account_id. Matches a source or its associated wallet, including linked Solana staking accounts.
Any of these economic transaction types. These are separate from accounting classifications.
DEPOSIT, WITHDRAWAL, SWAP, NON_TAXABLE_CONVERSION, BRIDGE, INTERCOMPANY TRANSFER, INTERNAL TRANSFER, FEE, MINTING, STAKING_REWARD, VALIDATOR_REWARD, INVOICE, BILL, CLAIM REWARD, BORROW, REPAYMENT, RESERVES CHANGE, REALIZED_PNL, INCOME, EXPENSE, REFUND, CHARGEBACK, NFT, SPAM, UNKNOWN Filter by one or more source types. Repeat the parameter or send a comma-separated list.
Filter by one or more asset types. Repeat the parameter or send a comma-separated list.
Filter by one or more chains. Repeat the parameter or send a comma-separated list.
On-chain addresses, up to 100. Matches the from or to address, without case sensitivity. A transaction matches when it touches an address or belongs to a source in financial_account_ids or source_id. Repeat the parameter or send a comma-separated list.
100Raw category from Ramp or Plaid, matched as a substring without case sensitivity. Values in the array match any; labels joined with ; in one value must all match.
Include the total number of matching records. If the count cannot be calculated, the request fails.
Return total_count with an empty data array and no next page. Takes precedence over include_count.
Maximum number of records to return.
1 <= x <= 100The next_cursor value from the previous page. Keep the other filters unchanged.
Case-insensitive search in labels and descriptions.
Source ID (src_…).
"src_507f1f77bcf86cd799439011"
Direction of the movement relative to the source.
debit, credit Inclusive event timestamp lower bound.
"2026-08-31T12:00:00Z"
Inclusive upper bound for the event timestamp.
"2026-08-31T12:00:00Z"
Inclusive lower bound for the last update time. When you sync changes, deduplicate by id and updated_at.
"2026-08-31T12:00:00Z"
Response
The matching records.
The records.
Show child attributes
Show child attributes
Whether another page is available.
Cursor for the next page, or null on the last page.
Total matching records across all pages. Present when include_count=true or count_only=true.
x >= 0