Skip to main content

Documentation Index

Fetch the complete documentation index at: https://orbit-docs.devotel.io/llms.txt

Use this file to discover all available pages before exploring further.

WhatsApp Calling API

WhatsApp Business voice/video call capability management Base path: /api/v1/whatsapp Endpoint count: 3

WhatsApp Business Calling KPIs

GET /api/v1/whatsapp/calling/analytics
Returns aggregated KPIs (totals, answered, declined, missed, failed, avg duration, total cost) plus a per-day call-volume trend over a configurable window (1-365 days, default 30).
waba_id
string
phone_number_id
string
days
integer
cURL
curl -X GET "https://api.orbit.devotel.io/api/v1/whatsapp/calling/analytics" \
  -H "X-API-Key: dv_live_sk_your_key_here" 
Node.js
import { Orbit } from '@devotel/orbit-sdk'

const orbit = new Orbit({
  apiKey: process.env.ORBIT_API_KEY!,
})

const res = await fetch('https://api.orbit.devotel.io/api/v1/whatsapp/calling/analytics', {
  method: 'GET',
  headers: {
    'X-API-Key': process.env.ORBIT_API_KEY!,
  },
})
console.log(await res.json())


Python
import os, requests

headers = {"X-API-Key": os.environ["ORBIT_API_KEY"]}
r = requests.get("https://api.orbit.devotel.io/api/v1/whatsapp/calling/analytics", headers=headers)
print(r.json())
Go
package main

import (
	"bytes"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.orbit.devotel.io/api/v1/whatsapp/calling/analytics", nil)
	req.Header.Set("X-API-Key", os.Getenv("ORBIT_API_KEY"))

	http.DefaultClient.Do(req)
}
Ruby
require 'net/http'
require 'json'

uri = URI('https://api.orbit.devotel.io/api/v1/whatsapp/calling/analytics')
req = Net::HTTP::Get.new(uri)
req['X-API-Key'] = ENV['ORBIT_API_KEY']


res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
PHP
<?php
$ch = curl_init('https://api.orbit.devotel.io/api/v1/whatsapp/calling/analytics');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'X-API-Key: ' . getenv('ORBIT_API_KEY'),

]);

echo curl_exec($ch);

List WhatsApp Business Call logs

GET /api/v1/whatsapp/calling/calls
Cursor-paginated list of wa_call_logs rows. Phone columns are masked for viewer/billing roles; owner/admin/developer see raw E.164. The q search covers phone + contact_name + conversation_id columns.
status
string
CSV of statuses to include. Allowed: queued, ringing, in_progress, completed, failed, missed.
direction
string (enum: inbound|outbound)
waba_id
string
phone_number_id
string
start
string
end
string
q
string
cursor
string
limit
integer
cURL
curl -X GET "https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls" \
  -H "X-API-Key: dv_live_sk_your_key_here" 
Node.js
import { Orbit } from '@devotel/orbit-sdk'

const orbit = new Orbit({
  apiKey: process.env.ORBIT_API_KEY!,
})

const res = await fetch('https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls', {
  method: 'GET',
  headers: {
    'X-API-Key': process.env.ORBIT_API_KEY!,
  },
})
console.log(await res.json())


Python
import os, requests

headers = {"X-API-Key": os.environ["ORBIT_API_KEY"]}
r = requests.get("https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls", headers=headers)
print(r.json())
Go
package main

import (
	"bytes"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls", nil)
	req.Header.Set("X-API-Key", os.Getenv("ORBIT_API_KEY"))

	http.DefaultClient.Do(req)
}
Ruby
require 'net/http'
require 'json'

uri = URI('https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls')
req = Net::HTTP::Get.new(uri)
req['X-API-Key'] = ENV['ORBIT_API_KEY']


res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
PHP
<?php
$ch = curl_init('https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'X-API-Key: ' . getenv('ORBIT_API_KEY'),

]);

echo curl_exec($ch);

Initiate an outbound WhatsApp Business Call (Phase 5)

POST /api/v1/whatsapp/calling/calls
Initiate a WhatsApp Business outbound call. Walks pre-flight gates: connection lookup + access-token decrypt, country block-list (WA_CALLING_BLOCKED_COUNTRIES), calling-enabled flag on the WABA, and recipient call-permission grant. Permission-missing returns 422 with code WHATSAPP_CALLING_NO_PERMISSION; the dashboard surfaces a CTA to send the call-permission template first.
to
string
required
Recipient phone number (E.164, optional leading +).
from_phone_number_id
string
required
Meta phone_number_id of the sender WABA number.
conversation_id
string
biz_opaque_callback_data
string
Echoed back on every webhook event for the call (correlation handle).
sdp_offer
string
SDP offer for browser-side WebRTC. Omit for server-bridged calls.
cURL
curl -X POST "https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls" \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "string",
  "from_phone_number_id": "string"
}'
Node.js
import { Orbit } from '@devotel/orbit-sdk'

const orbit = new Orbit({
  apiKey: process.env.ORBIT_API_KEY!,
})

const res = await fetch('https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls', {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.ORBIT_API_KEY!,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "to": "string",
  "from_phone_number_id": "string"
}),
})
console.log(await res.json())
Python
import os, requests

headers = {"X-API-Key": os.environ["ORBIT_API_KEY"]}
headers["Content-Type"] = "application/json"
r = requests.post("https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls", headers=headers, json={
  "to": "string",
  "from_phone_number_id": "string"
})
print(r.json())
Go
package main

import (
	"bytes"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("POST", "https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls", bytes.NewBuffer([]byte(`{
  "to": "string",
  "from_phone_number_id": "string"
}`)))
	req.Header.Set("X-API-Key", os.Getenv("ORBIT_API_KEY"))
	req.Header.Set("Content-Type", "application/json")
	http.DefaultClient.Do(req)
}
Ruby
require 'net/http'
require 'json'

uri = URI('https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls')
req = Net::HTTP::Post.new(uri)
req['X-API-Key'] = ENV['ORBIT_API_KEY']
req['Content-Type'] = 'application/json'
req.body = {
  "to": "string",
  "from_phone_number_id": "string"
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.body
PHP
<?php
$ch = curl_init('https://api.orbit.devotel.io/api/v1/whatsapp/calling/calls');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'X-API-Key: ' . getenv('ORBIT_API_KEY'),
  'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, <<<JSON
{
  "to": "string",
  "from_phone_number_id": "string"
}
JSON);
echo curl_exec($ch);