AbuseZero

Webhook endpoints

List and read your workspace's webhook endpoints, and send test events, with the AbuseZero REST API.

A webhook endpoint is an HTTPS URL that receives your workspace's webhook events. The workspace owner and admins add and change endpoints in Developers → Webhooks. The AbuseZero REST API reads them and sends test events.

Examples on this page use a server client:

import { AbuseZero } from "abusezero/server";

const abusezero = new AbuseZero({ key: process.env.ABUSEZERO_SECRET_KEY!, outage: "throw" });

The webhook endpoint object

{
  "object": "webhook_endpoint",
  "id": "whe_7d2e9a40-3c1b-4f65-8e27-b9a0c4d61f53",
  "url": "https://example.com/webhooks/abusezero",
  "description": "Fraud review queue",
  "events": ["evaluation.completed", "outcome.updated"],
  "benefits": [],
  "denied_only": false,
  "status": "active",
  "paused_reason": null,
  "last_success_at": "2026-10-29T12:00:01.000Z",
  "revision": 1,
  "created_at": "2026-10-01T09:00:00.000Z",
  "updated_at": "2026-10-01T09:00:00.000Z"
}
FieldTypeDescription
object"webhook_endpoint"The object type.
idstringThe endpoint ID, starting with whe_.
urlstringWhere events are sent. It can't be changed.
descriptionstring or nullWhat the endpoint is for.
eventsarray of stringsThe event types the endpoint receives.
benefitsarray of stringsben_ IDs the endpoint is limited to. Empty means every benefit.
denied_onlybooleanWhether evaluation.completed is sent only when result is deny.
statusactive or pausedA paused endpoint receives no events except test events.
paused_reasonmanual, failures or nullmanual when someone paused it. failures when AbuseZero paused it after 3 days of failed deliveries. null while active.
last_success_atstring or nullWhen the endpoint last replied 2xx.
revisionintegerIncreases with every change to the endpoint.
created_atstringWhen the endpoint was added.
updated_atstringWhen the endpoint last changed.

The signing secret is never returned. It's shown once in the dashboard, when the endpoint is added and after each rotation.

Add and change endpoints

Adding, editing, pausing, resuming, rotating the signing secret and deleting happen only in Developers → Webhooks, for the workspace owner and admins. No API key, OAuth token or machine client can add or change an endpoint, so a credential can never send your workspace's events to a new destination. See Exclusions.

List webhook endpoints

Returns the workspace's endpoints, most recent first.

MethodPathScopeIdempotency-Key
GET/v1/webhook-endpointswebhooks:readNot used

Also available as abusezero webhook-endpoints list in the AbuseZero CLI, abusezero_list_webhook_endpoints on the AbuseZero MCP server and call() in the AbuseZero Node.js SDK.

Query parameters

ParameterTypeRequiredLimitsDescription
limitintegerNo1 to 100, default 50How many endpoints to return.
cursorstringNoThe next_cursor from the previous page, unchanged.

Example

const page = await abusezero.call("/v1/webhook-endpoints");

Response

Returns 200 with a list of webhook endpoint objects.

{
  "object": "list",
  "data": [
    {
      "object": "webhook_endpoint",
      "id": "whe_7d2e9a40-3c1b-4f65-8e27-b9a0c4d61f53",
      "url": "https://example.com/webhooks/abusezero",
      "description": "Fraud review queue",
      "events": ["evaluation.completed", "outcome.updated"],
      "benefits": [],
      "denied_only": false,
      "status": "active",
      "paused_reason": null,
      "last_success_at": "2026-10-29T12:00:01.000Z",
      "revision": 1,
      "created_at": "2026-10-01T09:00:00.000Z",
      "updated_at": "2026-10-01T09:00:00.000Z"
    }
  ],
  "next_cursor": null
}

Retrieve a webhook endpoint

MethodPathScopeIdempotency-Key
GET/v1/webhook-endpoints/{id}webhooks:readNot used

Also available as abusezero webhook-endpoints get in the AbuseZero CLI, abusezero_get_webhook_endpoint on the AbuseZero MCP server and call() in the AbuseZero Node.js SDK.

Path parameters

ParameterTypeDescription
idstringThe endpoint ID, starting with whe_.

Example

const endpoint = await abusezero.call("/v1/webhook-endpoints/whe_7d2e9a40-3c1b-4f65-8e27-b9a0c4d61f53");

Response

Returns 200 with a webhook endpoint object.

Errors

CodeStatusMeaning
WEBHOOK_ENDPOINT_NOT_FOUND404No endpoint with this ID exists in the workspace.
INVALID_FIELD422The ID doesn't start with whe_.

Send a test event

Sends a webhook.test event to the endpoint, right away, and returns its delivery.

MethodPathScopeIdempotency-Key
POST/v1/webhook-endpoints/{id}/testwebhooks:writeRequired

Also available as abusezero webhook-endpoints test in the AbuseZero CLI, abusezero_send_webhook_test on the AbuseZero MCP server and call() in the AbuseZero Node.js SDK.

  • Test events are free: they never count as deliveries.
  • They're sent even to a paused endpoint, so you can confirm a fix before you resume it.
  • Each test event is attempted once.
  • Each endpoint accepts 10 test events an hour.
  • With an OAuth token, the signed-in member must be the workspace owner or an admin, as in the dashboard.

Path parameters

ParameterTypeDescription
idstringThe endpoint ID, starting with whe_.

Example

const delivery = await abusezero.call("/v1/webhook-endpoints/whe_7d2e9a40-3c1b-4f65-8e27-b9a0c4d61f53/test", {
  method: "POST",
  idempotencyKey: "webhook-test-2026-10-31",
});

Response

Returns 201 with the new webhook delivery. Read it again with GET /v1/webhook-deliveries/{id} to see the attempt.

{
  "object": "webhook_delivery",
  "id": "whd_1f6b3d84-7a2c-4e95-8b10-6d4e2a9c7f35",
  "endpoint": "whe_7d2e9a40-3c1b-4f65-8e27-b9a0c4d61f53",
  "event": { "id": "evt_0c7e2b59-8d4a-4f13-9e6b-3a1d5c8f2e70", "type": "webhook.test" },
  "kind": "test",
  "status": "pending",
  "attempts": 0,
  "last_status_code": null,
  "last_error": null,
  "next_attempt_at": "2026-10-31T09:00:00.000Z",
  "created_at": "2026-10-31T09:00:00.000Z",
  "completed_at": null
}

Errors

CodeStatusMeaning
WEBHOOK_ENDPOINT_NOT_FOUND404No endpoint with this ID exists in the workspace.
RATE_LIMITED429The endpoint had 10 test events in the last hour. Wait for the Retry-After time, then send again.
PERMISSION_REQUIRED403With an OAuth token, the signed-in member isn't the workspace owner or an admin.

For every other code, see REST API errors.

How is this guide?

Last updated on

On this page