Search Appointment Slots
curl --request POST \
--url https://app.untetherlabs.com/api/v1/appointments/slots \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"appointmentTypeId": "<string>",
"startDate": "2024-11-20T07:43:34+0000",
"endDate": "2024-11-20T07:43:34+0000",
"requirements": {
"providerIds": [
"<string>"
],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"preferences": {
"providerIds": [
"<string>"
],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"limit": 10
}
'import requests
url = "https://app.untetherlabs.com/api/v1/appointments/slots"
payload = {
"appointmentTypeId": "<string>",
"startDate": "2024-11-20T07:43:34+0000",
"endDate": "2024-11-20T07:43:34+0000",
"requirements": {
"providerIds": ["<string>"],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"preferences": {
"providerIds": ["<string>"],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"limit": 10
}
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({
appointmentTypeId: '<string>',
startDate: '2024-11-20T07:43:34+0000',
endDate: '2024-11-20T07:43:34+0000',
requirements: {
providerIds: ['<string>'],
skill: {type: 'equal', skill: '<string>', value: '<string>'}
},
preferences: {
providerIds: ['<string>'],
skill: {type: 'equal', skill: '<string>', value: '<string>'}
},
limit: 10
})
};
fetch('https://app.untetherlabs.com/api/v1/appointments/slots', 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://app.untetherlabs.com/api/v1/appointments/slots",
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([
'appointmentTypeId' => '<string>',
'startDate' => '2024-11-20T07:43:34+0000',
'endDate' => '2024-11-20T07:43:34+0000',
'requirements' => [
'providerIds' => [
'<string>'
],
'skill' => [
'type' => 'equal',
'skill' => '<string>',
'value' => '<string>'
]
],
'preferences' => [
'providerIds' => [
'<string>'
],
'skill' => [
'type' => 'equal',
'skill' => '<string>',
'value' => '<string>'
]
],
'limit' => 10
]),
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://app.untetherlabs.com/api/v1/appointments/slots"
payload := strings.NewReader("{\n \"appointmentTypeId\": \"<string>\",\n \"startDate\": \"2024-11-20T07:43:34+0000\",\n \"endDate\": \"2024-11-20T07:43:34+0000\",\n \"requirements\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"preferences\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"limit\": 10\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://app.untetherlabs.com/api/v1/appointments/slots")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"appointmentTypeId\": \"<string>\",\n \"startDate\": \"2024-11-20T07:43:34+0000\",\n \"endDate\": \"2024-11-20T07:43:34+0000\",\n \"requirements\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"preferences\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"limit\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.untetherlabs.com/api/v1/appointments/slots")
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 \"appointmentTypeId\": \"<string>\",\n \"startDate\": \"2024-11-20T07:43:34+0000\",\n \"endDate\": \"2024-11-20T07:43:34+0000\",\n \"requirements\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"preferences\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"limit\": 10\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"score": 123,
"appointmentTypeId": "<string>",
"startDate": "2024-11-20T07:43:34+0000",
"endDate": "2024-11-20T07:43:34+0000",
"providerId": "<string>"
}
]
}{
"type": "https://developers.untetherlabs.com/errors#validation",
"status": 400,
"title": "Input validation failed.",
"message": "<string>",
"detail": "The specified provider does not satisfy the skill requirements for this shift.",
"path": "<string>"
}{
"type": "https://developers.untetherlabs.com/errors#appointment-type-not-found",
"status": 400,
"title": "A specified appointmenttype does not exist in the system.",
"detail": "The specified provider does not satisfy the skill requirements for this shift."
}Appointments
Search Appointment Slots
POST
/
v1
/
appointments
/
slots
Search Appointment Slots
curl --request POST \
--url https://app.untetherlabs.com/api/v1/appointments/slots \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"appointmentTypeId": "<string>",
"startDate": "2024-11-20T07:43:34+0000",
"endDate": "2024-11-20T07:43:34+0000",
"requirements": {
"providerIds": [
"<string>"
],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"preferences": {
"providerIds": [
"<string>"
],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"limit": 10
}
'import requests
url = "https://app.untetherlabs.com/api/v1/appointments/slots"
payload = {
"appointmentTypeId": "<string>",
"startDate": "2024-11-20T07:43:34+0000",
"endDate": "2024-11-20T07:43:34+0000",
"requirements": {
"providerIds": ["<string>"],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"preferences": {
"providerIds": ["<string>"],
"skill": {
"type": "equal",
"skill": "<string>",
"value": "<string>"
}
},
"limit": 10
}
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({
appointmentTypeId: '<string>',
startDate: '2024-11-20T07:43:34+0000',
endDate: '2024-11-20T07:43:34+0000',
requirements: {
providerIds: ['<string>'],
skill: {type: 'equal', skill: '<string>', value: '<string>'}
},
preferences: {
providerIds: ['<string>'],
skill: {type: 'equal', skill: '<string>', value: '<string>'}
},
limit: 10
})
};
fetch('https://app.untetherlabs.com/api/v1/appointments/slots', 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://app.untetherlabs.com/api/v1/appointments/slots",
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([
'appointmentTypeId' => '<string>',
'startDate' => '2024-11-20T07:43:34+0000',
'endDate' => '2024-11-20T07:43:34+0000',
'requirements' => [
'providerIds' => [
'<string>'
],
'skill' => [
'type' => 'equal',
'skill' => '<string>',
'value' => '<string>'
]
],
'preferences' => [
'providerIds' => [
'<string>'
],
'skill' => [
'type' => 'equal',
'skill' => '<string>',
'value' => '<string>'
]
],
'limit' => 10
]),
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://app.untetherlabs.com/api/v1/appointments/slots"
payload := strings.NewReader("{\n \"appointmentTypeId\": \"<string>\",\n \"startDate\": \"2024-11-20T07:43:34+0000\",\n \"endDate\": \"2024-11-20T07:43:34+0000\",\n \"requirements\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"preferences\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"limit\": 10\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://app.untetherlabs.com/api/v1/appointments/slots")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"appointmentTypeId\": \"<string>\",\n \"startDate\": \"2024-11-20T07:43:34+0000\",\n \"endDate\": \"2024-11-20T07:43:34+0000\",\n \"requirements\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"preferences\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"limit\": 10\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.untetherlabs.com/api/v1/appointments/slots")
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 \"appointmentTypeId\": \"<string>\",\n \"startDate\": \"2024-11-20T07:43:34+0000\",\n \"endDate\": \"2024-11-20T07:43:34+0000\",\n \"requirements\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"preferences\": {\n \"providerIds\": [\n \"<string>\"\n ],\n \"skill\": {\n \"type\": \"equal\",\n \"skill\": \"<string>\",\n \"value\": \"<string>\"\n }\n },\n \"limit\": 10\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"score": 123,
"appointmentTypeId": "<string>",
"startDate": "2024-11-20T07:43:34+0000",
"endDate": "2024-11-20T07:43:34+0000",
"providerId": "<string>"
}
]
}{
"type": "https://developers.untetherlabs.com/errors#validation",
"status": 400,
"title": "Input validation failed.",
"message": "<string>",
"detail": "The specified provider does not satisfy the skill requirements for this shift.",
"path": "<string>"
}{
"type": "https://developers.untetherlabs.com/errors#appointment-type-not-found",
"status": 400,
"title": "A specified appointmenttype does not exist in the system.",
"detail": "The specified provider does not satisfy the skill requirements for this shift."
}This is a beta endpoint. Breaking changes may occur without notice, use at your own risk.
- Skills are ranked by the closest match. For example, a skill requirement for specialty X will rank providers with only specialty X highly, and providers with multiple specialties including X lower.
- Slots which do not create unusable gaps are preferred.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Example:
"2024-11-20T07:43:34+0000"
Example:
"2024-11-20T07:43:34+0000"
Hard filters for possible slots
Show child attributes
Show child attributes
Soft filters for possible slots
Show child attributes
Show child attributes
Maximum number of slots to return
Response
Show child attributes
Show child attributes
⌘I