Get workflow status
const url = 'https://dev-api.infiniteaudience.ai/v1/workflows/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://dev-api.infiniteaudience.ai/v1/workflows/example \ --header 'Authorization: Bearer <token>'Returns the current status of a similarity or propensity audience workflow run. Poll this endpoint after creating a similarity or propensity audience to track progress. Use wait_for_workflow (MCP) for a blocking poll, or call this endpoint directly for non-blocking status checks.
Requires ‘discovery’ scope.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The workflow run ID returned in the POST /v1/audiences response.
Responses
Section titled “Responses”Workflow status.
object
Running = steps executing normally; paused = waiting for HITL gate response (only when hitl=true); completed = workflow finished, audience is active; failed = workflow encountered an unrecoverable error.
Current step index (1-based).
Total number of steps in the workflow.
Present only when status is paused and hitl=true. Contains gate info for user response.
object
Opaque gate identifier — pass to POST /v1/workflows/{workflow_run_id}/resume.
Human-readable message describing the decision needed.
Valid response values — pick one and pass as response to the resume endpoint.
Examples
Workflow in progress
{ "workflow_run_id": "wf_abc123", "status": "running", "current_step": 2, "step_count": 5, "paused_gate": null}Workflow paused at HITL gate
{ "workflow_run_id": "wf_abc123", "status": "paused", "current_step": 3, "step_count": 5, "paused_gate": { "gate_id": "gate_review_icp", "message": "Review the generated ICP profile and confirm it matches your target audience.", "options": [ "approve", "reject", "refine" ] }}Missing or invalid Bearer token. Obtain one via POST /v1/auth/token. When a token was supplied but rejected, code distinguishes TOKEN_EXPIRED (the token’s lifetime has passed — request a new one via POST /v1/auth/token and retry) from TOKEN_INVALID (malformed or revoked — re-authenticate).
object
Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.
Human-readable explanation of the error.
Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.
Opaque support/debug identifier when available.
Examples
{ "error": "Unauthorized: Missing or invalid Authorization header"}{ "error": "Unauthorized", "code": "TOKEN_EXPIRED", "message": "Your session has expired. Please sign in again."}Token is valid but lacks the required scope for this endpoint. Check the endpoint description for the required scope (discovery, purchase, or account).
object
Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.
Human-readable explanation of the error.
Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.
Opaque support/debug identifier when available.
Examples
{ "error": "SCOPE_REQUIRED", "message": "This endpoint requires the purchase scope."}Resource not found or not accessible to the calling org.
object
Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.
Human-readable explanation of the error.
Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.
Opaque support/debug identifier when available.
Examples
{ "error": "Audience not found"}