Skip to main content

Overview

Your Anon organization can subscribe to webhook events to receive push-style notifications whenever important events occur during workflow execution. Our webhook service gives you:
  • High-availability delivery with automatic retries
  • A visual Event Log and Replay UI in the dashboard (/webhooks)
  • Cryptographic signatures so you can verify that the payload really came from us
Typical use-cases include:
  • Kicking off downstream processing when a job run completes
  • Updating your own UI in real-time as workflow runs progress
  • Alerting when a link is opened or closed, or when a workflow run fails

Quickstart

  1. Navigate to dashboard.anon.com/webhooks and click + Add endpoint.
  2. Enter the HTTPS URL (e.g. https://api.example.com/anon/webhooks) where you want to receive events.
  3. Click on Create. You’ll start receiving events immediately.

Testing

  • You can create a Svix Play endpoint to test receiving events
  • You can also send example events (svix.ping) through the Testing tab of your endpoint

Verifying requests

Each request includes seven headers:
accept
string
Indicates the MIME types that are acceptable for the response
content-length
number
The length of the request body in bytes
content-type
string
application/json
svix-id
string
Unique message ID (e.g. msg_2ycTlwDkllobhXwGILmiziO9xnz)
svix-signature
string
Cryptographic signature for verification (e.g. v1,cWXqN0eZ2edTtYgF+LfDDmNLgNOiSVx+OOq9WU3MDkw=)
svix-timestamp
number
Unix timestamp of when the webhook was sent (e.g. 1750133013)
user-agent
string
Identifies the webhook sender (e.g. Svix-Webhooks/1.66.0 (sender-9YMgn; +https://www.svix.com/http-sender/))
  • You can copy the signing secret from the webhook page to verify the signature of webhook events
  • You can set custom headers in the Advanced tab of your webhook

Event types

Payload format

All events share the same envelope:
{
  "id": "evt_01HX4J1SQ93Y9F6VBQ4JPZW66S",
  "object": "event",
  "created": "2025-06-18T00:50:40.301173Z",
  "type": "<event_type>",
  "data": {
    "object": { /* resource object (see below) */ },
    "error_message": "Only present for *.failed events"
  }
}

Resource-based object schemas

Here are the schemas for different resource objects:
{
  "id": "link_01HX4J3SQ4QZZ9V9JMP8J2V7KZ",
  "external_id": "customer_12345",
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "link_url": "https://anon.com/link/abc123",
  "expires_at": "2025-06-25T00:50:40.301173Z",
  "created_at": "2025-06-18T00:50:40.301173Z",
  "opened_at": "2025-06-18T01:15:30.123456Z",
  "closed_at": "2025-06-18T01:45:00.789012Z"
}
{
  "id": "evt_01HX4J1SQ93Y9F6VBQ4JPZW66S",
  "object": "event",
  "created": "2025-06-18T00:50:40.301173Z",
  "type": "job_run.completed",
  "data": {
    "object": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "jobId": "550e8400-e29b-41d4-a716-446655440001",
      "status": "COMPLETED",
      "completedAt": "2025-06-18T03:29:55.821327Z",
      "createdAt": "2025-06-18T02:55:27.804941Z",
      "updatedAt": "2025-06-18T03:29:55.821327Z",
      "createdByUserId": "550e8400-e29b-41d4-a716-446655440002",
      "organizationId": "550e8400-e29b-41d4-a716-446655440003",
      "isTest": false,
      "jobConfigJsonSnapshot": {
        "workflowExecutionOrder": [
          "550e8400-e29b-41d4-a716-446655440004"
        ]
      }
    }
  }
}
{
  "id": "evt_01HX4J1SQ93Y9F6VBQ4JPZW66S",
  "object": "event",
  "created": "2025-06-18T00:50:40.301173Z",
  "type": "workflow_run.failed",
  "data": {
    "object": {
      "id": "550e8400-e29b-41d4-a716-446655440005",
      "workflowId": "550e8400-e29b-41d4-a716-446655440006",
      "status": "FAILED",
      "completedAt": null,
      "createdAt": "2025-06-18T02:55:27.804941Z",
      "updatedAt": "2025-06-18T03:15:30.123456Z",
      "createdByUserId": "550e8400-e29b-41d4-a716-446655440002",
      "jobRunId": "550e8400-e29b-41d4-a716-446655440000"
    },
    "error_message": "Workflow execution failed: Timeout waiting for element"
  }
}

Retry logic

  • We retry with exponential back-off (2 attempts).
  • Return any 2xx status code to acknowledge delivery. You can see the history of events under Message Attempts in your webhook.