job.completed

Sent to the job's webhookUrl (falling back to the API key's default webhook URL) when a job completes. For generate jobs the payload has NO operation field and data is { bookId, covers[] }; for cover-operation jobs (variation, edit_image, upscale, audiobook_cover) the payload includes operation and data is the operation's result (sourceCoverId + covers[] for variation/edit_image; covers[] with an asset field for upscale/audiobook_cover). Internal _storagePath fields are stripped. Signed with the API key's webhook secret (see partner webhook docs).

postWebhookjobCompleted

Payload

event'job.completed' required
jobIdstring uuid required
external_refstring nullable required
status'completed' required
operation'variation' | 'edit_image' | 'upscale' | 'audiobook_cover' | 'remove_text' | 'generate_reference' | 'wrap' | 'wrap_extend_front'

Present on every job's webhook except generate, whose webhooks omit this field.

timestampstring date-time required

Response

Return any 2xx to acknowledge receipt.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.