Get classification status
curl --request GET \
--url https://api.entendre.finance/v1/classifications/{classification_id} \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/classifications/{classification_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/classifications/{classification_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"id": "cls_507f1f77bcf86cd799439011",
"status": "succeeded",
"status_url": "/v1/classifications/cls_507f1f77bcf86cd799439011",
"total_count": 3,
"processed_count": 3,
"totals": {
"input": 3,
"classified": 3,
"pending_review": 0,
"unclassified": 0,
"auto_posted": 1,
"posting_failed": 1,
"posting_skipped": 1
},
"items": [
{
"transaction_id": "txn_507f1f77bcf86cd799439011",
"status": "classified",
"classification": "EXPENSE",
"category_ledger_account_id": "lac_507f1f77bcf86cd799439011",
"payment_account_id": "lac_507f1f77bcf86cd799439012",
"confidence": 95,
"reason": "Matched the transaction to its expense account.",
"missing_fields": [],
"posting_status": "posted",
"journal_entry_id": "je_507f1f77bcf86cd799439011",
"posting_message": null
},
{
"transaction_id": "txn_507f1f77bcf86cd799439012",
"status": "classified",
"classification": "EXPENSE",
"category_ledger_account_id": "lac_507f1f77bcf86cd799439011",
"payment_account_id": "lac_507f1f77bcf86cd799439012",
"confidence": 95,
"reason": "Matched the transaction to its expense account.",
"missing_fields": [],
"posting_status": "failed",
"journal_entry_id": null,
"posting_message": "Posting failed. Review the transaction before retrying."
},
{
"transaction_id": "txn_507f1f77bcf86cd799439013",
"status": "classified",
"classification": "EXPENSE",
"category_ledger_account_id": "lac_507f1f77bcf86cd799439011",
"payment_account_id": "lac_507f1f77bcf86cd799439012",
"confidence": 95,
"reason": "Matched the transaction to its expense account.",
"missing_fields": [],
"posting_status": "skipped",
"journal_entry_id": null,
"posting_message": "A required posting field is missing."
}
],
"has_more": false,
"next_cursor": null,
"error": null,
"created_at": "2026-08-31T12:00:00Z",
"completed_at": "2026-08-31T12:01:00Z",
"review_url": 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"
}
}Classification
Get classification status
Gets the progress, posting results and review items of a classification job.
GET
/
v1
/
classifications
/
{classification_id}
Get classification status
curl --request GET \
--url https://api.entendre.finance/v1/classifications/{classification_id} \
--header 'X-API-Key: <api-key>'const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.entendre.finance/v1/classifications/{classification_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/classifications/{classification_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"id": "cls_507f1f77bcf86cd799439011",
"status": "succeeded",
"status_url": "/v1/classifications/cls_507f1f77bcf86cd799439011",
"total_count": 3,
"processed_count": 3,
"totals": {
"input": 3,
"classified": 3,
"pending_review": 0,
"unclassified": 0,
"auto_posted": 1,
"posting_failed": 1,
"posting_skipped": 1
},
"items": [
{
"transaction_id": "txn_507f1f77bcf86cd799439011",
"status": "classified",
"classification": "EXPENSE",
"category_ledger_account_id": "lac_507f1f77bcf86cd799439011",
"payment_account_id": "lac_507f1f77bcf86cd799439012",
"confidence": 95,
"reason": "Matched the transaction to its expense account.",
"missing_fields": [],
"posting_status": "posted",
"journal_entry_id": "je_507f1f77bcf86cd799439011",
"posting_message": null
},
{
"transaction_id": "txn_507f1f77bcf86cd799439012",
"status": "classified",
"classification": "EXPENSE",
"category_ledger_account_id": "lac_507f1f77bcf86cd799439011",
"payment_account_id": "lac_507f1f77bcf86cd799439012",
"confidence": 95,
"reason": "Matched the transaction to its expense account.",
"missing_fields": [],
"posting_status": "failed",
"journal_entry_id": null,
"posting_message": "Posting failed. Review the transaction before retrying."
},
{
"transaction_id": "txn_507f1f77bcf86cd799439013",
"status": "classified",
"classification": "EXPENSE",
"category_ledger_account_id": "lac_507f1f77bcf86cd799439011",
"payment_account_id": "lac_507f1f77bcf86cd799439012",
"confidence": 95,
"reason": "Matched the transaction to its expense account.",
"missing_fields": [],
"posting_status": "skipped",
"journal_entry_id": null,
"posting_message": "A required posting field is missing."
}
],
"has_more": false,
"next_cursor": null,
"error": null,
"created_at": "2026-08-31T12:00:00Z",
"completed_at": "2026-08-31T12:01:00Z",
"review_url": 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"
}
}A completed job means that classification is finished, not that every item is posted. Check
totals.posting_failed, totals.posting_skipped and totals.pending_review. The item results give the reasons.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 classification.
Minimum string length:
1Query Parameters
Maximum number of result items to return.
Required range:
1 <= x <= 100Cursor for nested result items, not a different job.
Response
The request succeeded.
Show child attributes
Show child attributes