curl --request GET \
--url https://api.entendre.finance/v1/journal-entries \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/journal-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/journal-entries"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "je_507f1f77bcf86cd799439011",
"organization_id": "org_507f1f77bcf86cd799439011",
"sequence_number": "JE-42",
"status": "draft",
"originated_by": "user",
"accounting_date": "2026-08-31T12:00:00Z",
"posted_at": null,
"memo": "Record August opening balance",
"source_type": "MANUAL",
"sync_date": null,
"last_synced_at": null,
"last_unsynced_at": null,
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"transaction_id": null,
"transaction_sequence_number": null,
"accounting_period_id": null,
"classification": null,
"tag_ids": [],
"reversal_chain": {
"previous_entry_id": null,
"next_entry_id": null
},
"period_auto_reassigned": false,
"intended_accounting_date": null,
"legal_entity_auto_assigned": false,
"lines": [
{
"id": "jel_507f1f77bcf86cd799439011",
"ledger_account_id": "lac_507f1f77bcf86cd799439011",
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"credit_or_debit": "DEBIT",
"amount": "100.00",
"currency": "USD",
"memo": null,
"tag_ids": []
},
{
"id": "jel_507f1f77bcf86cd799439012",
"ledger_account_id": "lac_507f1f77bcf86cd799439012",
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"credit_or_debit": "CREDIT",
"amount": "100.00",
"currency": "USD",
"memo": null,
"tag_ids": []
}
],
"is_sync": false,
"latest_gl_sync_attempt": null,
"created_at": "2026-08-31T12:00:00Z",
"updated_at": "2026-08-31T12:00:00Z"
}
],
"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 journals
Lists journals with their lines and ledger account details.
curl --request GET \
--url https://api.entendre.finance/v1/journal-entries \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/journal-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/journal-entries"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "je_507f1f77bcf86cd799439011",
"organization_id": "org_507f1f77bcf86cd799439011",
"sequence_number": "JE-42",
"status": "draft",
"originated_by": "user",
"accounting_date": "2026-08-31T12:00:00Z",
"posted_at": null,
"memo": "Record August opening balance",
"source_type": "MANUAL",
"sync_date": null,
"last_synced_at": null,
"last_unsynced_at": null,
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"transaction_id": null,
"transaction_sequence_number": null,
"accounting_period_id": null,
"classification": null,
"tag_ids": [],
"reversal_chain": {
"previous_entry_id": null,
"next_entry_id": null
},
"period_auto_reassigned": false,
"intended_accounting_date": null,
"legal_entity_auto_assigned": false,
"lines": [
{
"id": "jel_507f1f77bcf86cd799439011",
"ledger_account_id": "lac_507f1f77bcf86cd799439011",
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"credit_or_debit": "DEBIT",
"amount": "100.00",
"currency": "USD",
"memo": null,
"tag_ids": []
},
{
"id": "jel_507f1f77bcf86cd799439012",
"ledger_account_id": "lac_507f1f77bcf86cd799439012",
"legal_entity_id": "le_507f1f77bcf86cd799439011",
"credit_or_debit": "CREDIT",
"amount": "100.00",
"currency": "USD",
"memo": null,
"tag_ids": []
}
],
"is_sync": false,
"latest_gl_sync_attempt": null,
"created_at": "2026-08-31T12:00:00Z",
"updated_at": "2026-08-31T12:00:00Z"
}
],
"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"
}
}Authorizations
Your organization API key. Some operations also need a key that is associated with a user; their pages say so.
Query Parameters
Comma-separated journal statuses: draft, posted, reversed, in_progress, error or unposted. A reversed journal has status reversed, not posted.
draft, posted, reversed, unposted, in_progress, error Inclusive lower bound on accounting_date. Accepts a date (2026-08-01, meaning midnight UTC) or a full timestamp.
Inclusive accounting-date upper bound. A date includes the whole UTC day; a timestamp includes that exact instant.
Field to sort by. Use created_at for issuance order; sequence numbers are not a sort option.
accounting_date, created_at, updated_at Sort direction. Defaults to desc (newest first).
asc, desc Filter by system, user, or both separated by a comma. Other non-empty values return 400.
^\s*(system|user)\s*(,\s*(system|user)\s*)*$Comma-separated tag_ IDs. Up to 100 IDs.
Latest sync state with the general ledger. pending does not include failed.
synced, pending, failed Filter failed syncs by error type. Sets sync_status=failed; synced or pending return HTTP 400. Repeat the parameter.
Latest sync attempt IDs (jesa_…), up to 100. An older attempt ID returns no journals.
Comma-separated journal source types to include. You cannot send it with exclude_source_types.
Exact journal sequence numbers, such as JE-2096, or their numeric part.
Comma-separated source transaction sequence numbers (such as OT-1234). Returns the entries linked to those transactions.
Comma-separated journal source types to exclude. You cannot send it with source_types.
Return journals updated at or after this time (ISO 8601). Use it to poll for changes.
Inclusive lower bound on last_synced_at. Includes entries later removed from the external GL.
Inclusive upper bound on last_synced_at. Must be on or after synced_start_date.
Filter by general-ledger sync history IDs (sh_…).
^sh_[0-9a-fA-F]{24}$Return entries whose created_at is at or after this ISO-8601 timestamp (inclusive).
Include the total number of matching records. If the count cannot be calculated, the request fails.
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.
Match entries with a line in any of these ledger accounts. The response includes all lines; use matching lines when totaling an account.
Any of these accounting period IDs.
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.
Any of these transaction IDs. No date cutoff applies unless you set a date filter.
100Transaction ID (txn_…).
Filter by one or more template ids. Repeat the parameter or send a comma-separated list. Up to 100 IDs.
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.
x >= 0