workorder.updated
DUET sends this event when a work-order field changes and the change isn't a completion.
x-duet-signature*stringThe signatures, in the form t=<Unix seconds>,v1=<hex HMAC-SHA256>,v1a=<hex Ed25519>. Every delivery carries both signatures, and both sign the same string: <t>.<raw request body>.
v1= is an HMAC-SHA256 keyed with the subscription's signing secret. During a secret rotation, the header carries two v1= values.
v1a= is an Ed25519 signature made with the DUET signing key. To verify it, fetch the public keys from GET /webhooks/jwks.json, decode the hex value to 64 bytes, and verify it over the UTF-8 bytes of <t>.<raw request body> with each key. During a key rotation, the header carries two v1a= values.
Accept the delivery if any value of the kind you check verifies, and reject it if t is more than 300 seconds from your clock. Ignore keys in the header that you don't recognize.
x-duet-event-id*stringThe event ID. It equals the envelope id and doesn't change on a retry. Use it to deduplicate deliveries.
x-duet-event-type*stringThe event type. It equals the envelope type.
application/json- body
schema_version*1The version of the envelope and data schema. An additive change keeps the version. A breaking change increments it.
1id*stringThe event ID. It equals X-Duet-Event-Id. Use it to deduplicate deliveries.
type*"workorder.updated""workorder.updated"occurred_at*stringdate-timeorganization_id*stringproject_id*stringdata*A work order, as it was when the change happened.
Any 2xx status acknowledges the delivery. Return it as soon as you receive the delivery, and process the event asynchronously. DUET waits 10 seconds for the response by default, and a subscription can set its own timeout from 1 to 30 seconds. A delivery that times out counts as failed and is retried.
{ "schema_version": 1, "id": "string", "type": "workorder.updated", "occurred_at": "2019-08-24T14:15:22Z", "organization_id": "string", "project_id": "string", "data": { "id": "string", "number": 0, "organization_id": "string", "project_id": "string", "project": { "key": "string" }, "issue_id": "string", "title": "string", "description": "string", "status": "string", "priority": "urgent", "due_date": "2019-08-24T14:15:22Z", "work_type": "string", "external_system": "string", "external_id": "string", "external_ref": "string", "external_url": "string", "payload": { "property1": null, "property2": null }, "assigned_to": { "id": "string", "first_name": "string", "last_name": "string", "email": "string" }, "created_by": { "id": "string", "first_name": "string", "last_name": "string", "email": "string" }, "devices": [ { "device_id": "string", "component": "string", "status": "string", "completed_at": "2019-08-24T14:15:22Z" } ], "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "issue": { "id": "string", "number": 0, "name": "string", "status": "string", "project_id": "string", "project": { "key": "string" } } }}{ "x-duet-signature": "string", "x-duet-event-id": "string", "x-duet-event-type": "string"}workorder.synced Webhook
DUET sends this event the first time a work order gets your system's `external_id`.
Get the webhook signing keys GET
Returns the Ed25519 public keys, as a JSON Web Key Set (RFC 7517), that verify the `v1a=` value in `X-Duet-Signature`. The endpoint needs no authentication. Cache the response for up to 5 minutes, and fetch it again when a `v1a=` value doesn't verify with a cached key.

