Overview
Webhooks let your server receive HTTP POST callbacks when events occur in SmartlyQ - a post publishing, a new comment or DM arriving, a contact being created, your wallet running low, and more. There are 38 events across posting, accounts, inbox, reviews, jobs, billing, and CRM.Setting up webhooks
Two ways to register an endpoint (both HTTPS-only, public URLs):- Dashboard: Developer Dashboard → Webhooks tab → add an endpoint URL and select events.
- API:
POST /webhookswithurland aneventsarray (see the API reference). The response includes the signingsecret- shown exactly once.
GET /webhooks), create (POST /webhooks), update url/events or pause/resume (PUT /webhooks/{id}), send a signed test delivery (POST /webhooks/{id}/test), inspect the delivery log (GET /webhooks/logs), and delete (DELETE /webhooks/{id}).
Limits and safety: up to 10 active webhooks per workspace; URLs must be public HTTPS endpoints (internal/private addresses are rejected at save time and re-checked at delivery time); unknown event names are rejected with a validation error. Webhooks are a developer-workspace resource: the X-Profile-Id header is not accepted on webhook routes - profile events reach your webhooks automatically via fan-up.
Delivery envelope
Every delivery is JSON with the same envelope:idis a stable event identifier: it is shared across fan-out to multiple endpoints and reused on every retry of the same delivery, so you can deduplicate at-least-once delivery. It is also echoed in theX-SmartlyQ-Event-Idheader so you can dedupe without parsing the body.created_atis UTC, ISO 8601.datais the event-specific payload (catalog below).
Profiles fan-up: if you use Profiles (sub-accounts for your end customers), events raised inside a profile’s workspace are also delivered to your webhooks, with two extra fields added to
data: profile_id and profile_workspace_id, so you can attribute the event to the right end customer.Headers
Verifying signatures
X-SmartlyQ-Signature carries t=<timestamp>,v1=<hmac>, where <hmac> is the HMAC-SHA256 of <timestamp>.<raw-body> keyed with your webhook secret. The timestamp rotates on every attempt; the body (and id) stay the same.
Retry policy
- Non-2xx responses are retried up to 5 attempts with exponential backoff (≈2, 4, 8, 16, 32 minutes).
- If your endpoint answers
429with aRetry-Afterheader, we honor it (capped at 1 hour) instead of the standard backoff. - After the final attempt the delivery is marked dead-letter (it is not silently dropped - you can re-run it from the dashboard Logs).
- 10 consecutive failures flip the endpoint to
failingand pause deliveries until you fix and re-enable it. - Delivery records are retained for 90 days.
Event catalog
All registerable events. Registering an event name outside this catalog is rejected with a validation error.Posting
Accounts
Inbox
Reviews
Jobs
Billing & keys
CRM
CRM events fire regardless of whether the change came from the app or the API.Machine-readable payload schemas for every event ship in the OpenAPI spec under the standard OpenAPI 3.1
webhooks object, so SDK generators and AI agents can consume them.
