Skip to main content
Webhooks notify your application when Captide adds a new document, instead of you polling /documents/list. Register a URL, optionally filtered by document category, and Captide sends each new document to it as a POST request.

Create a webhook

Register your URL with POST /api/v2/webhooks:
  • url: where Captide sends documents. Use HTTPS.
  • documentCategories: only send documents in these categories. Omit it, or send null or [], to receive every category.
  • description: a label for your own use. GET /api/v2/webhooks?description=… finds webhooks by it.
Webhooks belong to your organization: every API key of the organization sees and manages the same webhooks.

What Captide sends

For each new document, Captide sends a POST request to your URL with the document as JSON, in the same format as GET /api/v2/documents/{id}:
Each request has these headers:
The file links in the payload are signed and expire one hour after the request is sent. Download the files promptly, or call GET /api/v2/documents/{id} later for fresh links.

Which documents are sent

  • A webhook fires when Captide adds a document that was published in the last 7 days. Older documents, for example from historical backfills, are added to the API without triggering webhooks.
  • The category filter uses the document’s category when it is added.
  • Documents are sent for every company. To follow specific companies, check companyId or companyTickers in the payload.
  • If Captide adds a new version of a document’s file, you can receive it again, with a new id.

Responding and retries

Respond with any 2xx status to confirm receipt, within 30 seconds. Do the processing after you respond, for example in a queue. Delivery is at least once: in rare cases, such as a timeout after your server accepted the request, you can receive the same document twice. Use the Idempotency-Key header to ignore repeats.

Receiving webhooks

A minimal receiver with Express:
Webhook requests aren’t signed. Use an HTTPS URL that is hard to guess (for example with a random path segment), and treat the payload as a notification: to trust a document, fetch it with your API key from GET /api/v2/documents/{id}.

Manage webhooks

PATCH only changes the fields you send. To pause a webhook, send {"enabled": false}; documents added while it is paused aren’t sent later. To remove a category filter, send {"documentCategories": []} (null leaves the filter unchanged).