POST request to your registered endpoint with a JSON payload describing the event.
Getting started
1
Build a webhook endpoint
Create an HTTPS endpoint on your server that accepts
POST requests and returns a 200 OK response. The endpoint must be publicly reachable and support TLS. Return a 2xx before performing any slow processing. If there is additional processing needed, use a queue internally if needed.2
Register your endpoint with Slate
Send your endpoint URL to your Slate integration contact. We’ll provision your webhook and return a HMAC-SHA256 signing secret used to verify that every delivery came from Slate.
3
Verify signatures and process events
On each incoming request, verify the
svix-signature header using your signing secret before trusting the payload. Then act on the event type and matter data in the body.Receiving events
Slate delivers every event as an HTTPPOST to your registered endpoint.
Request headers
Example delivery
Responding to deliveries
Return any HTTP2xx status within 30 seconds. Any non-2xx response or timeout triggers a retry.
Event types
Each webhook delivery carries an event type that identifies what happened.DOCUMENT_READY
Fired when a signed or processed document becomes available on a matter.
Payload reference
Slate follows an additive-only policy: existing fields will not be removed or renamed in a breaking way. Build your handler to ignore unknown fields.
Verifying signatures
Always verify the signature before processing a payload. This confirms the request came from Slate and hasn’t been tampered with.How it works
Slate constructs a signed string from three components, then signs it with HMAC-SHA256 using your signing secret that will be shared at the time your endpoint is registered with Slate:svix-signature header may contain multiple signatures (space-separated). A request is valid if any one of them matches — this supports secret rotation without downtime. Compare svix-timestamp to the current time and discard the request if the difference exceeds 5 minutes.
Using the Svix SDK (recommended)
Slate’s webhook delivery is powered by Svix, and Svix publishes official SDKs in Python, Node.js, Go, Java, Ruby, PHP, Rust, and more. The SDK handles signature verification, timestamp checking, and secret decoding in a single call.pip install svix
Manual verification — Python
Manual verification — Node.js
Retries and delivery
If your endpoint doesn’t return a2xx within 30 seconds, Slate retries with exponential backoff:
After 9 attempts the message is marked failed. Contact your Slate integration contact if you need a missed event replayed.
Idempotency
Because a delivery may be attempted more than once, your handler should be idempotent. Processing the same event twice should produce the same result as processing it once. Use thesvix-id header as a stable unique key to deduplicate incoming events.
