Subscriptions
This page covers the HTTP endpoints you can use to inspect subscription delivery runs, inspect attempt history, read repo-scoped action notifications, and post callback status updates from your webhook handler.
To create, update, pause, or remove subscriptions, use the CLI and MCP workflows or the SDK client.subscription surface. Subscription management REST endpoints under /api/repos/:orgName/:repoName/subs are not currently available.
GET /api/repos/:orgName/:repoName/actions/runs
Section titled “GET /api/repos/:orgName/:repoName/actions/runs”List action runs for a repository, optionally filtered by status.
Auth: Required — repo:configure scope. Anonymous callers, under-scoped tokens, and missing repositories all return an opaque 404 so existence is not disclosed; authenticate with repo:configure to see real responses.
Query Parameters
Section titled “Query Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
subscriptionName | string | No | Filter by subscription name |
status | string | No | Filter by status |
since | integer | No | Runs created after this epoch-milliseconds timestamp |
limit | integer | No | Maximum runs to return. Capped at 200 — values above 200 are rejected with a validation error. |
Response 200
Section titled “Response 200”[ { "subscriptionName": "signal-hook", "runId": "019d90f0-1111-7000-8000-000000000001", "status": "succeeded", "matchedOperationIndexes": [0, 1], "attemptCount": 1, "maxAttempts": 5, "createdAt": 1741132800000, "updatedAt": 1741132801000 }]Failed runs also include lastErrorCode and lastErrorMessage fields.
Example
Section titled “Example”curl -H "Authorization: Bearer $WH_TOKEN" \ "https://api.warmhub.ai/api/repos/myorg/myrepo/actions/runs?status=failed_terminal"GET /api/repos/:orgName/:repoName/actions/runs/:runId/attempts
Section titled “GET /api/repos/:orgName/:repoName/actions/runs/:runId/attempts”Get the attempt history for a specific action run.
Auth: Required — repo:configure scope. Anonymous callers receive 401, under-scoped tokens receive 403, and missing runs receive 404.
Path Parameters
Section titled “Path Parameters”| Parameter | Type | Description |
|---|---|---|
runId | string | Action run identifier |
Example
Section titled “Example”curl -H "Authorization: Bearer $WH_TOKEN" \ "https://api.warmhub.ai/api/repos/myorg/myrepo/actions/runs/019d90f0-1111-7000-8000-000000000001/attempts"GET /api/repos/:orgName/:repoName/actions/notifications
Section titled “GET /api/repos/:orgName/:repoName/actions/notifications”List repo-scoped action notification records.
Auth: Required — repo:configure scope. Anonymous callers receive 401, under-scoped tokens receive 403, and missing repositories receive 404.
Query Parameters
Section titled “Query Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
since | integer | No | Notifications after this epoch-milliseconds timestamp |
limit | integer | No | Maximum notifications to return. Capped at 200 — values above 200 are rejected with a validation error. |
Example
Section titled “Example”curl -H "Authorization: Bearer $WH_TOKEN" \ "https://api.warmhub.ai/api/repos/myorg/myrepo/actions/notifications?limit=20"POST /api/action-runs/:runId/callback
Section titled “POST /api/action-runs/:runId/callback”Report progress or completion for an asynchronous action run. This endpoint is not repo-prefixed.
In practice, runId comes from the original webhook payload, and most handlers can use the provided callback_url directly instead of constructing the path themselves. See Webhook Payload.
Auth: Required, with write access to the run’s repository.
Body Fields
Section titled “Body Fields”| Field | Type | Required | Description |
|---|---|---|---|
status | string | Yes | One of processing, success, failure, or retry_requested |
message | string | No | Optional status detail or response snippet |
error | string | No | Optional human-readable error message |
Callback statuses are input commands: processing maps to stored run status processing, success maps to succeeded, failure maps to failed_terminal, and retry_requested maps to retry_wait.
Example
Section titled “Example”curl -X POST "https://api.warmhub.ai/api/action-runs/${RUN_ID}/callback" \ -H "Authorization: Bearer ${WH_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "status": "failure", "error": "Unexpected field '\''category'\'' on line 5." }'Hit a problem or have a question? Get in touch.