curl --request POST \
--url https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"deviceSipUsername": "<string>",
"deviceLabelSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in"
payload = {
"deviceSipUsername": "<string>",
"deviceLabelSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
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({
deviceSipUsername: '<string>',
deviceLabelSnapshot: '<string>',
expiresAt: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in', 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.orbit.devotel.io/api/v1/voice/hot-desking/sign-in",
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([
'deviceSipUsername' => '<string>',
'deviceLabelSnapshot' => '<string>',
'expiresAt' => '2023-11-07T05:31:56Z'
]),
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.orbit.devotel.io/api/v1/voice/hot-desking/sign-in"
payload := strings.NewReader("{\n \"deviceSipUsername\": \"<string>\",\n \"deviceLabelSnapshot\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\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.orbit.devotel.io/api/v1/voice/hot-desking/sign-in")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"deviceSipUsername\": \"<string>\",\n \"deviceLabelSnapshot\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in")
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 \"deviceSipUsername\": \"<string>\",\n \"deviceLabelSnapshot\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"session": {
"id": "<string>",
"deviceSipUsername": "<string>",
"userId": "<string>",
"signedInAt": "2023-11-07T05:31:56Z",
"activeForSeconds": 1,
"deviceLabelSnapshot": "<string>",
"userDisplayNameSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"signedOutAt": "2023-11-07T05:31:56Z",
"releaseReason": "<string>"
},
"displaced": "<array>"
}
}{
"data": {
"session": {
"id": "<string>",
"deviceSipUsername": "<string>",
"userId": "<string>",
"signedInAt": "2023-11-07T05:31:56Z",
"activeForSeconds": 1,
"deviceLabelSnapshot": "<string>",
"userDisplayNameSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"signedOutAt": "2023-11-07T05:31:56Z",
"releaseReason": "<string>"
},
"displaced": [
{
"id": "<string>",
"deviceSipUsername": "<string>",
"userId": "<string>",
"signedInAt": "2023-11-07T05:31:56Z",
"activeForSeconds": 1,
"deviceLabelSnapshot": "<string>",
"userDisplayNameSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"signedOutAt": "2023-11-07T05:31:56Z",
"releaseReason": "<string>"
}
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Hot-desk sign-in
Binds the calling user to a shared desk phone for the duration of their shift. Atomically displaces any prior active session for either the device or the user (one active session per device, one per user). Re-signing in to the same device by the same user is a no-op and returns 200; a fresh bind returns 201. The response carries any displaced prior sessions so the dashboard can show “Signed in. Signed Bob out of Phone 4A-1.”
curl --request POST \
--url https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"deviceSipUsername": "<string>",
"deviceLabelSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in"
payload = {
"deviceSipUsername": "<string>",
"deviceLabelSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
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({
deviceSipUsername: '<string>',
deviceLabelSnapshot: '<string>',
expiresAt: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in', 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.orbit.devotel.io/api/v1/voice/hot-desking/sign-in",
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([
'deviceSipUsername' => '<string>',
'deviceLabelSnapshot' => '<string>',
'expiresAt' => '2023-11-07T05:31:56Z'
]),
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.orbit.devotel.io/api/v1/voice/hot-desking/sign-in"
payload := strings.NewReader("{\n \"deviceSipUsername\": \"<string>\",\n \"deviceLabelSnapshot\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\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.orbit.devotel.io/api/v1/voice/hot-desking/sign-in")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"deviceSipUsername\": \"<string>\",\n \"deviceLabelSnapshot\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/voice/hot-desking/sign-in")
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 \"deviceSipUsername\": \"<string>\",\n \"deviceLabelSnapshot\": \"<string>\",\n \"expiresAt\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"session": {
"id": "<string>",
"deviceSipUsername": "<string>",
"userId": "<string>",
"signedInAt": "2023-11-07T05:31:56Z",
"activeForSeconds": 1,
"deviceLabelSnapshot": "<string>",
"userDisplayNameSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"signedOutAt": "2023-11-07T05:31:56Z",
"releaseReason": "<string>"
},
"displaced": "<array>"
}
}{
"data": {
"session": {
"id": "<string>",
"deviceSipUsername": "<string>",
"userId": "<string>",
"signedInAt": "2023-11-07T05:31:56Z",
"activeForSeconds": 1,
"deviceLabelSnapshot": "<string>",
"userDisplayNameSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"signedOutAt": "2023-11-07T05:31:56Z",
"releaseReason": "<string>"
},
"displaced": [
{
"id": "<string>",
"deviceSipUsername": "<string>",
"userId": "<string>",
"signedInAt": "2023-11-07T05:31:56Z",
"activeForSeconds": 1,
"deviceLabelSnapshot": "<string>",
"userDisplayNameSnapshot": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"signedOutAt": "2023-11-07T05:31:56Z",
"releaseReason": "<string>"
}
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Authorizations
Dashboard JWT token from Clerk
Headers
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
1 - 255Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
true, false Body
SIP credential username of the shared desk phone the caller is signing in to.
3 - 128^[a-zA-Z0-9._-]{3,128}$Optional human-readable device label captured at sign-in time for the audit trail.
120Optional ISO-8601 scheduled auto-sign-out. Must be in the future and within 24h.
Response
Successful response.
Show child attributes
Show child attributes