← Spec Hub | Category: CRM & SaaS
Technical guide for receiving and processing automated Notion API ➔ Supabase Webhook Pipeline Specification event notifications. Follow these security guidelines to prevent unauthorized webhook calls.
Supported Events: contact.creation deal.stage_change company.updated ticket.created
Security validation specs for Notion API ➔ Supabase Webhook Pipeline Specification endpoints:
X-NotionAPI➔SupabaseWebhookPipelineSpecification-Signature: t=1789764056,v1=12ec10dc5b30ccf1b4969876
const crypto = require('crypto');
const expected = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const isValid = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
import hmac, hashlib
expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
is_valid = hmac.compare_digest(expected, incoming_sig)
{
"id": "evt_notion-to-supabase.html_87208",
"event": "contact.creation",
"created_at": 1789764056,
"data": {
"resource_id": "res_360",
"status": "active"
}
}
curl -X POST https://your-domain.com/webhook/notion-to-supabase.html \
-H "Content-Type: application/json" \
-H "X-NotionAPI➔SupabaseWebhookPipelineSpecification-Signature: t=1789764056,v1=12ec10dc5b30ccf1b4969876" \
-d '{"id": "evt_notion-to-supabase.html_87208", "event": "contact.creation", "created_at": 1789764056, "data": {"resource_id": "res_360", "status": "active"}}'
| Status Code | Status Meaning | Integration Action |
|---|---|---|
200 OK | Success | Event payload validated and queued. |
400 Bad Request | Malformed Payload | Check payload structure and JSON formatting. |
401 Unauthorized | Signature Mismatch | Verify secret key and digest computation. |
500 Error | Server Error | Triggers provider automated retry backoff. |
Always process incoming events asynchronously using a message queue. Never perform long-running DB queries or external API calls synchronously within the HTTP response handler.
Store processed event IDs in an atomic storage like Redis with a set expiration. If an incoming ID exists, acknowledge with 200 OK immediately without re-triggering logic.
A 429 status indicates your endpoint is being rate limited. Implement dynamic throttling or increase consumer worker threads in your queue worker.
Your endpoint must return an HTTP 2xx response within 2000ms. Offload heavy processing (email, DB writes) to an asynchronous task queue.