Data storage
DispatchQ stores the following data for each job:| Field | Stored | Notes |
|---|---|---|
payload | ✅ | The request body you send when creating a job |
headers | ✅ | Custom headers you attach to the job |
response_body | ✅ | The response from your webhook endpoint |
response_code | ✅ | HTTP status code from your endpoint |
url | ✅ | The target webhook URL |
callback_url | ✅ | Where results are forwarded (if set) |
Best practices
Don’t put raw secrets in payloads
Instead of:Don’t put auth tokens in custom headers unless necessary
If your webhook endpoint requires authentication, prefer a pre-shared token that your endpoint validates, not a token with broad permissions:Use HMAC verification on your endpoints
Every DispatchQ delivery includes anX-DispatchQ-Signature header. Always verify it:
Transport security
- All connections to the DispatchQ API are over HTTPS/TLS
- Webhook deliveries are always made over HTTPS (HTTP targets are rejected)
- Postgres connections use TLS with certificate verification
Encryption at rest
All data stored in Postgres is encrypted at rest. Neon (our database provider) encrypts all data using AES-256.Access control
- Each account has its own API key
- All API queries are scoped by
account_id— you can only access your own jobs and schedules - API keys are stored as hashed values (not plaintext) in the database
Coming soon
These features are planned for future releases.
Redacted responses
redact_response is enabled, DispatchQ stores the status code and duration but discards the response body. Useful when your webhook returns sensitive data (PII, financial records, health data) that shouldn’t be retained.
Retention TTL
1d, 7d, 30d, 90d.
Per-account payload encryption
Encryptpayload, headers, and response_body with a per-account key. Even if the database is compromised, job data is unreadable without the account’s encryption key. Available on Team and Enterprise plans.