cURL
curl --request POST \
--url https://api.contiguity.com/facetime/dial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "+15125550100"
}
'import requests
url = "https://api.contiguity.com/facetime/dial"
payload = { "to": "+15125550100" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({to: '+15125550100'})
};
fetch('https://api.contiguity.com/facetime/dial', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.contiguity.com/facetime/dial",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+15125550100'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.contiguity.com/facetime/dial"
payload := strings.NewReader("{\n \"to\": \"+15125550100\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.contiguity.com/facetime/dial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+15125550100\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contiguity.com/facetime/dial")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"+15125550100\"\n}"
response = http.request(request)
puts response.read_body{
"id": "req_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "response",
"data": {
"call_id": "call_ftaAbCdEfGhIjKlMnOpQrStUv",
"ft_audio_line": "+18005551234",
"to": "+15125550100",
"from": "+18005551234",
"caller_id": "Support",
"direction": "outbound",
"status": "queued",
"cause": null,
"link": null,
"webrtc": {
"url": "wss://rtc.contiguity.cloud",
"room": "contiguity:facetime:call_ftaAbCdEfGhIjKlMnOpQrStUv",
"token": "eyJhbGciOi...",
"join": "https://facetime.contiguity.com/call?j=…"
},
"participants": [
"+15125550100"
],
"created_at": "2026-09-11T18:02:03.000Z",
"answered_at": null,
"ended_at": null,
"duration": null
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Bad Request",
"status": 400
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Unauthorized",
"status": 401
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Forbidden",
"status": 403
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Internal Server Error",
"status": 500
}
}FaceTime
Dial a FaceTime call
Place an outbound FaceTime Audio call
POST
/
dial
cURL
curl --request POST \
--url https://api.contiguity.com/facetime/dial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "+15125550100"
}
'import requests
url = "https://api.contiguity.com/facetime/dial"
payload = { "to": "+15125550100" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({to: '+15125550100'})
};
fetch('https://api.contiguity.com/facetime/dial', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.contiguity.com/facetime/dial",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => '+15125550100'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.contiguity.com/facetime/dial"
payload := strings.NewReader("{\n \"to\": \"+15125550100\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.contiguity.com/facetime/dial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"+15125550100\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contiguity.com/facetime/dial")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"+15125550100\"\n}"
response = http.request(request)
puts response.read_body{
"id": "req_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "response",
"data": {
"call_id": "call_ftaAbCdEfGhIjKlMnOpQrStUv",
"ft_audio_line": "+18005551234",
"to": "+15125550100",
"from": "+18005551234",
"caller_id": "Support",
"direction": "outbound",
"status": "queued",
"cause": null,
"link": null,
"webrtc": {
"url": "wss://rtc.contiguity.cloud",
"room": "contiguity:facetime:call_ftaAbCdEfGhIjKlMnOpQrStUv",
"token": "eyJhbGciOi...",
"join": "https://facetime.contiguity.com/call?j=…"
},
"participants": [
"+15125550100"
],
"created_at": "2026-09-11T18:02:03.000Z",
"answered_at": null,
"ended_at": null,
"duration": null
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Bad Request",
"status": 400
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Unauthorized",
"status": 401
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Forbidden",
"status": 403
}
}{
"id": "err_xxxxxxxxxxxxxxxx",
"timestamp": 1790548280377,
"api_version": "v2026.9.27",
"object": "error",
"data": {
"error": "Internal Server Error",
"status": 500
}
}Only customers who lease numbers that support FaceTime Audio can use this endpoint.
Phone numbers must be in E.164 format with country codes.
to can also be a FaceTime email.queued and fires facetime.call.initiated. When the remote side starts ringing, status becomes ringing and Contiguity fires facetime.call.ringing.
If you omit from, Contiguity picks one of your leased FaceTime Audio numbers at random. caller_id is optional and is presented as Maybe: caller_id to the recipient. If not provided, it will be a formatted version of your leased number, e.g., Maybe: +1 (415) 555-1234
The response is the same call object returned by Get a call. At dial time link is null, participants is [], and duration is null.
Join as the number
webrtc.join opens the call as the Contiguity FaceTime Audio line — not a third participant.FaceTime Web
Once Apple creates it,
link is a FaceTime Web URL. Opening it joins the call in the browser as a web participant.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Recipient's phone number (E.164) or FaceTime email.
Example:
"+15125550100"
Your leased FaceTime Audio number. If omitted, a random FaceTime Audio number of yours is used.
Example:
"+18005551234"
Optional caller ID to present in the call. Appears as 'Maybe: caller_id'.
Example:
"Tesla Support"
Was this page helpful?