/v1/enrich/async endpoint is designed for large-scale enrichment workloads — bank statement imports, nightly reconciliation pipelines, or any batch that exceeds the 10-item synchronous limit. You submit up to 500 raw transaction strings and the API returns a job_id immediately with HTTP 202 Accepted, without waiting for enrichment to complete. Processing runs in the background; you poll GET /v1/enrich/jobs/:id at your own pace to retrieve results when they’re ready.
Request Parameters
An array of raw transaction description strings to enrich. Each string should be the unmodified text from a bank statement or card feed (e.g.
"UBER EATS"). Maximum 500 items per request.Response Schema
A successful submission returns202 Accepted. Enrichment has not started yet — the job is queued for background processing.
An empty array
[] on initial submission. Results are populated once you poll the job and it reaches complete status.A UUID string identifying your async job (e.g.
"84c8a82d-1234-5678-abcd-ef0123456789"). Use this value to poll GET /v1/enrich/jobs/:id for status and results.The initial job status, always
"queued" on a successful submission. Possible values over the job lifecycle are queued, processing, complete, and failed.Retrieving Results
After receiving yourjob_id, you must poll GET /v1/enrich/jobs/:id to check progress and retrieve enriched results. The job will transition through the following states:
| Status | Meaning |
|---|---|
queued | Job is accepted and waiting to be picked up by the processing queue. |
processing | Enrichment is actively running against your batch. |
complete | All items have been processed. The results array is fully populated. |
failed | A fatal error occurred during processing. Contact support with your job_id. |
The ParseTx SDKs expose a
pollJob() (TypeScript) / poll_job() (Python) helper that handles polling automatically with exponential backoff. Using the SDK is strongly recommended over implementing manual polling loops. See the Node.js SDK or Python SDK for details.Error Responses
| HTTP Status | Condition | Response Body |
|---|---|---|
400 Bad Request | Malformed JSON, missing transactions field, or array exceeds 500 items | {"error": "Bad Request — ..."} |
401 Unauthorized | X-API-Key header is missing or empty | {"error": "Missing API key. Provide your key via the X-API-Key header."} |
401 Unauthorized | Key does not match an active key in the database | {"error": "Invalid or revoked API key."} |
429 Too Many Requests | Monthly transaction quota exceeded | {"error": "Monthly quota exceeded.", "usage": 49990, "limit": 50000, "plan": "pay_as_you_go"} |
429 Too Many Requests | Daily AI token budget exceeded | {"error": "Daily token budget exceeded. Your quota resets at midnight UTC.", "token_usage": 999900, "token_limit": 1000000, "plan": "pay_as_you_go"} |
500 Internal Server Error | Unexpected server-side failure | {"error": "Internal Server Error"} |