Music Delivery

140

Webhooks

Status: planned and currently unavailable.

Production endpoint management and the delivery outbox are not connected yet. Use authenticated batch, item and issue polling as the authoritative integration path. The material below records the intended receiver requirements; it is not an active webhook contract and the canonical OpenAPI intentionally does not advertise a webhook operation.

Signing

Verify the signature against the exact raw request bytes before parsing JSON. Keep active and next verification material during rotation and reject algorithms or key IDs outside the configured endpoint contract.

Tolerance

Enforce the documented timestamp tolerance while allowing ordinary network delay. Synchronize receiver clocks and reject stale signed requests outside the window.

Duplicates

Delivery is at least once. Store the event ID and make handling idempotent. A duplicate event must not create a duplicate catalog action or notification.

Ordering

Events can arrive out of order. Treat the referenced batch, item or job resource as authoritative and compare its current version or state before applying local transitions.

Rotation

Rotate endpoint secrets without a blind gap: add the new verifier, update Kasty, observe successful signed delivery, then retire the old verifier.

Retries

Return success only after the receiver durably records the event or equivalent work. Apply bounded backoff internally and avoid long synchronous downstream operations in the webhook request.

Future replay

When replay becomes available, it will re-deliver the same immutable event identity. Replay will not create a new Kasty state transition.

Endpoint safety

Use HTTPS, a dedicated route, strict body limits and no open redirect. The synthetic events are forward-looking receiver examples only and must not be used to infer current production availability.

Webhook EventsValidated JSON example
JSON
[
  {
    "id": "example_event_001",
    "type": "music.delivery.job.updated",
    "createdAt": "2026-07-16T00:01:00.000Z",
    "data": {
      "batchPublicId": "example_batch_001",
      "jobPublicId": "example_job_001",
      "state": "PROCESSING"
    }
  }
]
Download exact JSON