Logs

List Workflow Run Logs

GET/v2/workflows/logs
cURL
curl --request GET \
  --url https://qstash-{region}.upstash.io/v2/workflows/logs \
  --header 'Authorization: Bearer <token>'
200Response
{
  "cursor": "<string>",
  "runs": [
    {
      "workflowRunId": "<string>",
      "workflowUrl": "<string>",
      "workflowState": "<string>",
      "workflowRunCreatedAt": 123,
      "workflowRunCompletedAt": 123,
      "workflowRunCallerIp": "<string>",
      "steps": [
        {}
      ],
      "workflowRunResponse": "<string>",
      "invoker": {
        "workflowRunId": "<string>",
        "workflowUrl": "<string>",
        "workflowRunCreatedAt": 123
      },
      "failureFunction": {
        "messageId": "<string>",
        "url": "<string>",
        "state": "<string>",
        "dlqId": "<string>",
        "failHeaders": "<string>",
        "failStatus": 123,
        "failResponse": "<string>",
        "responseBody": "<string>",
        "responseHeaders": "<string>",
        "responseStatus": 123,
        "maxRetries": 123
      },
      "dlqId": "<string>",
      "label": "<string>",
      "labels": [
        "<string>"
      ],
      "flowControlKey": "<string>"
    }
  ]
}

Authorization

Authorizationheaderstringrequired

Bearer authentication header of the form Bearer <token>.

Query parameters

cursorquerystring

Pagination cursor for fetching the next page of results.

workflowUrlquerystring

Filter by workflow URL (exact match). Must start with http:// or https://.

workflowRunIdquerystring

Filter by specific workflow run ID..

workflowCreatedAtqueryinteger

Filter by workflow creation timestamp in milliseconds (Unix timestamp).

workflowRunsquerystring

Filter by multiple workflow runs. Provide a comma-separated list of workflowRunId@workflowCreatedAt pairs to query specific runs in a single request.

Example: workflowRuns=ID1@TS1,ID2@TS2

When this parameter is provided, all other filters are ignored.

statequerystring

Filter by workflow or step state. Common states include:

ValueDescription
RUN_STARTEDThe workflow has started to run and currently in progress.
RUN_SUCCESSThe workflow run has completed succesfully.
RUN_FAILEDSome errors has occured and workflow failed after all retries.
RUN_CANCELEDThe workflow run has canceled upon user request.
STEP_SUCCESSThe step succesfully fnished.
STEP_RETRYThe step is being retried.
STEP_FAILEDThe step is failed.
STEP_PROGRESSThe step is in progress.
STEP_CANCELEDThe step is cancelled manually.
fromDatequeryinteger

Filter events from this date onwards in milliseconds (Unix timestamp). Inclusive.

toDatequeryinteger

Filter events up to this date in milliseconds (Unix timestamp). Inclusive.

countqueryintegerdefault: 1000

Maximum number of results to return per page.

  • Event mode: Max 1000 (default 1000)
  • Run mode (groupBy=workflowRunId): Max 10 (default 10)
trimBodyqueryintegerdefault: -1

Trim request/response bodies to this many bytes. Use -1 to exclude bodies entirely. Useful for reducing response size when bodies are large.

labelquerystring[]

Filter workflow run by label. Supports multi-value filtering. You can pass multiple values to match workflow runs with any of the given labels (OR logic).

Examples:

  • label=my_label
  • label=label_1&label=label_2
flowControlKeyquerystring

Filter workflow run by the flow control key assigned by the user on trigger.

callerIpquerystring

Filter workflow run by the callerIp that started to workflow run.

Response

200 — Workflow logs retrieved successfully

cursorstring

Pagination cursor for the next page. Empty if no more results.

runsobject[]

Array of complete workflow runs with all steps and metadata.

400 — Bad Request - Invalid parameters (e.g., invalid cursor, state, or groupBy value)

errorstringrequired

Error message

401 — Unauthorized

errorstringrequired

Error message

429 — Too Many Requests - Rate limit exceeded

errorstringrequired

Error message

500 — Internal Server Error

errorstringrequired

Error message

Loading search…