Skip to content

Demand API

v1

The 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.

GET /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.
Request
curl "https://api.oxiae.com/api/demand/leads?status=delivered&per_page=25" \
  -H "Authorization: Bearer oxa_3f9a2b7c8d1e4f60a1b2c3d4"
Response · 200 OK
{
  "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 }
}
GET /api/demand/leads/{id}

Lead detail

Returns the full detail of a single delivered lead. Outside your own deliveries you get a 404.

Request
curl https://api.oxiae.com/api/demand/leads/5031 \
  -H "Authorization: Bearer oxa_3f9a2b7c8d1e4f60a1b2c3d4"

Accept & reject

POST /api/demand/leads/{id}/accept

Confirms the lead. Idempotent: an already accepted lead stays accepted.

Request
curl https://api.oxiae.com/api/demand/leads/5031/accept \
  -X POST \
  -H "Authorization: Bearer oxa_3f9a2b7c8d1e4f60a1b2c3d4"
Response · 200 OK
{ "data": { "id": 5031, "status": "accepted" } }
POST /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.

Request
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" }'
Response · 200 OK
{ "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.

Example payload
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).

Ready to connect?

Book a demo or request API access.