For AI agents: this page is also available as Markdown at https://docs.refabric.com/api-reference/platform/webhooks/events.md, and the index of every page is https://docs.refabric.com/llms.txt.

Platform API › Webhooks

Event reference

job.started

A job left the queue and started (opt-in; once per job).

  • stringrequired

    The event's id — the same on every retry of one delivery. Deduplicate on it: a delivery may arrive more than once.

    Example: 5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90

  • stringrequired

    When it happened, ISO-8601 in UTC.

    Example: 2026-10-05T09:30:12Z

  • stringrequired

    Which event this is.

    Values

    • job.started

    Example: job.started

  • stringrequired

    The API version the body is written in (Refabric-Version).

    Example: 2026-09-29

  • stringrequired

    The job the event is about.

    Example: 9b2f4c1d0e8a

  • stringrequired

    The task the job runs.

    Example: image.expand

  • stringrequired

    Where the job is.

    Values

    • queued — Accepted and waiting to start.
    • running — Being made.
    • terminal — Ended. outcome says how.

    Example: running

  • stringrequirednullable

    How the job ended — null until its lifecycle is terminal.

    Values

    • succeeded — It finished; its files are ready.
    • failed — It ended without its result; error says why.
    • cancelled — You cancelled it.
  • objectrequired

    How far the job got.

    Example: {"done":0,"phase":"","total":1}

job.started
{
  "id": "5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90",
  "occurred_at": "2026-10-05T09:30:12Z",
  "event": "job.started",
  "api_version": "2026-09-29",
  "job_id": "9b2f4c1d0e8a",
  "task": "image.expand",
  "lifecycle": "running",
  "outcome": null,
  "progress": {
    "done": 0,
    "phase": "",
    "total": 1
  }
}

job.progress

A job delivered one more output; the payload carries progress {done, total, phase} (opt-in; at most once per delivery, unordered — read progress.done).

  • stringrequired

    The event's id — the same on every retry of one delivery. Deduplicate on it: a delivery may arrive more than once.

    Example: 5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90

  • stringrequired

    When it happened, ISO-8601 in UTC.

    Example: 2026-10-05T09:30:12Z

  • stringrequired

    Which event this is.

    Values

    • job.progress

    Example: job.progress

  • stringrequired

    The API version the body is written in (Refabric-Version).

    Example: 2026-09-29

  • stringrequired

    The job the event is about.

    Example: 9b2f4c1d0e8a

  • stringrequired

    The task the job runs.

    Example: image.expand

  • stringrequired

    Where the job is.

    Values

    • queued — Accepted and waiting to start.
    • running — Being made.
    • terminal — Ended. outcome says how.

    Example: running

  • stringrequirednullable

    How the job ended — null until its lifecycle is terminal.

    Values

    • succeeded — It finished; its files are ready.
    • failed — It ended without its result; error says why.
    • cancelled — You cancelled it.
  • objectrequired

    How far the job got.

    Example: {"done":0,"phase":"","total":1}

job.progress
{
  "id": "5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90",
  "occurred_at": "2026-10-05T09:30:12Z",
  "event": "job.progress",
  "api_version": "2026-09-29",
  "job_id": "9b2f4c1d0e8a",
  "task": "image.expand",
  "lifecycle": "running",
  "outcome": null,
  "progress": {
    "done": 0,
    "phase": "",
    "total": 1
  }
}

job.succeeded

A job finished and its files are ready.

  • stringrequired

    The event's id — the same on every retry of one delivery. Deduplicate on it: a delivery may arrive more than once.

    Example: 5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90

  • stringrequired

    When it happened, ISO-8601 in UTC.

    Example: 2026-10-05T09:30:12Z

  • stringrequired

    Which event this is.

    Values

    • job.succeeded

    Example: job.succeeded

  • stringrequired

    The API version the body is written in (Refabric-Version).

    Example: 2026-09-29

  • stringrequired

    The job the event is about.

    Example: 9b2f4c1d0e8a

  • stringrequired

    The task the job runs.

    Example: image.expand

  • stringrequired

    Where the job is.

    Values

    • queued — Accepted and waiting to start.
    • running — Being made.
    • terminal — Ended. outcome says how.

    Example: running

  • stringrequired

    How the job ended.

    Values

    • succeeded

    Example: succeeded

  • objectrequired

    How far the job got.

    Example: {"done":0,"phase":"","total":1}

  • objectrequired

    The first page of the job's result, as GET /v1/jobs/{job_id}/result answers it.

    Example: {"files":[],"has_more":false,"job_id":"9b2f4c1d0e8a"}

