API Reference
The Cliqtel REST API lets you programmatically search and manage DID numbers, and pull usage records, call detail records, billing and balance data for your own reporting and account-management workflows. All responses are JSON. TLS is required on every request.
https://cliqtel.com/api
· Authenticate with Authorization: Bearer YOUR_API_KEY
· Get your API key →
Every request carries a Bearer token in the Authorization header. Create and revoke keys under
Portal → API Keys. The full token is shown once at creation — store it securely. Tokens look like 17|aBcD… (an id, a pipe, then the secret); send the whole string.
Keys are least-privilege. The portal offers two presets — Read-only (every *:read scope, ideal for reporting/BI integrations) and Full access (unrestricted). A key may only call endpoints covered by its scopes; anything else returns 403 insufficient_scope. The live catalog is available at GET /api/v1/portal/api-keys/scopes.
Successful responses use 2xx with a JSON body. Errors use a conventional HTTP status and a JSON envelope with an error and human-readable message. List endpoints are paginated in Laravel's standard shape (data, current_page, last_page, total).
Reporting and account endpoints are rate-limited per authenticated user. The messaging endpoints (/v1/sms, /v1/whatsapp) allow up to 60 requests/minute. Exceeding a limit returns 429 with a Retry-After header. Design pollers to back off rather than hammer; for large exports prefer /usage/export over paging /usage/calls.
Returns available DID numbers matching the criteria, priced at the live retail rate. This endpoint is public (no auth required).
| Parameter | Type | Required | Description |
|---|---|---|---|
| country | string | required | ISO 3166-1 alpha-2 country code (e.g. GB, NL) |
| type | string | optional | local, toll_free, mobile, or national |
Manage the numbers on your account. List/view need numbers:read; the mutations need numbers:write.
Headline usage and balance figures for a date window (defaults to the current month). Accepts from and to (YYYY-MM-DD).
Itemised, billed call records. Filter with from, to (YYYY-MM-DD), country (dialling code), and per_page. Returns Laravel pagination.
Pre-aggregated views over the same window, all requiring usage:read:
Streams the full call history for the window as a file. Use format = csv (default), xlsx, or pdf, plus from / to. Best path for bulk reporting — one request instead of paging.
All require billing:read.
Paginated wallet ledger: top-ups, call/message debits, refunds, each with amount, balance_after, type, and reference_type.
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string | required | One of your SMS-enabled numbers (E.164) |
| to | string | required | Recipient in E.164 |
| body | string | required | Message text |
Paginated inbound + outbound SMS history. GET /v1/sms/messages/{id} returns a single message; GET /v1/sms/numbers lists your SMS-capable numbers.
POST /v1/whatsapp/messages (whatsapp:write) sends a template or free-text message; GET /v1/whatsapp/messages and /v1/whatsapp/templates (whatsapp:read) list history and approved templates. The 24-hour customer-service window applies to free-text replies.
- Outbound webhooks — push notifications for
number.provisioned,payment.succeeded, etc. Today, poll the reporting endpoints above. - Official SDKs (Node.js, Python) — the API is plain REST + Bearer auth, so any HTTP client works in the meantime.
- Number ordering via API — purchase/provisioning is currently completed in the portal checkout.