Skip to main content

SDK language plans

The SDK index lists install coordinates and scope per language. This page answers the two questions that land next: which escape hatch to call when a typed helper stops, and which cookbook holds the worked round trip for that loop.

Escape hatch per language

Every SDK accepts a plain path below the https://api.orbit.devotel.io/api/v1 base — never a full URL. The untyped call inherits the client-wide auth, retry, and error model, so it behaves exactly like a typed call once it returns its OrbitApiError subclass.

The four canonical server loops

Past the first send, every server integration runs the same four round trips. Each one is a numbered recipe on the Per-language recipes guide, with a cURL tab plus Python, Go, Ruby, PHP, Java, and C# — and a dart on the escape hatch where no typed helper exists:
  1. Message send + DLR webhook — send, then consume message.delivered / message.failed on your registered webhook endpoint.
  2. Batch send with a pinned-key 429 loop — one Idempotency-Key riding through the whole retry loop, honor Retry-After, never double-send a row.
  3. OTP round trip — verify/send then verify/check; a wrong guess returns valid: false, never an exception.
  4. Usage read — GET /analytics/messages paginated by splitting the date window, bucketed with group_by.
Each recipe names the sub-cookbook it draws from: the operations cookbook for send/batch/analytics, the contact lifecycle cookbook for the contact side of the loop, or the recipes hub root for pre-send screens like 10DLC posture.

Client-side loops (mobile + browser SDKs)

The client SDKs — Swift, Android (Kotlin), Flutter, React Native, Web — run a different loop with a publishable key (dv_live_pk_…): register a push device token (from your backend), connect the chat client with a 429-aware send loop, and resolve a personalization slot. Those are numbered recipes 5–7 on Per-language recipes. Their escape hatch is not a raw request — it is the per-call idempotencyKey parameter every send method accepts, which dedupes your own retry loop the same way the server-side key does.

Why the second-tier SDK pages have no typed helper today

Go, Ruby, PHP, Java, C#, and Swift (plus Android, Flutter, React Native on the client side) ship source-only — vendored from the monorepo, not published to a package registry. They wrap the eight core resources (messaging, voice, contacts, campaigns, verify, webhooks) with typed methods, but batch sends and analytics reads intentionally stay at the escape hatch until the first registry publish. The SDK index tracks the status per language; the vendoring walkthrough for Java and C# is at SDK index — vendoring.
When a typed helper for batch or analytics lands in your language, the recipes above move from the escape-hatch column to the typed column without changing shape — the escape hatch call and the eventual typed call share the same round trip.