API REFERENCE

Events

When a conversion ends, every webhook endpoint of its mode that wants the event receives it, signed.

TypeWhen
conversion.completedThe result is ready: its figures and its files.
conversion.failedIt ended without a result. Any credit came back.
conversion.expiredIt did not finish in time. Any credit came back.

The envelope

FieldTypeWhat
objectevent
ididThe same as the webhook-id header: dedupe on it, events may come more than once.
typeone of conversion.completed, conversion.failed, conversion.expiredconversion.completed (its result is ready), conversion.failed or conversion.expired (it ended without one).
timestamptimestampWhen the conversion ended.
livemodeboolean
dataConversionA conversion: one image redrawn as SVG, and where it stands.
conversion.completed
{
  "object": "event",
  "id": "6b1e4c9a-2f7d-4e3b-8a5c-1d0e9f8a7b6c",
  "type": "conversion.completed",
  "timestamp": "2026-10-24T12:00:00.000Z",
  "livemode": false,
  "data": {
    "object": "conversion",
    "id": "00000000-0000-4000-8000-000000000000",
    "livemode": false,
    "status": "completed",
    "phase": null,
    "preset": "default",
    "options": {},
    "imageId": "00000000-0000-4000-8000-000000000001",
    "filename": "logo",
    "inputFormat": null,
    "unlocked": true,
    "allowance": "credit",
    "engineVersion": "sample-27a924dbb20e",
    "result": {
      "anchorPoints": 29,
      "fileSize": 550,
      "formats": [
        {
          "background": "dropped",
          "bytes": 550,
          "currentColor": false,
          "default": true,
          "editableText": false,
          "id": "web",
          "profile": "web"
        },
        {
          "background": "kept",
          "bytes": 600,
          "currentColor": false,
          "default": false,
          "editableText": false,
          "id": "web-background",
          "profile": "web"
        },
        {
          "background": "dropped",
          "bytes": 759,
          "currentColor": false,
          "default": true,
          "editableText": false,
          "id": "design",
          "profile": "design"
        },
        {
          "background": "kept",
          "bytes": 823,
          "currentColor": false,
          "default": false,
          "editableText": false,
          "id": "design-background",
          "profile": "design"
        }
      ]
    },
    "failure": null,
    "inputDeletedAt": null,
    "createdAt": "2026-10-24T12:00:00.000Z",
    "updatedAt": "2026-10-24T12:00:00.000Z"
  }
}

The headers

Sent to every endpoint of the conversion's mode that wants it, signed by the Standard Webhooks scheme with the endpoint's secret: verify webhook-signature over ${webhook-id}.${webhook-timestamp}.${raw body} before trusting it. At least once: dedupe on webhook-id. Answer 2xx within 15 seconds; anything else is retried for about 24 hours.

HeaderWhat
webhook-idThe event's id, the same on every attempt: dedupe on it.
webhook-timestampWhen this attempt was signed, in Unix seconds: refuse one more than 5 minutes off.
webhook-signaturev1,<base64 HMAC-SHA256> of id.timestamp.body with the endpoint's secret; two, space-separated, while a rolled secret overlaps.

Check them with our SDKs' verifyWebhook, or any Standard Webhooks library. How webhooks work.