Docs
Dashboard
API reference / WebhooksBeta

List webhook endpoints

Oldest first. Signing secrets are never shown again after they are made.

GET/v1/webhooks

Request

Method and pathGET/v1/webhooks
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.

Query parameters

NameTypeDefaultAllowed valuesDescription
afterstring––The next value of the previous page (same filters and sort). Opaque; do not build it yourself.
limitinteger100–From 1 to 200.
curl "https://api.boxline.dev/v1/webhooks" \  -H "x-api-key: $BOXLINE_API_KEY"

Responses

200 OK

A page of endpoints.

Fields

NameTypeDefaultAllowed valuesDescription
dataobject[]––
data[].idstring––
data[].urlstring––Format: uri.
data[].eventsstring[]––The types it gets, or ["*"] for all of them.
data[].descriptionstring | null––
data[].enabledboolean––
data[].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.
data[].disabledAtstring | null––Format: date-time.
data[].failingSincestring | null––The first failed delivery since the last success. Format: date-time.
data[].lastSuccessAtstring | null––Format: date-time.
data[].lastFailureAtstring | null––Format: date-time.
data[].secretRotatedAtstring | null––Format: date-time.
data[].previousSecretExpiresAtstring | null––Until then deliveries are signed with the secret before the last rotation too. Format: date-time.
data[].pausedUntilstring | null––Deliveries wait until then because the endpoint timed out 3 times in a row (test events still go). Format: date-time.
data[].createdAtstring––Format: date-time.
data[].updatedAtstring––Format: date-time.
nextstring | null––Pass it back as after for the next page; null on the last page.
Response 200
{  "data": [    {      "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"    }  ],  "next": "eyJvIjoiY3JlYXRlZF9kZXNjIiwidCI6IjIwMjYtMDktMjlUMTA6MDA6MDAuMTIzNDU2WiIsImkiOiI2YzFmIn0"}

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.
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.