Skip to content

API reference

Webhook endpoints

HTTPS URLs that receive signed events from Halyard as they happen.

Overview

A webhook endpoint is an HTTPS URL that receives events as signed POST requests. Each delivery carries a Halyard-Signature header made with the endpoint's secret; see Webhooks for how to verify it.

The secret is only returned when you create an endpoint or rotate its secret. Store it then, the same way you store an API key.

Endpoints
4
ID prefix
whk_
Attributes
10

The webhook endpoint object

Every webhook endpoint endpoint returns this object, or a list of them. Attributes marked null are always present in the response, so you can rely on the shape.

Attributes

idstring

Unique identifier, prefixed with whk_.

objectstring

Always webhook_endpoint.

urlstring

The HTTPS URL deliveries are sent to.

descriptionstring | null

A note for your team.

enabled_eventsstring[]

Event types to deliver. * subscribes to everything, job.* to a prefix.

statusenum

enabled, or disabled after 72 hours of failed deliveries.

api_versionstring

Version used to render event payloads for this endpoint.

secretstring

Signing secret, prefixed with whsec_. Only present on create and rotate.

created_attimestamp

When the object was created, in ISO 8601 UTC.

livemodeboolean

true for objects created with a live key, false for the test sandbox.

The webhook endpoint object
{  "id": "whk_9Tc3Vr5Jd1",  "object": "webhook_endpoint",  "url": "https://hooks.larkspur.example/halyard",  "description": "Job failures for the ops dashboard",  "enabled_events": [    "job.failed",    "job.succeeded",    "schedule.paused"  ],  "status": "enabled",  "api_version": "2026-09-15",  "created_at": "2026-08-21T16:45:09Z",  "livemode": false}

Create a webhook endpoint

POST/v3/webhook_endpoints

Registers a URL and starts delivering matching events to it. Halyard sends a ping event first to check the URL responds with a 2xx.

Body parameters

urlstringrequired

HTTPS URL, up to 2,048 characters.

enabled_eventsstring[]required

Event types or patterns, such as job.failed or job.*.

descriptionstring

A note for your team.

api_versionstring

Defaults to your account's version, currently 2026-09-15.

Returns

The webhook endpoint object, including its secret.

curl https://api.halyard.example/v3/webhook_endpoints \  -H "Authorization: Bearer hy_test_51Hq8Zx2rTmV9cKpL3d" \  -H "Content-Type: application/json" \  -d '{    "url": "https://hooks.larkspur.example/halyard",    "enabled_events": [      "job.failed",      "job.succeeded",      "schedule.paused"    ],    "description": "Job failures for the ops dashboard"  }'
Response201 Created
{  "id": "whk_9Tc3Vr5Jd1",  "object": "webhook_endpoint",  "url": "https://hooks.larkspur.example/halyard",  "description": "Job failures for the ops dashboard",  "enabled_events": [    "job.failed",    "job.succeeded",    "schedule.paused"  ],  "status": "enabled",  "api_version": "2026-09-15",  "created_at": "2026-08-21T16:45:09Z",  "livemode": false,  "secret": "whsec_Lq8Rt2Vx6Zb4Nc9Pd3Kf"}

List webhook endpoints

GET/v3/webhook_endpoints

Lists your webhook endpoints, newest first. Secrets are never included.

Query parameters

limitintegerdefault: 20

How many objects to return, between 1 and 100.

starting_afterstring

A cursor: the ID of the last object on the previous page. The next page starts right after it.

ending_beforestring

A cursor for paging backwards: the ID of the first object on the current page.

Returns

A list object with webhook endpoint objects in data.

curl -G https://api.halyard.example/v3/webhook_endpoints \  -H "Authorization: Bearer hy_test_51Hq8Zx2rTmV9cKpL3d" \  -d limit=10
Response200 OK
{  "object": "list",  "url": "/v3/webhook_endpoints",  "has_more": false,  "data": [    {      "id": "whk_9Tc3Vr5Jd1",      "object": "webhook_endpoint",      "url": "https://hooks.larkspur.example/halyard",      "description": "Job failures for the ops dashboard",      "enabled_events": [        "job.failed",        "job.succeeded",        "schedule.paused"      ],      "status": "enabled",      "api_version": "2026-09-15",      "created_at": "2026-08-21T16:45:09Z",      "livemode": false    },    {      "id": "whk_3Hf8Mz1Qw6",      "object": "webhook_endpoint",      "url": "https://api.larkspur.example/hooks/orders",      "description": "Order events for fulfilment",      "enabled_events": [        "order.*"      ],      "status": "enabled",      "api_version": "2026-09-15",      "created_at": "2026-06-03T08:12:30Z",      "livemode": false    }  ]}

Delete a webhook endpoint

DELETE/v3/webhook_endpoints/{id}

Deletes an endpoint. Deliveries in flight are dropped and no new events are sent to it.

Path parameters

idstringrequired

The webhook endpoint's ID.

Returns

An object with the endpoint's id and deleted: true.

curl -X DELETE https://api.halyard.example/v3/webhook_endpoints/whk_9Tc3Vr5Jd1 \  -H "Authorization: Bearer hy_test_51Hq8Zx2rTmV9cKpL3d"
Response200 OK
{  "id": "whk_9Tc3Vr5Jd1",  "object": "webhook_endpoint",  "deleted": true}

Rotate a webhook secret

POST/v3/webhook_endpoints/{id}/rotate_secret

Issues a new signing secret. During the overlap window, deliveries are signed with both secrets so you can deploy the new one without dropping events.

Path parameters

idstringrequired

The webhook endpoint's ID.

Body parameters

expire_previous_indurationdefault: 24h

How long the old secret keeps signing. Up to 7d; 0s expires it now.

Returns

The webhook endpoint object with the new secret.

curl https://api.halyard.example/v3/webhook_endpoints/whk_9Tc3Vr5Jd1/rotate_secret \  -H "Authorization: Bearer hy_test_51Hq8Zx2rTmV9cKpL3d" \  -H "Content-Type: application/json" \  -d '{    "expire_previous_in": "24h"  }'
Response200 OK
{  "id": "whk_9Tc3Vr5Jd1",  "object": "webhook_endpoint",  "url": "https://hooks.larkspur.example/halyard",  "description": "Job failures for the ops dashboard",  "enabled_events": [    "job.failed",    "job.succeeded",    "schedule.paused"  ],  "status": "enabled",  "api_version": "2026-09-15",  "created_at": "2026-08-21T16:45:09Z",  "livemode": false,  "secret": "whsec_Yt5Gm1Ws7Jx2Hq8Ln4Cv"}

Suggested