One run's status, per-node outcomes and failure summary
/v1/apps/{app}/runs/{runId}One run with its per-node outcomes and, when it failed, which node failed and why. Requires the workspace:read scope: watching an integration and being able to trigger one are separate authorities. A run whose target is draft is a preview of unpublished work and is visible only to a credential that also holds pipeline:run_draft; without that scope it answers the same 404 not_found an unknown identifier does. Every node is created pending, so a poll taken while the run is executing reports that for most of the array; the run is finished when status is no longer running. Next, on success: createExport for the output you need.
Authorization
bearerAuth Obtain a token from https://id.ovidens.com/oauth/token using the client_credentials grant.
In: header
Path Parameters
The app's stable technicalId, as reported by listApps. It is a snake_case identifier, never a numeric id, and it survives a rename of the app.
1 <= length <= 64The run identifier startRun returned, or one reported by listRuns.
1 <= value <= 2147483647curl -X GET "https://example.com/v1/apps/string/runs/1"{ "run": { "runId": 4821, "status": "success", "target": "published", "startedAt": "2026-08-01T02:05:00.000Z", "finishedAt": "2026-08-01T02:06:12.000Z", "durationMs": 72000, "dataAvailable": true, "triggeredBy": { "clientId": "ovc_7f3a9c1d2e4b6a8c0d5e7f91", "name": "ERP nightly import" }, "nodes": [ { "technicalId": "customers", "nodeType": "dataset", "status": "success", "rowCount": 18420, "error": null }, { "technicalId": "revenue_by_region", "nodeType": "sql", "status": "success", "rowCount": 34, "error": null } ], "error": null }}Response Body
application/json
application/json
application/json
application/json
application/json
application/json