Skip to main content
FAQ

Frequently asked questions

The questions Devotel Orbit customers ask most — channels, hosting, pay-as-you-go pricing, E.164 numbers, stuck queued sends, WhatsApp migration stalls, agent presence and dispatch, Verify/OTP, IP warmup, webhook signatures, the one-provider-vs-multiple-vendors trade, compliance posture, and support — grouped in one FAQPage surface.

General

What is Devotel Orbit?

Devotel Orbit is the Agentic Customer Communications Cloud — one platform spanning nine aaS pillars (CPaaS, CCaaS, UCaaS, AIaaS, NaaS, CSPaaS, RTC PaaS, CXaaS, CDPaaS) with APIs for SMS, WhatsApp, RCS, Viber, Email, and Voice, plus AI-native features like autonomous agents, visual flow builders, and intelligent routing. Build with the CPaaS APIs or run a finished internal phone system on the same tenant.

Read the full answer in the docs

Which channels does Devotel Orbit support?

SMS (global coverage in 190+ countries), WhatsApp Business API (template and session messaging), RCS (rich messaging on Android devices), Viber, Email (transactional and marketing), and Voice (outbound and inbound calls, SIP trunking, IVR, and AI voice agents) — six channels on one bill.

Read the full answer in the docs

Where is Devotel Orbit hosted?

On Google Cloud Platform (GKE Autopilot) in the europe-west1 region (Belgium), with data stored in Cloud SQL PostgreSQL 16 with at-rest encryption.

Read the full answer in the docs

Pricing & prepaid credits

What pricing model does Devotel Orbit use?

Pay-as-you-go with no monthly subscription tiers: pre-load credits and outbound usage (messages, voice minutes, AI agent invocations) deducts at per-channel rates. There are no Starter, Growth, or Business subscription plans — only PAYG and Enterprise (negotiated rate card).

Read the full answer in the docs

How do prepaid credits work?

Credits are purchased in advance through the dashboard or Stripe Checkout and consumed for messages, voice minutes, and agent invocations. Credits never expire. Enable auto-top-up in Settings → Billing → Auto top-up to prevent service interruption.

Read the full answer in the docs

Is there a free tier?

No free tier and no automatic trial credit: every account is pay-as-you-go — after KYC approval, fund the balance with a top-up before sending live traffic. The sandbox environment is free to test with before going live.

Read the full answer in the docs

One provider or multiple vendors

Is one provider always the better choice for a multi-channel communications stack?

No — one provider wins on coordination (a shared API client, unified support, one procurement approval and one pay-as-you-go bill), while splitting genuinely wins when a per-channel capability island exists (a niche codec, a region a generalist cannot serve, a deliverability hedge) or when concentrated risk outweighs the orchestration value. Weigh the trade: per-channel API complexity against coordination overhead in SLAs and billing consolidation.

When should a buyer deliberately split across vendors?

When a per-channel capability island exists that no unified provider matches — a deliverability hedge, a region only one vendor serves — or when a specialization outweighs the consolidation overhead the one-provider mode removes. Refusing to weigh that counterexample is the dishonest part of most single-provider content; the split is the right move for a genuinely one-channel requirement or a deliberately-diversified mission-critical layer.

Read the full decision matrix on the blog

Number formats

What phone number format does Devotel Orbit use?

All phone numbers are in E.164 format — the plus sign, country code, then the subscriber number, e.g. +14155552671 (US), +447911123456 (UK).

Read the full answer in the docs

Stuck or missing sends

Why is my message stuck in queued, and when should I retry it?

queued means the message has not been handed to a sender or provider yet — the hold is on your side of the handoff, not carrier-side. The usual causes are a future send_at time (the row is scheduled, not broken), a quiet-hours or compliance send gate, an exhausted sender pool, an email warm-up cap, or provider connectivity trouble. List the stuck rows in the Delivery Log with the queued filter, clear the one hold the cause table names, and retry only after the cause is resolved — a blind retry just re-queues the same hold, while double-sending a copy duplicates once the hold clears.

Read the full cause table in the docs

Why does my WhatsApp migration or template change feel silent even though I subscribed to webhooks?

Template lifecycle events — template submitted, approved, rejected, auto-paused, and quality updates — are distinct webhook event types: a subscription scoped to message.* events never notifies on a template review or a post-migration quality change, so add them explicitly (or subscribe to all events). When an event does fire but your handler stays quiet, the duplicate-delivery pattern is the next check — deliveries are at-least-once, so dedupe on the stable event id.

Read the full answer in the docs

What do I send support when a WhatsApp migration stalls?

Four things: your WABA id; the stage it froze on — release from the source BSP, partner assignment, Embedded Sign-up, template sync, or webhooks; the exact error text verbatim with one attempt timestamp; and the source BSP name plus whether their release is confirmed. That payload routes the case straight to the right lane — Meta escalation versus connection repair — without a back-and-forth.

Read the full migration stall walkthrough in the docs

