Reviewed October 15, 2026
Start from your account’s API address
Use the API address and reference supplied in the application’s developer settings. Availability depends on deployment and account setup. Do not substitute the marketing domain for the API address. The public schema path is /public/v1/schema on that API origin; confirm it is available before building a production connection.
The examples below describe the application’s public v1 contract reviewed on October 15, 2026. They use placeholders and do not send requests from this website. If the schema is unavailable, resolve access with your account administrator before sending live traffic.
Authentication and account boundaries
Send an account API key as Authorization: Bearer followed by the key. Create the key with only the required scopes. Keep it on your server. Revoked, expired, or malformed keys return 401; insufficient scope returns 403. A key can only access its owning account.
curl --fail-with-body "$API_ORIGIN/public/v1/calls" \
-H "Authorization: Bearer $LEAD_SOURCE_API_KEY"
Read calls and record outcomes
GET /public/v1/calls requires calls.read. It returns up to 100 calls and a nextCursor; use that cursor for the next page until it is null. There is no page-size parameter. POST /public/v1/outcomes requires outcomes.write and an account-owned callId, type, and stable externalId. Repeat the same normalized data on retry; conflicting data for that reference returns 409. Recording an outcome does not transfer money.
Reports and exports
POST /public/v1/reports requires reports.read. POST /public/v1/exports requires reports.read and calls.read. Use the current ReportInput schema for filters and dimensions. Export responses contain complete matching CSV data within the service limit; narrow the reporting window when it exceeds that limit.
Rate limits and failures
The reviewed contract limits authenticated requests to 60 per key per UTC minute, plus a separate IP limit. Validation failures and idempotent retries count. Respect 429 and Retry-After; use the returned rate-limit headers. For an uncertain write, retry the same reference and unchanged data. A 503 is a temporary availability failure, not a successful operation. Keep X-Request-ID for troubleshooting without logging secrets.