Demand API
v1The integration that lets buyers fetch, accept and reject delivered leads within your OXIAE platform.
https://api.oxiae.com/api Introduction
The Demand API is intended for buyers who receive and process delivered leads, the counterpart to the Supply API that submits them. You fetch your delivered leads, view their details, and accept or dispute them. Want to be informed in real time about every delivery? Then enable a signed webhook. You only see leads that have been delivered to your organization via matching & routing. All calls run over HTTPS and return JSON.
Authentication
The Demand API uses API keys. Send your key as a Bearer token in the Authorization header (or via X-Api-Key). You manage keys under Settings → API keys. Each key is tied to a single organization and only grants access to the leads delivered to that organization.
/api/demand/leads Fetch leads
Returns a paginated list of the leads delivered to you, with price, status and the lead details.
Query parameters
statusenum- Filter: delivered, accepted or rejected. All by default.
per_pageinteger- Number per page (default 25, max 100).
pageinteger- Page number.
curl "https://api.oxiae.com/api/demand/leads?status=delivered&per_page=25" \
-H "Authorization: Bearer oxa_3f9a2b7c8d1e4f60a1b2c3d4" {
"data": [
{
"id": 5031,
"lead_id": 21503,
"status": "accepted",
"price": 82.50,
"assigned_at": "2026-06-10T16:18:03+00:00",
"lead": {
"first_name": "Yara",
"last_name": "de Groot",
"email": "yara@example.com",
"phone": "+31612345678",
"postcode": "4503BH",
"category": "Employment law"
}
}
],
"meta": { "current_page": 1, "per_page": 25, "last_page": 17, "total": 408 }
} /api/demand/leads/{id} Lead detail
Returns the full detail of a single delivered lead. Outside your own deliveries you get a 404.
curl https://api.oxiae.com/api/demand/leads/5031 \
-H "Authorization: Bearer oxa_3f9a2b7c8d1e4f60a1b2c3d4" Accept & reject
/api/demand/leads/{id}/accept Confirms the lead. Idempotent: an already accepted lead stays accepted.
curl https://api.oxiae.com/api/demand/leads/5031/accept \
-X POST \
-H "Authorization: Bearer oxa_3f9a2b7c8d1e4f60a1b2c3d4" { "data": { "id": 5031, "status": "accepted" } } /api/demand/leads/{id}/reject Rejects the lead and opens a dispute for review and possible settlement. Requires a reason; an already rejected lead returns a 409.
curl https://api.oxiae.com/api/demand/leads/5031/reject \
-X POST \
-H "Authorization: Bearer oxa_3f9a2b7c8d1e4f60a1b2c3d4" \
-H "Content-Type: application/json" \
-d '{ "reason": "Phone unreachable", "reason_code": "unreachable" }' { "data": { "id": 5031, "status": "rejected" } } Webhooks
Instead of polling, you can set up a webhook endpoint. On every delivery the platform sends a lead.delivered event to your URL. Each message is signed with HMAC-SHA256 in the X-Signature header; verify it with your webhook secret before processing the message. See API & webhooks for how real-time integrations fit together. You manage endpoints under Settings → Webhooks.
POST https://your-domain.com/webhooks/oxiae
X-Signature: sha256=9f86d081884c7d659a2feaa0c55ad015...
{
"event": "lead.delivered",
"data": {
"id": 5044,
"lead_id": 21567,
"price": 82.50,
"assigned_at": "2026-07-07T09:12:44+00:00",
"lead": { "first_name": "Sanne", "last_name": "de Vries", "category": "Employment law" }
}
} Error handling
The API uses standard HTTP status codes.
401- Missing or invalid API key.
404- Lead not found, or not delivered to your organization.
409- Lead has already been rejected, or a dispute is already in progress.
422- Validation error, for example a missing reason when rejecting.
429- Rate limit reached (120 per minute by default).