cURL
curl --request GET \
--url https://api.contiguity.com/facetime/{call_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contiguity.com/facetime/{call_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contiguity.com/facetime/{call_id}', 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/{call_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.contiguity.com/facetime/{call_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.contiguity.com/facetime/{call_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contiguity.com/facetime/{call_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
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
Get a FaceTime call
Fetch a FaceTime call by ID
GET
/
{call_id}
cURL
curl --request GET \
--url https://api.contiguity.com/facetime/{call_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contiguity.com/facetime/{call_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contiguity.com/facetime/{call_id}', 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/{call_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.contiguity.com/facetime/{call_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.contiguity.com/facetime/{call_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contiguity.com/facetime/{call_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
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
}
}Returns the call object. FaceTime webhooks send this same object in

data.
Status
status | meaning |
|---|---|
queued | Outbound dial created the call |
ringing | Outbound is ringing, or an inbound call arrived |
in_progress | The call was answered |
completed | The call ended (you hung up, they hung up, or FaceTime disconnected) |
failed | Contiguity could not place the call |
cause is null while the call is live. After hangup it is dialer_hungup if you hang up, recipient_hungup if the remote party left, or another end reason.
Participants
participants is the current roster while the call is live. After the call ends it is whoever remained, not everyone who was ever on the call.
| stage | participants |
|---|---|
| initiated / ringing | [] |
| answered | The remote party, e.g. ["+15559876543"] |
| ended | Remaining handles after hangup. If the recipient already left, this is often just your FaceTime Audio line. |
Media
link is a FaceTime Web URL, once Apple has created it. It is null during queued and ringing. Opening it joins as a web participant.
webrtc is present while the call is active and null after it ends. webrtc.join is a URL that connects you as the Contiguity FaceTime Audio line. url, room, and token are the raw WebRTC credentials.
duration is seconds of connected time. It stays null until the call ends.

Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The call ID.
Example:
"call_ftaAbCdEfGhIjKlMnOpQrStUv"
Was this page helpful?