Read event-ingest lifecycle status by trigger and batch ID
Check whether a batch of events you sent to a data workflow has been received, run, skipped or failed.
- Method
- GET
- Path
https://api.returning.ai / v1/ data-workflows/ event-ingests/ status - Permission
- dataWorkflows
- Retries
- Read-only; poll with backoff until the status is final
When to use this
- After you send a batch of trading events to a data workflow, confirm it was received and processed.
- A send timed out, and you need to know whether the batch arrived before you send it again.
- A batch didn't have the effect you expected, and you want the stored failure or skip reason.
Authentication#
- Header
Authorization: Bearer <API_KEY>- Permission
- dataWorkflowsShown in the dashboard as “Data Workflows”
This endpoint needs dataWorkflows, shown in the dashboard as Data Workflows. Use a Community API key and keep it on your server. The key decides the community, so you only see batches sent to your own community's workflows.
Behaviour#
You send a batch of events to a data workflow with a trigger_id and a metadata.batch_id. This endpoint reads where that batch is now. It never sends or runs anything, and it returns counts and a reason, not the rows.
What each status means:
pending,queued,processing: the batch is saved and waiting for, or in, its workflow run. Ask again later.processed: the workflow ran with the batch. This doesn't prove every step in the workflow succeeded; check the workflow's task history in the dashboard when the result matters.skipped: the batch was a repeat. When your trigger has a Batch ID Path set, sending abatch_idagain skips the whole batch;error.messagegives the reason, such asDuplicate batch_id received: <batch_id>.orphaned: the workflow wasn't deployed when the batch came up to run, so it never ran.failed: the run failed.error.messageholds the reason.
After a repeated batch_id is skipped, this endpoint returns the latest delivery, so you see skipped, with accepted_record_count at 0 and skipped_record_count counting the rows you sent again, even though the first delivery may have been processed. Keep a record of the first result before you retry, and use a new batch_id for a corrected batch.
Request#
Query parameters#
trigger_id you sent the batch to.Rule24 hex characters
Eg"66f000000000000000000603"
metadata.batch_id. Matched exactly, including capitals.RuleNon-empty string
Eg"deposits-2026-09-27-001"
Headers#
dataWorkflows.RuleBearer <API_KEY>
curl --request GET \
--url 'https://api.returning.ai/v1/data-workflows/event-ingests/status?trigger_id=66f000000000000000000603&batch_id=deposits-2026-09-27-001' \
--header 'Authorization: Bearer <API_KEY>'
Response#
A 200 returns the batch's state in data. Branch on data.status, never on message. Missing counts come back as 0 and missing times as null.
Rulesuccess
trigger_id you asked about.batch_id you asked about.processed, skipped, orphaned and failed are final; see Behaviour.Rulepending, queued, processing, processed, skipped, orphaned, failed
null when not recorded.null until the batch is processed.data that were accepted for the workflow. 0 when not recorded.data that were skipped, such as repeats of a record already received. For a repeated batch_id, every row you sent again. 0 when not recorded.null when there is none.INGEST_FAILED for a failed or orphaned batch, otherwise INGEST_SKIPPED.RuleINGEST_FAILED or INGEST_SKIPPED
Duplicate batch_id received: deposits-2026-09-27-001. Do not branch on it.{
"status": "success",
"message": "Event ingest status fetched successfully",
"data": {
"trigger_id": "66f000000000000000000603",
"batch_id": "deposits-2026-09-27-001",
"status": "processed",
"received_at": "2026-09-27T01:28:35.000Z",
"processed_at": "2026-09-27T01:33:42.000Z",
"accepted_record_count": 2,
"skipped_record_count": 0,
"error": null
}
}
Errors#
The 400, 404 EVENT_INGEST_NOT_FOUND and 500 EVENT_INGEST_STATUS_LOOKUP_FAILED errors carry the code in code. Errors from the API key check carry it in meta.code, except a key without dataWorkflows, which returns 401 with only a message.
Fix the request04
{"message": "Your api key does not have permission to access this action"} with no code: the key lacks dataWorkflows, or it's a personal key. Use a Community API key and add Data Workflows in Settings > Integration > API Keys.INVALID_TRIGGER_IDFix the requesttrigger_id is missing, sent twice, or isn't 24 hex characters. Send the workflow's Production Trigger ID once.MISSING_BATCH_IDFix the requestbatch_id is missing, blank or sent twice. Send the metadata.batch_id of the batch you're checking.AUTHENTICATION_REQUIREDFix the requestAuthorization: Bearer <API_KEY> with a current Community API key.Fix the data02
EVENT_INGEST_NOT_FOUNDFix the datatrigger_id and batch_id. Check both values. A batch you sent a moment ago may not be saved yet, so wait a few seconds and ask again before you send it again.COMMUNITY_NOT_FOUNDFix the dataRetry with backoff02
EVENT_INGEST_STATUS_LOOKUP_FAILEDRetry with backoffAUTHENTICATION_FAILEDRetry with backoffRetries
This endpoint only reads, so retrying is safe and never sends the batch again. Poll with backoff, for example every few seconds and then less often, until data.status is processed, skipped, orphaned or failed. Over the rate limit, requests return 429; wait for the window to reset, then retry.
{
"meta": {
"status": "error",
"statusCode": 401,
"code": "AUTHENTICATION_REQUIRED"
},
"message": "API request rejected error.",
"detail": "A valid bearer token or API key is required for this endpoint.",
"solution": "Read error detail and try again."
}