Skip to main content

Base URL

All endpoints are relative to this base URL.

Response Format

All responses use a consistent envelope format.
/api/check is the only public endpoint that returns a minimal { "success": true } response on success. Lead, stats, and ad spend endpoints use the full envelope shown below.

Success Response

Error Response

Error Codes

CodeDescription
UNAUTHORIZEDMissing or invalid API key
VALIDATION_ERRORInvalid request parameters or body
NOT_FOUNDResource not found
FORBIDDENAction is not allowed
CONFLICTResource conflict (e.g., duplicates)
INVALID_DATEInvalid date format
INVALID_FILTERInvalid filter parameter
INTERNAL_ERRORServer error

Pagination

All list endpoints support pagination using limit and page parameters.
ParameterTypeDefaultMaxDescription
limitnumber50100 (500 for ad-spend)Results per page
pagenumber1-Page number (1-indexed)

Pagination Response

Iterating Through Pages

Rate Limiting

Currently, there are no rate limits on the API. This may change in the future.

Compatibility

The current API keeps the old Octanist lead API behavior while adding pixel session support. Existing integrations can keep using:
  • POST /api/leads with lead fields, click IDs, UTM fields, consent fields, website, and path
  • PATCH /api/leads with changedTo as the legacy alias for status, and email or phone as either a string or an ordered array of fallback identifiers
  • GET /api/leads?updated_after=... as the legacy alias for updatedAt[gte]
  • sort=updated_at:desc as the legacy alias for sort=updatedAt:desc
New integrations can also send sessionId to POST /api/leads. This links a backend-created lead to an existing Octanist pixel session.

Changelog

VersionDateChanges
2.2.02026-07Added ordered fallback email and phone identifiers to PATCH /api/leads
2.1.02026-06Added pixel session attribution and kept legacy lead API compatibility
1.1.02026-03Added POST /api/leads and PATCH /api/leads docs, fixed source values
1.0.02024-01Initial API release