Sender identity & routing

Why did my send return 422 SENDER_POOL_EMPTY?

The sender pool resolved fine but its member list has no senders in it — you routed traffic through an empty pool. Add at least one phone number, short code, or alphanumeric sender ID to the pool before sending.

Read the sender pools guide in the docs

Why does a US recipient see a phone number instead of my alphanumeric sender ID?

US and Canada carriers reject the shared alphanumeric sender, so the implicit default for a +1 recipient swaps to a platform phone number. Pass an explicit sender or a sender pool to pin the sender identity — the fallback chain and the per-country rules are in the docs.

Read the sender resolution concept in the docs

What is strict sender-ID mode?

Strict sender-ID mode is an opt-in tenant control that rejects a non-conforming alphanumeric sender before you send it, instead of letting the carrier reject it later. Default is off (permissive): a violating sender is accepted with a non-blocking deliverability advisory on the message. Once enabled — from the dashboard sender-ID settings — every outbound alphanumeric sender is checked against the destination country's length, prefix, and character rules, and a violation returns 422 SENDER_INVALID_FOR_DESTINATION before any credits are deducted.

Read the compliance posture in the docs

Agent routing & dispatch

Where do I see why a call never reached an agent?

Check the agent's presence state per queue membership. Presence has five states — available, busy, wrapup, paused, offline — and dispatch rings only memberships whose worst state across every queue is available, so one leftover wrap-up on a second queue blocks the ring. The softphone away toggle maps to paused at storage, so an on-shift-looking agent can be parked by a paused membership; the attendant console tiles the live grid per queue.

Read the presence lifecycle in the docs

Why won't a call route to my agent even though their status looks available?

Dispatch eligibility is a hard gate: the dispatcher rings an agent only when their queue-membership state is available, they are a member of the queue, and their skills cover it. An agent who looks available on one queue can still be skipped — the dispatcher reads the worst state across every queue membership, so one leftover busy or wrap-up elsewhere blocks the ring, and a presence toggle mapped from the softphone's four-state vocabulary can invisibly park an agent the dashboard shows on-shift. Check the agent's state per queue before blaming routing.

Read the full answer in the docs

Verify / OTP channels

Which channels deliver an OTP, and which are factor channels?

