Update transaction
curl --request PATCH \
--url https://api.entendre.finance/v1/transactions/{transaction_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '{}'const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.entendre.finance/v1/transactions/{transaction_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/transactions/{transaction_id}"
payload = {}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, 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"
]
}
}{
"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": "CONFLICT",
"message": "The resource state does not allow this operation.",
"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"
}
}Transactions
Update transaction
Updates transaction details, or marks or unmarks a transaction as spam.
PATCH
/
v1
/
transactions
/
{transaction_id}
Update transaction
curl --request PATCH \
--url https://api.entendre.finance/v1/transactions/{transaction_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '{}'const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.entendre.finance/v1/transactions/{transaction_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/transactions/{transaction_id}"
payload = {}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, 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"
]
}
}{
"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": "CONFLICT",
"message": "The resource state does not allow this operation.",
"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"
}
}Omitted fields keep their current values. Accounting-state and accounting-period restrictions apply.
To change the spam state, send only
{ "spam": true } or { "spam": false }. A spam change runs the same steps as in the Entendre app: posted-journal checks, asset cleanup and cost-basis reconciliation. A reconciliation error does not undo the spam change.
This operation does not change tags.Authorizations
Your organization API key. Some operations also need a key that is associated with a user; their pages say so.
Path Parameters
ID of the transaction.
Minimum string length:
1Body
application/json
- Option 1
- Option 2
Economic transaction type. This does not classify accounting or create a journal entry. Case-insensitive on input. Pass null to clear.
Available options:
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 Older name for transaction_type. Case-insensitive on input. Pass null to clear.
Available options:
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 Older name for transaction_type. Send only one type field. Case-insensitive on input. Pass null to clear.
Available options:
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 Free-text memo. Pass null to clear.