Dequire Webhooks
Dequire webhooks allow your system to receive real-time push notifications whenever verified offline merchant leads are extracted during geographic scanning tasks. Instead of repeatedly polling our database, Dequire delivers structured HTTP POST payloads directly to your designated HTTPS webhook endpoint.
Instant push notifications immediately after lead verification.
Authenticated via your private secret key on every request.
3-attempt exponential backoff on transient network drops.
Quickstart Guide
Set up your webhook listener and receive your first lead payload in 3 steps.
Prerequisites
- An active Dequire account
- A publicly accessible HTTPS Webhook URL (your CRM, server endpoint, or webhook.site for testing)
- A secret Webhook API Key (a token/password you generate on your server and paste into Dequire Settings for authentication)
Configuration Steps
Step 1: Navigate to Settings and scroll to API & Webhook Configuration.
Step 2: Enter your Webhook URL and paste your secret Webhook API Key.
Step 3: Click Save Settings. When a scan task discovers verified leads, Dequire will dispatch HTTP POST requests with your key in the Authorization: Bearer <key> header.
Auth & Headers
Every request dispatched by Dequire includes the following HTTP headers:
| Header | Description |
|---|---|
| Authorization | Sends Bearer <your_pasted_api_key> (the secret key you entered in Settings) |
| Content-Type | application/json |
| X-Dequire-Event | Event type, e.g. lead.extracted |
| X-Dequire-Timestamp | UTC ISO timestamp |
| X-Dequire-Event-Id | Unique event ID for deduplication |
Webhook Payload
{
"event": "lead.extracted",
"event_id": "evt_01J8R9Z2M4K8T7V1W3P6Q5X9YB",
"created_at": "2026-08-24T08:30:15.124Z",
"source": "dequire_geo_engine",
"data": {
"task": {
"id": "task_a1b2c3d4-e5f6-7890-1234-56789abcdef0",
"name": "Bandra West Commercial Scan",
"region": "Mumbai West Zone",
"category": "Food & Beverage"
},
"leads": [
{
"business_name": "Royal Bakers & Confectioners",
"category": "Food & Beverage",
"sub_category": "Bakery & Cafe",
"contact": {
"phone": "+919820123456",
"is_whatsapp_ready": true
},
"location": {
"address": "Shop 4, Hill Road, Bandra West, Mumbai",
"city": "Mumbai",
"lat": 19.055842,
"lng": 72.829514
},
"verification": {
"confidence_score": 98,
"verified_status": "verified",
"storefront_verified": true,
"is_whatsapp_verified": true,
"gst_number": "27AAACR1234A1Z5",
"gst_status": "Active",
"gst_legal_name": "ROYAL FOODS & CONFECTIONERY PVT LTD",
"gst_trade_name": "Royal Bakers"
},
"extracted_at": "2026-08-24T08:30:12.000Z"
}
]
}
}Delivery & Retries
• 3 Retries: If your server returns 5xx or network drops, Dequire retries with exponential backoff (1s → 3s → 9s).
• 8s Timeout: Each request has an 8-second timeout window.
• 4xx Handling: If your server returns 4xx (e.g. 401 Unauthorized), retries stop immediately.
• Expected Response: Your endpoint should respond with HTTP 200 OK.
Sample Receiver Handler
// app/api/webhooks/dequire/route.ts
import { NextRequest, NextResponse } from "next/server";
export async function POST(req: NextRequest) {
const authHeader = req.headers.get("authorization");
const expectedKey = process.env.DEQUIRE_WEBHOOK_SECRET;
// 1. Verify Secret Key
if (!authHeader || authHeader !== `Bearer ${expectedKey}`) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
// 2. Parse & Process Leads
const { data } = await req.json();
for (const lead of data.leads) {
console.log("Merchant:", lead.business_name, "Phone:", lead.contact.phone);
}
return NextResponse.json({ success: true, count: data.leads.length });
}REST API Reference
Coming soonA programmatic REST API for creating tasks, querying leads, and managing webhooks is currently in development. API keys and documentation will be accessible directly in your Settings upon general release.