Choosing a Mode
| Synchronous | Asynchronous | |
|---|---|---|
| Endpoint | POST /v1/enrich | POST /v1/enrich/async |
| Max items | 10 | 500 |
| Response | Results in the response body | 202 Accepted + job_id |
| Best for | Real-time UIs, webhooks, small batches | Bulk imports, nightly jobs, Plaid syncs |
- Synchronous
- Asynchronous
The synchronous endpoint is the simplest way to enrich transactions. You POST up to 10 strings, and the API waits until every item is resolved before returning — no polling required.How it works:Best for:Example response:
- Each input is checked against the pre-warmed canonical cache first.
- Cache hit: Result is returned in under 50 ms at zero AI cost.
- Cache miss: The item is forwarded to the AI inference engine. The endpoint waits up to 10 seconds for a response before returning.
- The final response is a single JSON object containing all resolved results.
The synchronous endpoint is capped at 10 items. For larger batches, use the async endpoint.
- Real-time transaction enrichment as users connect their accounts
- Small ad-hoc batches in webhook processors
- Exploratory testing and development
Partial Batch Failures
Regardless of which mode you use, individual items within a batch can fail without failing the whole request. A batch with one or more failed items still returns HTTP200, but the envelope status field will be "partial" instead of "complete". See the Error Handling guide for details on how to handle per-item rejected and retry statuses.