Docs
Dashboard
API reference / WebhooksBeta

Update a webhook endpoint

enabled: false switches it off (deliveries not yet made then fail); enabled: true switches it back on, also after the platform switched it off, and forgets its earlier failures. rotateSecret: true makes a new signing secret, answered once as secret; the old one keeps signing for 24 hours.

PATCH/v1/webhooks/{id}

Request

Method and pathPATCH/v1/webhooks/{id}
Base URLhttps://api.boxline.dev
AuthenticationYour API key in the x-api-key header (or Authorization: Bearer). The examples read it from BOXLINE_API_KEY.
Rate limitYes. See Rate limits for the numbers and headers.

Path parameters

NameTypeDefaultAllowed valuesDescription
idrequiredstring––

Body

JSON with content-type: application/json. Required.

NameTypeDefaultAllowed valuesDescription
urlstring––Up to 2048 characters. Format: uri.
eventsstring[]––1 to 100 items.
enabledboolean––
descriptionstring | null––Up to 200 characters.
rotateSecretboolean––Make a new signing secret, shown once in this answer; the old one keeps signing for 24 hours.
curl -X PATCH "https://api.boxline.dev/v1/webhooks/$WEBHOOK_ID" \  -H "x-api-key: $BOXLINE_API_KEY" \  -H "content-type: application/json" \  -d '{    "events": ["session.stopped", "agent_run.finished", "crawl.finished"],    "enabled": true  }'

Responses

200 OK

The endpoint now.

Fields

NameTypeDefaultAllowed valuesDescription
idstring––
urlstring––Format: uri.
eventsstring[]––The types it gets, or ["*"] for all of them.
descriptionstring | null––
enabledboolean––
disabledReasonstring | null–user, gone, failing, account_recovered, nulluser: switched off with PATCH; gone: it answered 410; failing: 3 days of failed deliveries; account_recovered: a password reset recovered an account whose email was not confirmed. null while enabled.
disabledAtstring | null––Format: date-time.
failingSincestring | null––The first failed delivery since the last success. Format: date-time.
lastSuccessAtstring | null––Format: date-time.
lastFailureAtstring | null––Format: date-time.
secretRotatedAtstring | null––Format: date-time.
previousSecretExpiresAtstring | null––Until then deliveries are signed with the secret before the last rotation too. Format: date-time.
pausedUntilstring | null––Deliveries wait until then because the endpoint timed out 3 times in a row (test events still go). Format: date-time.
createdAtstring––Format: date-time.
updatedAtstring––Format: date-time.
Response 200
{  "id": "wh_Hk2Lq8Zx0Vb5Nm1C",  "url": "https://example.com/",  "events": [    "session.started"  ],  "description": "…",  "enabled": false,  "disabledReason": "user",  "disabledAt": "2026-09-29T10:00:00.000Z",  "failingSince": "2026-09-29T10:00:00.000Z",  "lastSuccessAt": "2026-09-29T10:00:00.000Z",  "lastFailureAt": "2026-09-29T10:00:00.000Z",  "secretRotatedAt": "2026-09-29T10:00:00.000Z",  "previousSecretExpiresAt": "2026-09-29T10:00:00.000Z",  "pausedUntil": "2026-09-29T10:00:00.000Z",  "createdAt": "2026-09-29T10:00:00.000Z",  "updatedAt": "2026-09-29T10:00:00.000Z"}

Errors

Errors have a matching HTTP status and the same body. code is stable, so check it in your code; message is for people. See Errors and request ids.

StatusCodesWhen
400 Bad Requestinvalid_request, invalid_json, invalid_cursor, invalid_idempotency_key, invalid_extension, variables_with_extensions, terms_not_accepted, invalid_reset_token, invalid_confirmation_code, wrong_password, no_password, invalid_next, invalid_oauth_tokenThe request is not valid.
401 UnauthorizedunauthorizedMissing or invalid API key.
404 Not Foundnot_found, invite_not_found, provider_unavailableNo such thing in this project (or organization), or no such route.
429 Too Many Requestsrate_limited, concurrency_limitToo many requests, or the organization's concurrent sessions (its plan's) or the project's concurrencyCap are in use.
Error body
{  "error": {    "code": "not_found",    "message": "session not found",    "requestId": "req_4fJx0aQm2Lk9Pz7N"  }}

Learn more

These docs describe a beta API. Endpoints, fields and SDK methods may change before general availability; breaking changes will be listed in the changelog.