> For the complete documentation index, see [llms.txt](https://developer.celigo.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.celigo.com/api/api-reference/event-reports.md).

# Event Reports

Event reports capture flow execution event data over a time window and produce a downloadable CSV once generation completes. Use them for compliance auditing, SLA reporting, and bulk error analysis.

The typical lifecycle is: create a report with target flow IDs and a time range, poll until status reaches `completed`, then download the CSV via a time-limited signed URL.

### Event report schema

## The EventReport object

```json
{"openapi":"3.2.0","info":{"title":"Event Reports","version":"1.0.0"},"components":{"schemas":{"EventReport":{"type":"object","required":["_id","type","_flowIds","startTime","status","createdAt"],"description":"An event report captures flow execution event data for a set of flows over\na specified time window. Once generation completes, the report can be\ndownloaded as a CSV via a time-limited signed URL.\n\n**Status lifecycle:** `queued` -> `running` -> `completed` | `canceled`\n\nThe `reportGenerationErrors` array may contain per-flow errors even when the overall status\nis `completed`. The `_requestedByUserId` field only appears on the POST create response;\nGET endpoints return `requestedByUser` (with `name` and `email`) instead.\n","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_requestedByUserId":{"type":"string","format":"objectId","readOnly":true,"description":"The user ID of the person who requested the report."},"type":{"type":"string","description":"The type of event report. Currently only `flow_events` is supported.\n","enum":["flow_events"]},"_flowIds":{"type":"array","description":"Array of flow IDs whose events are included in the report. At least\none flow ID is required.\n","minItems":1,"items":{"type":"string","format":"objectId"}},"startTime":{"type":"string","format":"date-time","description":"Start of the time window for the report. Must be within the last\n30 days. ISO 8601 format.\n"},"endTime":{"type":"string","format":"date-time","description":"End of the time window for the report. Defaults to the current time\nif omitted. The span between `startTime` and `endTime` must not\nexceed 3 days.\n"},"status":{"type":"string","readOnly":true,"description":"Current status of the report generation.","enum":["queued","running","completed","canceled"]},"reportGenerationErrors":{"type":"array","readOnly":true,"description":"Errors encountered during report generation. May contain entries even\nwhen the overall status is `completed` (e.g. a single flow failed\nwhile others succeeded).\n","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error description."}}}},"startedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation began. Present once the report enters `running` status."},"endedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation finished. Only present on `completed` reports."},"requestedByUser":{"type":"object","readOnly":true,"description":"The user who requested the report. Present on GET responses\nbut not on the POST create response (which returns\n`_requestedByUserId` instead).\n","properties":{"name":{"type":"string","description":"Display name of the requesting user."},"email":{"type":"string","format":"email","description":"Email address of the requesting user."}}}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}}}}
```

## List event reports

> Returns all event report objects for the account. No pagination or\
> filtering is supported — query parameters like \`eventReportId\`,\
> \`\_limit\`, and \`status\` are accepted but silently ignored.

```json
{"openapi":"3.2.0","info":{"title":"Event Reports","version":"1.0.0"},"tags":[{"name":"Event Reports","description":"Event reports capture flow execution event data over a time window and\nproduce a downloadable CSV once generation completes. Use them for\ncompliance auditing, SLA reporting, and bulk error analysis.\n\nThe typical lifecycle is: create a report with target flow IDs and a\ntime range, poll until status reaches `completed`, then download the\nCSV via a time-limited signed URL.\n\n## Event report schema\n\n{% openapi-schemas spec=\"eventreport\" schemas=\"EventReport\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"EventReport":{"type":"object","required":["_id","type","_flowIds","startTime","status","createdAt"],"description":"An event report captures flow execution event data for a set of flows over\na specified time window. Once generation completes, the report can be\ndownloaded as a CSV via a time-limited signed URL.\n\n**Status lifecycle:** `queued` -> `running` -> `completed` | `canceled`\n\nThe `reportGenerationErrors` array may contain per-flow errors even when the overall status\nis `completed`. The `_requestedByUserId` field only appears on the POST create response;\nGET endpoints return `requestedByUser` (with `name` and `email`) instead.\n","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_requestedByUserId":{"type":"string","format":"objectId","readOnly":true,"description":"The user ID of the person who requested the report."},"type":{"type":"string","description":"The type of event report. Currently only `flow_events` is supported.\n","enum":["flow_events"]},"_flowIds":{"type":"array","description":"Array of flow IDs whose events are included in the report. At least\none flow ID is required.\n","minItems":1,"items":{"type":"string","format":"objectId"}},"startTime":{"type":"string","format":"date-time","description":"Start of the time window for the report. Must be within the last\n30 days. ISO 8601 format.\n"},"endTime":{"type":"string","format":"date-time","description":"End of the time window for the report. Defaults to the current time\nif omitted. The span between `startTime` and `endTime` must not\nexceed 3 days.\n"},"status":{"type":"string","readOnly":true,"description":"Current status of the report generation.","enum":["queued","running","completed","canceled"]},"reportGenerationErrors":{"type":"array","readOnly":true,"description":"Errors encountered during report generation. May contain entries even\nwhen the overall status is `completed` (e.g. a single flow failed\nwhile others succeeded).\n","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error description."}}}},"startedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation began. Present once the report enters `running` status."},"endedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation finished. Only present on `completed` reports."},"requestedByUser":{"type":"object","readOnly":true,"description":"The user who requested the report. Present on GET responses\nbut not on the POST create response (which returns\n`_requestedByUserId` instead).\n","properties":{"name":{"type":"string","description":"Display name of the requesting user."},"email":{"type":"string","format":"email","description":"Email address of the requesting user."}}}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}}}},"paths":{"/v1/eventreports":{"get":{"operationId":"listEventReports","tags":["Event Reports"],"summary":"List event reports","description":"Returns all event report objects for the account. No pagination or\nfiltering is supported — query parameters like `eventReportId`,\n`_limit`, and `status` are accepted but silently ignored.","responses":{"200":{"description":"Array of event report objects.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventReport"}}}}},"401":{"$ref":"#/components/responses/401-unauthorized"}}}}}}
```

## Create an event report

> Queues generation of a new event report for the specified flows and time window. The report\
> is created in \`queued\` status and transitions through \`running\` to \`completed\` (or \`canceled\`).\
> \
> \`startTime\` must be within the last 30 days and the span to \`endTime\` must not exceed 3 days.\
> If \`endTime\` is omitted, the server defaults it to the current time. Poll\
> \`GET /v1/eventreports/{\_id}\` until \`status\` is \`completed\`, then download the CSV via\
> \`GET /v1/eventreports/{\_id}/signedURL\`. The create response includes \`\_requestedByUserId\`;\
> subsequent GET responses replace this with the \`requestedByUser\` object (name + email).

```json
{"openapi":"3.2.0","info":{"title":"Event Reports","version":"1.0.0"},"tags":[{"name":"Event Reports","description":"Event reports capture flow execution event data over a time window and\nproduce a downloadable CSV once generation completes. Use them for\ncompliance auditing, SLA reporting, and bulk error analysis.\n\nThe typical lifecycle is: create a report with target flow IDs and a\ntime range, poll until status reaches `completed`, then download the\nCSV via a time-limited signed URL.\n\n## Event report schema\n\n{% openapi-schemas spec=\"eventreport\" schemas=\"EventReport\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"EventReportCreateRequest":{"type":"object","description":"Request body for creating a new event report. `startTime` must be within the last 30 days\nand the span to `endTime` must not exceed 3 days. If `endTime` is omitted, the server\ndefaults it to the current time.\n","properties":{"type":{"type":"string","description":"The type of event report to generate. Currently only `flow_events`\nis supported.\n","enum":["flow_events"]},"_flowIds":{"type":"array","description":"Array of flow IDs whose events should be included in the report.\nAt least one flow ID is required.\n","minItems":1,"items":{"type":"string","format":"objectId"}},"startTime":{"type":"string","format":"date-time","description":"Start of the time window. Must be within the last 30 days.\nISO 8601 format.\n"},"endTime":{"type":"string","format":"date-time","description":"End of the time window. Defaults to the current time if omitted.\nThe total span (`endTime - startTime`) must not exceed 3 days.\n"}},"required":["type","startTime","_flowIds"]},"EventReport":{"type":"object","required":["_id","type","_flowIds","startTime","status","createdAt"],"description":"An event report captures flow execution event data for a set of flows over\na specified time window. Once generation completes, the report can be\ndownloaded as a CSV via a time-limited signed URL.\n\n**Status lifecycle:** `queued` -> `running` -> `completed` | `canceled`\n\nThe `reportGenerationErrors` array may contain per-flow errors even when the overall status\nis `completed`. The `_requestedByUserId` field only appears on the POST create response;\nGET endpoints return `requestedByUser` (with `name` and `email`) instead.\n","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_requestedByUserId":{"type":"string","format":"objectId","readOnly":true,"description":"The user ID of the person who requested the report."},"type":{"type":"string","description":"The type of event report. Currently only `flow_events` is supported.\n","enum":["flow_events"]},"_flowIds":{"type":"array","description":"Array of flow IDs whose events are included in the report. At least\none flow ID is required.\n","minItems":1,"items":{"type":"string","format":"objectId"}},"startTime":{"type":"string","format":"date-time","description":"Start of the time window for the report. Must be within the last\n30 days. ISO 8601 format.\n"},"endTime":{"type":"string","format":"date-time","description":"End of the time window for the report. Defaults to the current time\nif omitted. The span between `startTime` and `endTime` must not\nexceed 3 days.\n"},"status":{"type":"string","readOnly":true,"description":"Current status of the report generation.","enum":["queued","running","completed","canceled"]},"reportGenerationErrors":{"type":"array","readOnly":true,"description":"Errors encountered during report generation. May contain entries even\nwhen the overall status is `completed` (e.g. a single flow failed\nwhile others succeeded).\n","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error description."}}}},"startedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation began. Present once the report enters `running` status."},"endedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation finished. Only present on `completed` reports."},"requestedByUser":{"type":"object","readOnly":true,"description":"The user who requested the report. Present on GET responses\nbut not on the POST create response (which returns\n`_requestedByUserId` instead).\n","properties":{"name":{"type":"string","description":"Display name of the requesting user."},"email":{"type":"string","format":"email","description":"Email address of the requesting user."}}}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"422-unprocessable-entity":{"description":"Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/eventreports":{"post":{"operationId":"createEventReport","tags":["Event Reports"],"summary":"Create an event report","description":"Queues generation of a new event report for the specified flows and time window. The report\nis created in `queued` status and transitions through `running` to `completed` (or `canceled`).\n\n`startTime` must be within the last 30 days and the span to `endTime` must not exceed 3 days.\nIf `endTime` is omitted, the server defaults it to the current time. Poll\n`GET /v1/eventreports/{_id}` until `status` is `completed`, then download the CSV via\n`GET /v1/eventreports/{_id}/signedURL`. The create response includes `_requestedByUserId`;\nsubsequent GET responses replace this with the `requestedByUser` object (name + email).","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventReportCreateRequest"}}}},"responses":{"201":{"description":"Event report created and queued for generation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventReport"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"422":{"$ref":"#/components/responses/422-unprocessable-entity"}}}}}}
```

## Get an event report

> Returns a single event report by ID. Check \`status\` for \`completed\` before attempting to\
> download via the signed URL. The \`reportGenerationErrors\` array may contain per-flow errors\
> even when the overall status is \`completed\`.

```json
{"openapi":"3.2.0","info":{"title":"Event Reports","version":"1.0.0"},"tags":[{"name":"Event Reports","description":"Event reports capture flow execution event data over a time window and\nproduce a downloadable CSV once generation completes. Use them for\ncompliance auditing, SLA reporting, and bulk error analysis.\n\nThe typical lifecycle is: create a report with target flow IDs and a\ntime range, poll until status reaches `completed`, then download the\nCSV via a time-limited signed URL.\n\n## Event report schema\n\n{% openapi-schemas spec=\"eventreport\" schemas=\"EventReport\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"EventReport":{"type":"object","required":["_id","type","_flowIds","startTime","status","createdAt"],"description":"An event report captures flow execution event data for a set of flows over\na specified time window. Once generation completes, the report can be\ndownloaded as a CSV via a time-limited signed URL.\n\n**Status lifecycle:** `queued` -> `running` -> `completed` | `canceled`\n\nThe `reportGenerationErrors` array may contain per-flow errors even when the overall status\nis `completed`. The `_requestedByUserId` field only appears on the POST create response;\nGET endpoints return `requestedByUser` (with `name` and `email`) instead.\n","allOf":[{"$ref":"#/components/schemas/ResourceResponse"},{"type":"object","properties":{"_requestedByUserId":{"type":"string","format":"objectId","readOnly":true,"description":"The user ID of the person who requested the report."},"type":{"type":"string","description":"The type of event report. Currently only `flow_events` is supported.\n","enum":["flow_events"]},"_flowIds":{"type":"array","description":"Array of flow IDs whose events are included in the report. At least\none flow ID is required.\n","minItems":1,"items":{"type":"string","format":"objectId"}},"startTime":{"type":"string","format":"date-time","description":"Start of the time window for the report. Must be within the last\n30 days. ISO 8601 format.\n"},"endTime":{"type":"string","format":"date-time","description":"End of the time window for the report. Defaults to the current time\nif omitted. The span between `startTime` and `endTime` must not\nexceed 3 days.\n"},"status":{"type":"string","readOnly":true,"description":"Current status of the report generation.","enum":["queued","running","completed","canceled"]},"reportGenerationErrors":{"type":"array","readOnly":true,"description":"Errors encountered during report generation. May contain entries even\nwhen the overall status is `completed` (e.g. a single flow failed\nwhile others succeeded).\n","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable error description."}}}},"startedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation began. Present once the report enters `running` status."},"endedAt":{"type":"string","format":"date-time","readOnly":true,"description":"When report generation finished. Only present on `completed` reports."},"requestedByUser":{"type":"object","readOnly":true,"description":"The user who requested the report. Present on GET responses\nbut not on the POST create response (which returns\n`_requestedByUserId` instead).\n","properties":{"name":{"type":"string","description":"Display name of the requesting user."},"email":{"type":"string","format":"email","description":"Email address of the requesting user."}}}}}]},"ResourceResponse":{"type":"object","description":"Response","properties":{"_id":{"type":"string","format":"objectId","readOnly":true,"description":"Unique identifier for the resource. Format is a 24-character hexadecimal string."},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was created. Set automatically and cannot be modified."},"lastModified":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the resource was last updated. Changes whenever any property is modified."},"deletedAt":{"type":["string","null"],"format":"date-time","readOnly":true,"description":"Timestamp when the resource was soft-deleted. When null or absent, the resource is active."}},"required":["_id"]},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"400-bad-request":{"description":"Bad request. The server could not understand the request because of malformed syntax or invalid parameters.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/eventreports/{_id}":{"get":{"operationId":"getEventReportById","tags":["Event Reports"],"summary":"Get an event report","description":"Returns a single event report by ID. Check `status` for `completed` before attempting to\ndownload via the signed URL. The `reportGenerationErrors` array may contain per-flow errors\neven when the overall status is `completed`.","parameters":[{"name":"_id","in":"path","required":true,"description":"Event report ID.","schema":{"type":"string","format":"objectId"}}],"responses":{"200":{"description":"The event report record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventReport"}}}},"400":{"$ref":"#/components/responses/400-bad-request"},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Get signed URL for an event report

> Returns a pre-signed S3 URL for downloading the completed event report as a CSV file.\
> The URL is valid for approximately 15 minutes. Only works when the report \`status\` is\
> \`completed\` -- requesting it in any other status returns 400. If the URL has expired,\
> call this endpoint again to get a fresh one.

```json
{"openapi":"3.2.0","info":{"title":"Event Reports","version":"1.0.0"},"tags":[{"name":"Event Reports","description":"Event reports capture flow execution event data over a time window and\nproduce a downloadable CSV once generation completes. Use them for\ncompliance auditing, SLA reporting, and bulk error analysis.\n\nThe typical lifecycle is: create a report with target flow IDs and a\ntime range, poll until status reaches `completed`, then download the\nCSV via a time-limited signed URL.\n\n## Event report schema\n\n{% openapi-schemas spec=\"eventreport\" schemas=\"EventReport\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"EventReportSignedUrlResponse":{"type":"object","description":"Response containing a pre-signed S3 URL for downloading the completed\nevent report CSV. The URL is valid for approximately 15 minutes and\nshould be consumed immediately. Only returned when the report `status`\nis `completed`.\n","properties":{"signedURL":{"type":"string","format":"uri","description":"Pre-signed S3 URL for downloading the report CSV. Valid for\napproximately 15 minutes from generation.\n"}}},"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/v1/eventreports/{_id}/signedURL":{"get":{"operationId":"getEventReportSignedUrl","tags":["Event Reports"],"summary":"Get signed URL for an event report","description":"Returns a pre-signed S3 URL for downloading the completed event report as a CSV file.\nThe URL is valid for approximately 15 minutes. Only works when the report `status` is\n`completed` -- requesting it in any other status returns 400. If the URL has expired,\ncall this endpoint again to get a fresh one.","parameters":[{"name":"_id","in":"path","required":true,"description":"Event report ID.","schema":{"type":"string","format":"objectId"}}],"responses":{"200":{"description":"Signed URL for CSV download.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventReportSignedUrlResponse"}}}},"400":{"description":"The report is not in `completed` status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"}}}}}}
```

## Cancel an event report

> Cancels a queued or running event report. The report's \`status\` transitions to \`canceled\`.\
> No request body is needed. Idempotent for reports already in \`canceled\` status. A \`completed\`\
> report cannot be canceled, and canceled reports cannot be resumed -- create a new one instead.

```json
{"openapi":"3.2.0","info":{"title":"Event Reports","version":"1.0.0"},"tags":[{"name":"Event Reports","description":"Event reports capture flow execution event data over a time window and\nproduce a downloadable CSV once generation completes. Use them for\ncompliance auditing, SLA reporting, and bulk error analysis.\n\nThe typical lifecycle is: create a report with target flow IDs and a\ntime range, poll until status reaches `completed`, then download the\nCSV via a time-limited signed URL.\n\n## Event report schema\n\n{% openapi-schemas spec=\"eventreport\" schemas=\"EventReport\" grouped=\"true\" %}"}],"servers":[{"url":"https://api.integrator.io","description":"Production (US / default region)"},{"url":"https://api.eu.integrator.io","description":"Production (EU region)"},{"url":"https://api.au.integrator.io","description":"Production (AU region)"},{"url":"https://api.ca.integrator.io","description":"Production (CA region)"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"401-unauthorized":{"description":"Unauthorized. The request lacks a valid bearer token, or the provided token\nfailed to authenticate.\n\nNote: the 401 response is produced by the auth middleware **before** the\nrequest reaches the endpoint handler, so it does **not** follow the\nstandard `{errors: [...]}` envelope. Instead the body is a bare\n`{message: string}` object with no `code`, no `errors` array. Callers\nhandling 401s should key off the HTTP status and the `message` string,\nnot try to destructure an `errors[]`.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable description of the auth failure. Known values:\n- `\"Unauthorized\"` — no `Authorization` header on the request.\n- `\"Bearer Authentication Failed\"` — header present but token\n  is invalid, revoked, or expired."}},"required":["message"]}}}},"404-not-found":{"description":"Not found. The requested resource does not exist or is not visible to the caller.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Standard error response envelope returned by integrator.io APIs.","properties":{"errors":{"type":"array","description":"List of errors that occurred while processing the request.","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Machine-readable error code. Usually a string like\n`invalid_ref`, `missing_required_field`, or `unauthorized`;\nmay be an **integer** when the error mirrors an upstream HTTP\nstatus (e.g. `500`) — most commonly returned by connection-ping\nand adaptor-proxy responses."},"message":{"type":"string","description":"Human-readable description of the error."},"field":{"type":"string","description":"Optional pointer to the document field that caused the error.\nUsed by structural validation errors (`missing_required_field`,\n`invalid_ref`) to indicate which field is at fault\n(e.g. `_id`, `type`, `http.baseURI`)."},"source":{"type":"string","description":"Optional origin layer for the error — e.g. `application` when\nthe error came from the remote system the adaptor called,\n`connector` when the adaptor itself rejected the request."}},"required":["message"]}}},"required":["errors"]}}},"paths":{"/v1/eventreports/{_id}/cancel":{"put":{"operationId":"cancelEventReport","tags":["Event Reports"],"summary":"Cancel an event report","description":"Cancels a queued or running event report. The report's `status` transitions to `canceled`.\nNo request body is needed. Idempotent for reports already in `canceled` status. A `completed`\nreport cannot be canceled, and canceled reports cannot be resumed -- create a new one instead.","parameters":[{"name":"_id","in":"path","required":true,"description":"Event report ID to cancel.","schema":{"type":"string","format":"objectId"}}],"responses":{"204":{"description":"Event report canceled successfully."},"401":{"$ref":"#/components/responses/401-unauthorized"},"404":{"$ref":"#/components/responses/404-not-found"},"422":{"description":"The report is in `completed` status and cannot be canceled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developer.celigo.com/api/api-reference/event-reports.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