job.succeeded
{
  "id": "5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90",
  "occurred_at": "2026-10-05T09:30:12Z",
  "event": "job.succeeded",
  "api_version": "2026-09-29",
  "job_id": "9b2f4c1d0e8a",
  "task": "image.expand",
  "lifecycle": "running",
  "outcome": "succeeded",
  "progress": {
    "done": 0,
    "phase": "",
    "total": 1
  },
  "result": {
    "files": [],
    "has_more": false,
    "job_id": "9b2f4c1d0e8a"
  }
}

job.failed

A job failed. The payload carries the error.

  • stringrequired

    The event's id — the same on every retry of one delivery. Deduplicate on it: a delivery may arrive more than once.

    Example: 5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90

  • stringrequired

    When it happened, ISO-8601 in UTC.

    Example: 2026-10-05T09:30:12Z

  • stringrequired

    Which event this is.

    Values

    • job.failed

    Example: job.failed

  • stringrequired

    The API version the body is written in (Refabric-Version).

    Example: 2026-09-29

  • stringrequired

    The job the event is about.

    Example: 9b2f4c1d0e8a

  • stringrequired

    The task the job runs.

    Example: image.expand

  • stringrequired

    Where the job is.

    Values

    • queued — Accepted and waiting to start.
    • running — Being made.
    • terminal — Ended. outcome says how.

    Example: running

  • stringrequired

    How the job ended.

    Values

    • failed

    Example: failed

  • objectrequired

    How far the job got.

    Example: {"done":0,"phase":"","total":1}

  • objectrequired

    Why it failed, in the shape of every error.

job.failed
{
  "id": "5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90",
  "occurred_at": "2026-10-05T09:30:12Z",
  "event": "job.failed",
  "api_version": "2026-09-29",
  "job_id": "9b2f4c1d0e8a",
  "task": "image.expand",
  "lifecycle": "running",
  "outcome": "failed",
  "progress": {
    "done": 0,
    "phase": "",
    "total": 1
  },
  "error": {
    "code": "string",
    "type": "invalid_request",
    "message": "string",
    "field": "string",
    "retryable": true,
    "docs": "string",
    "request_id": "string",
    "ctx": {
      "required": 0,
      "balance": 0,
      "retry_after": 0
    },
    "input": null,
    "job_id": "string",
    "required": 0,
    "balance": 0
  }
}

job.cancelled

A job was cancelled.

  • stringrequired

    The event's id — the same on every retry of one delivery. Deduplicate on it: a delivery may arrive more than once.

    Example: 5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90

  • stringrequired

    When it happened, ISO-8601 in UTC.

    Example: 2026-10-05T09:30:12Z

  • stringrequired

    Which event this is.

    Values

    • job.cancelled

    Example: job.cancelled

  • stringrequired

    The API version the body is written in (Refabric-Version).

    Example: 2026-09-29

  • stringrequired

    The job the event is about.

    Example: 9b2f4c1d0e8a

  • stringrequired

    The task the job runs.

    Example: image.expand

  • stringrequired

    Where the job is.

    Values

    • queued — Accepted and waiting to start.
    • running — Being made.
    • terminal — Ended. outcome says how.

    Example: running

  • stringrequired

    How the job ended.

    Values

    • cancelled

    Example: cancelled

  • objectrequired

    How far the job got.

    Example: {"done":0,"phase":"","total":1}

  • objectrequired

    The catalogued cancelled error, in the shape of every error.

job.cancelled
{
  "id": "5f0c6a4e-3b1d-4d7e-9a51-0f2c8d1e7b90",
  "occurred_at": "2026-10-05T09:30:12Z",
  "event": "job.cancelled",
  "api_version": "2026-09-29",
  "job_id": "9b2f4c1d0e8a",
  "task": "image.expand",
  "lifecycle": "running",
  "outcome": "cancelled",
  "progress": {
    "done": 0,
    "phase": "",
    "total": 1
  },
  "error": {
    "code": "string",
    "type": "invalid_request",
    "message": "string",
    "field": "string",
    "retryable": true,
    "docs": "string",
    "request_id": "string",
    "ctx": {
      "required": 0,
      "balance": 0,
      "retry_after": 0
    },
    "input": null,
    "job_id": "string",
    "required": 0,
    "balance": 0
  }
}