Delivery channels — sms, whatsapp, email, voice, viber, telegram, rcs, and flashcall — carry a code to the recipient. Factor channels — totp, push, backup_code, sna, silent, and magic_link — validate possession of a secret or device with no code delivered, and are enrolled and verified through their own /verify/factors/*, /verify/push/*, and /verify/passkey/* endpoints.

Read the full answer in the docs

What does a 429 on Verify mean?

A 429 with RATE_LIMIT_EXCEEDED means one of three rate-limit layers tripped: the per-API-key limit, the org-wide per-recipient limit, or the per-recipient brute-force lockout that stops code-guessing attacks. Honour the Retry-After header when present and retry instead of hammering the endpoint; VERIFY_RESEND_COOLDOWN (also 429) is the per-recipient OTP resend cooldown tripping on a re-send, distinct from the org-wide layers.

Read the full answer in the docs

How do code expiry and max attempts work?

A direct send expires after 600 seconds (10 minutes) by default; set expirySeconds on a verify profile (up to a 60-minute ceiling) to change it. max_attempts (1–10, default 3) caps how many /verify/check calls can guess a code before the verification fails and needs a fresh send; a /check that arrives after expiry returns 410 EXPIRED_TOKEN and a wrong code returns 422 with the remaining attempts.

Read the full answer in the docs

AI agents, squads & ROI

How do squads of agents coordinate handoffs?

A squad is a multi-agent unit in which one classifier agent routes each inbound conversation turn to the right specialist member. Each member carries an agent id, one to ten intent labels, and a description the classifier uses to disambiguate; a fallback agent catches the turn when no member matches. Squads are managed in the dashboard at Agents → Squads, with utilization visible from analytics through live monitoring.

Read the squads guide in the docs

How does per-agent ROI attribution work?

Agent ROI puts each agent's model-call cost — the LLM token spend recorded for its conversations in a window — against the attributed revenue of the outcomes it resolved, and reports the difference as a margin. Attributed revenue is your own value-per-outcome assumption priced onto resolved conversations, not billed revenue, so the numbers are only as meaningful as the estimate you set. Read the per-agent cost, revenue, and margin in the dashboard at Insights → Agent ROI, or over the Insights API.

Read the ROI guide in the docs

What does the squads classifier reject?

Loop shapes: squad members of the same squad cannot be chained as handoff targets, so every chain of handoff targets resolves to a terminal agent. If the API detects a cycle it rejects the create or update with a 422, keeping the routing loop acyclic so a conversation never bounces between members indefinitely.

Read the squads guide in the docs

Customer data & identity (CDP)

What is a golden record in the CDP?

The golden record is the merged best-value profile for one contact or account: every trait that survives the identity rules' recency-based merge becomes the single authoritative entry. New identifiers — a phone, an email, an anonymous id that later resolves — keep folding into the same record, so scoring, segmentation, and reporting always read one clean row instead of duplicate fragments.

Read the identity rules guide in the docs

How does identity resolution stitch anonymous events to a known person?

Two seams: a real-time bind calls POST /sdk/identify with the anonymous id plus a phone or email as soon as the site learns who the visitor is, backfilling every pre-identify browser event onto the resolved contact; or an operator declares the link later with POST /api/v1/cdp/identity-stitch when a backend job discovers the mapping. Re-calling the platform-side bind is a no-op once the contact exists, so the integration is idempotent.

Read the stitching guide in the docs

How do B2B accounts work in the CDP?

Accounts are first-class golden records keyed by an explicit group_id, built by the same recency survivorship as contacts. You relate a member contact to an account, a parent account, or both by sending the relationship trait on the same call that identifies the account; the golden record aggregates group traits, and account-scoring reads the hierarchy to rank intent and churn at the account level.

Read the accounts concept in the docs

Quiet hours & send gating

How do quiet-hours gates decide whether a send goes out right now?

Two tenant-owned knobs: per-channel organization gates you toggle per channel, and a campaign fallback window that applies when the campaign itself carries no explicit window. Resolution order for a campaign send is the campaign row's own window, then the org fallback, then the platform default 21:00 → 09:00 recipient-local.

Read the quiet-hours runbook in the docs

What happens to a message queued during quiet hours?

It holds, it is not lost. SMS-class sends wait for the recipient-local window (the TCPA posture is 08:00–21:00) and dispatch automatically the moment it opens; email is exempt from the TCPA window. Numbers with an unknown timezone fail open by default, so attach a timezone to contacts when you want strict hold behavior.

Read the quiet-hours runbook in the docs

Usage budgets & spend alerts

How do I set a usage budget on an API key?

Open Settings → API keys in the dashboard, expand the key's analytic drawer, and use the Usage budget card: set a monthly request ceiling for that key and Orbit grades the key's live 30-day usage against it — a caution badge once consumption crosses 80% of the ceiling, a budget-exceeded badge at 100%. Budgets are stored in your browser, not on the API, so it is an early-warning tripwire; the hard quota in the usage-limits guide is what blocks traffic.

Read the usage-budgets guide in the docs

IP & email warmup

What does the email IP-warmup plan do automatically?

It returns a computed day-by-day ramp: the daily send caps that grow a fresh sending IP or domain from a conservative day-1 volume (default 50/day) up to the target daily volume, at a default ~50%/day growth factor. A companion status endpoint reports which ramp day the account is on, today's recommended cap, how much has already gone out, and the remaining headroom, and an enforcement endpoint turns a requested batch size into an accept/defer decision against today's live cap.

Read the full answer in the docs

What should I do while a sender or domain is still warming up?

Respect the daily cap: throttle or gate the send instead of pushing full volume, and use the warmup-enforcement endpoint as the one authoritative accept/defer decision. The same ramp principle applies to a newly provisioned long code, short code, or alphanumeric sender ID — start with a small daily cap to engaged recipients with full SPF/DKIM/DMARC in place.

Read the full answer in the docs

Webhooks & signature

How do I verify webhook signatures?

Every webhook includes an X-Orbit-Signature header (the canonical HMAC-SHA256 signature); a legacy X-Devotel-Signature header is also included for backwards compatibility. Verify either signature by computing the HMAC of the raw request body using your webhook secret.

Read the full answer in the docs

What happens if my webhook endpoint is down?

Orbit retries failed deliveries on an exponential backoff schedule: up to 9 retries with a 30-second base delay (doubling with each attempt), spanning roughly 4.3 hours end-to-end, plus up to 20% jitter on each delay. After all attempts are exhausted, the event goes to a dead letter queue, and failed deliveries are reviewable in the dashboard.

Read the full answer in the docs

How does the compliance posture work — who owns the gates, and why doesn't an enabled toggle always block?

Compliance gates are tenant-owned and open by default: you decide which controls enforce and which observe. An enabled toggle may not block yet because the control is still warming to its enforcement threshold or an external approval is pending; ops-facing controls are fail-open where a hard stop would break sends, and privacy / consent controls are fail-closed. The full posture map covers which controls fail open versus closed, which approvals carry external lead time, and the tenant-owned toggle surface.

Read the full Compliance Posture FAQ in the docs

Support, status & security report

How do I contact support?

Email support@devotel.io, use the in-app chat help widget in the dashboard, or — on Enterprise — reach the dedicated Slack channel and account manager.

Read the full answer in the docs

Where can I check service status?

status.orbit.devotel.io carries real-time platform status, incident history, and maintenance schedules.

Read the full answer in the docs

How do I report a security vulnerability?

Email security@devotel.io. Reports are answered within 24 hours and handled under responsible disclosure practices.

Read the full answer in the docs