Analytics API
Analytics endpoints exposed by the Devotel CPaaS API Base path:/api/v1
Endpoint count: 27
Messaging cost analytics with time-series and channel breakdown
GET /api/v1/analytics/costsany
Inclusive start of the reporting window (ISO-8601 date or datetime). Defaults to the last 30 days when omitted; the range may not exceed the platform lookback cap.
any
Inclusive end of the reporting window (ISO-8601 date or datetime). A single-day range (start_date === end_date) is accepted.
any
Alternative rolling lookback in whole days (bounded by the lookback cap). Mutually exclusive with an explicit start/end range.
any
Optional single-channel filter (e.g. sms, whatsapp, email).
any
Time-series bucket granularity.
Per-channel deliverability totals, trend and failure diagnostics
GET /api/v1/analytics/deliverabilityany
required
Channel to report on. The dashboard renders one panel per channel tab.
any
Rolling lookback window.
any
Time-series bucket size. Defaults to hour for the 24h window, day otherwise.
Top carrier rejection codes for a funnel drop-off step
GET /api/v1/analytics/funnel/{step}/drop-reasonssent step (sent-but-never-delivered) is populated today; the other steps are reserved and return an empty reasons array. Read-only; degrades to an empty reasons list (still 200) during a transient database blip.
any
required
Funnel stage to explain.
sent returns rejection codes for messages that were sent but never delivered; other steps are reserved and return an empty list.any
Inclusive start of the reporting window (ISO-8601 date or datetime). Defaults to the last 30 days when omitted.
any
Inclusive end of the reporting window (ISO-8601 date or datetime).
any
Alternative rolling lookback in whole days. Mutually exclusive with an explicit start/end range.
any
Optional single-channel filter (e.g. sms, whatsapp, email).
any
Maximum number of error codes to return.
List conversion goals
GET /api/v1/analytics/goals/any
Maximum number of goals to return.
any
Number of goals to skip, for pagination.
Get a conversion goal
GET /api/v1/analytics/goals/{id}any
required
Goal id.
List a goal’s recorded conversions
GET /api/v1/analytics/goals/{id}/conversionsany
required
Goal id.
any
Maximum number of conversions to return, newest first.
Get conversion stats for a goal
GET /api/v1/analytics/goals/{id}/statswindow_days to widen or narrow the reporting window.
any
required
Goal id.
any
Lookback window in days over which conversions are aggregated.
Cross-channel customer-journey path (Sankey) analytics
GET /api/v1/analytics/journey-pathsnodes (a channel occupying an ordered stage), links (stage-to-stage transitions with a journey count), stages (per-stage reached/continued/dropped/drop_off_rate), and top_paths (the most-walked full channel sequences with their share), alongside total_journeys, total_touchpoints, channels, and the echoed window/entry_channel/current_since. Query params: window (24h|7d|30d|90d, default 30d), entry_channel (keep only journeys whose first touchpoint was this channel), max_stages (2-10, default 6), min_journeys (prune links carried by fewer journeys, default 1). Restricted to owner/admin/developer/viewer; read-only, rate-limited, 60s cached.
Aggregate message delivery metrics with time-series
GET /api/v1/analytics/messagesany
Inclusive start of the reporting window (ISO-8601 date or datetime). Defaults to the last 30 days when omitted; the range may not exceed the platform lookback cap.
any
Inclusive end of the reporting window (ISO-8601 date or datetime). A single-day range (start_date === end_date) is accepted.
any
Alternative rolling lookback in whole days (bounded by the lookback cap). Mutually exclusive with an explicit start/end range.
any
Optional single-channel filter (e.g. sms, whatsapp, email, rcs, viber, telegram).
any
Optional message-status filter (e.g. delivered, failed).
any
Optional filter to a single campaign’s messages.
any
Time-series bucket granularity.
any
Optional WhatsApp multi-WABA scope — narrows the time-series to outbound rows stamped with this sending phone_number_id.
Message volume and delivery by channel
GET /api/v1/analytics/messages/by-channelany
Inclusive start of the reporting window (ISO-8601 date, e.g. 2026-07-01). Defaults to the tenant’s standard lookback when omitted; the range may not exceed the platform lookback cap.
any
Inclusive end of the reporting window (ISO-8601 date). A single-day range (start_date === end_date) is accepted.
any
Alternative rolling lookback in whole days (bounded by the lookback cap). Mutually exclusive with an explicit start/end range.
any
Optional WhatsApp multi-WABA scope — narrows the breakdown to outbound rows stamped with this sending phone_number_id. Ignored by org-wide callers.
Message volume and delivery by destination country
GET /api/v1/analytics/messages/by-countryany
Inclusive start of the reporting window (ISO-8601 date, e.g. 2026-07-01). Defaults to the tenant’s standard lookback when omitted; the range may not exceed the platform lookback cap.
any
Inclusive end of the reporting window (ISO-8601 date). A single-day range (start_date === end_date) is accepted.
any
Alternative rolling lookback in whole days (bounded by the lookback cap). Mutually exclusive with an explicit start/end range.
any
Optional single-channel filter (e.g. sms, whatsapp, email).
Failed-message breakdown by error code
GET /api/v1/analytics/messages/errorsany
Inclusive start of the reporting window (ISO-8601 date, e.g. 2026-07-01). Defaults to the tenant’s standard lookback when omitted; the range may not exceed the platform lookback cap.
any
Inclusive end of the reporting window (ISO-8601 date). A single-day range (start_date === end_date) is accepted.
any
Alternative rolling lookback in whole days (bounded by the lookback cap). Mutually exclusive with an explicit start/end range.
any
Optional single-channel filter (e.g. sms, whatsapp, email).
Carrier, country and error-code delivery histograms
GET /api/v1/analytics/messaging-insightsany
Messaging channel to analyse. Restricted to channels that carry MCCMNC + error_code.
any
Rolling lookback window.
any
Filter to a single carrier/provider by name.
any
Filter to a single ISO-3166-1 alpha-2 country code.
any
Filter to a single raw provider error_code.
Per-MNO delivery truth with silent-drop detection
GET /api/v1/analytics/per-mno-deliveryany
required
Channel to analyse. Restricted to channels with first-class MNO data.
any
Rolling lookback window.
any
Delivery-rate floor (percent). MNOs below this may be flagged. Defaults to 92.
any
Silent-drop detection window in hours. Defaults to 4.
any
Minimum terminal-message sample before an MNO can be flagged. Defaults to 50.
List scheduled analytics reports
GET /api/v1/analytics/scheduled-reportsany
Opaque nextCursor returned by the previous page; a missing or malformed cursor degrades to the first page.
any
Page size, bounded to 1–200.
Conversation sentiment roll-up analytics
GET /api/v1/analytics/sentimentany
Rolling lookback window.
any
Optional single-channel filter (e.g. chat, voice, email, whatsapp).
any
Optional detected-conversation-language filter (ISO 639-1, e.g. en, es); ‘unknown’ selects messages with no detected language.
Telegram bot delivery KPIs
GET /api/v1/analytics/telegramany
Inclusive start of the reporting window (ISO-8601 date, e.g. 2026-07-01). Defaults to the tenant’s standard lookback when omitted; the range may not exceed the platform lookback cap.
any
Inclusive end of the reporting window (ISO-8601 date). A single-day range (start_date === end_date) is accepted.
any
Alternative rolling lookback in whole days (bounded by the lookback cap). Mutually exclusive with an explicit start/end range.
Record a conversion via the tracking pixel
GET /g/{goalId}/{contactId}.gifsig) and bound to goalId, contactId and the tenant schema, so a third party can neither forge a conversion nor replay a signature into a different tenant’s goal. The endpoint always returns the GIF with a 200 — even when the signature is missing or invalid — so the host page never shows a broken image.
string
required
The goal the conversion is credited to.
string
required
The contact the conversion is attributed to.
string
required
HMAC-SHA256 signature binding
goalId, contactId and the tenant schema. Minted by Orbit when the pixel URL is generated.string
required
The tenant schema the goal belongs to; verified against the signature so a swapped value cannot cross-tenant-write.
Record an email open via the tracking pixel
GET /p/{sig}.gifsig) — which binds the message id, tenant, and send timestamp — and records an email-open engagement event. The endpoint always returns the GIF with a 200, even when the signature is missing or invalid, so a mail client never shows a broken image.
string
required
HMAC-SHA256 signature binding the message id, tenant, and send timestamp. Minted by Orbit when the email is rendered.
Create a conversion goal
POST /api/v1/analytics/goals/type (pixel_fire, webhook_hit, manual, tag_added, custom_event), an attribution model and a lookback window; pixel_fire goals return a signed pixel URL hint you can embed on a thank-you page. Requires the owner, admin or developer role. Returns the created goal (201).
Record a conversion for a goal
POST /api/v1/analytics/goals/{id}/recordAuthorization: HMAC <contactId>:<sig> header (sig = HMAC-SHA256 of goalId:contactId with the tenant API secret); an unsigned external contact_id is never accepted. Returns the recorded conversion rows (201).
any
required
Goal id.
Create a scheduled analytics report
POST /api/v1/analytics/scheduled-reportsany
1–50 unique recipient emails, as an array or a comma-separated string.
Send a scheduled report immediately
POST /api/v1/analytics/scheduled-reports/{id}/send-nowstring
required
Scheduled-report id to send now.
Update a conversion goal
PATCH /api/v1/analytics/goals/{id}any
required
Goal id.
Update a scheduled analytics report
PATCH /api/v1/analytics/scheduled-reports/{id}string
required
Scheduled-report id to update.
any
—
Delete a conversion goal
DELETE /api/v1/analytics/goals/{id}any
required
Goal id.
Delete a scheduled analytics report
DELETE /api/v1/analytics/scheduled-reports/{id}string
required
Scheduled-report id to delete.