curl --request GET \
--url https://api.aura-app.ai/v1/booking-links/{id}/availabilityimport requests
url = "https://api.aura-app.ai/v1/booking-links/{id}/availability"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.aura-app.ai/v1/booking-links/{id}/availability', 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.aura-app.ai/v1/booking-links/{id}/availability",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.aura-app.ai/v1/booking-links/{id}/availability"
req, _ := http.NewRequest("GET", url, nil)
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.aura-app.ai/v1/booking-links/{id}/availability")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aura-app.ai/v1/booking-links/{id}/availability")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"slots": [
{
"end_time": 1783509300,
"start_time": 1783507500,
"emails": [
"<string>"
]
}
],
"timezone": "Europe/Berlin"
},
"success": true
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}Get bookable time slots for a scheduler
Compute the bookable time slots for a scheduler over a date range — exactly what a guest sees on the public booking page, through the same shared engine: live roster resolution, calendar free/busy + working hours, the min-booking-notice floor, and the existing-bookings buffer/overbooking screen against Aura’s own calls table.
Semantics:
start_date/end_dateare inclusive UTC calendar days; the range spans at most 31 days and must start today or later.startandendaccept instants with offsets instead of the date fields. Send exactly one input per edge. Start is inclusive and end is exclusive for slot start times. An instant start must be now or later.- The window is additionally clamped to the link’s booking horizon
(
available_days_in_future). - Slot times are unix seconds (UTC);
timezoneis echoed back for client-side formatting only. - An empty roster or a fully-booked range returns
slots: [](200).
Expected failures are typed, never a bare 500:
- 400 — invalid date range
- 422 — the link’s configuration was rejected by the availability provider (e.g. a misconfigured grant or calendar)
- 502 — the availability provider is degraded (5xx / timeout)
curl --request GET \
--url https://api.aura-app.ai/v1/booking-links/{id}/availabilityimport requests
url = "https://api.aura-app.ai/v1/booking-links/{id}/availability"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.aura-app.ai/v1/booking-links/{id}/availability', 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.aura-app.ai/v1/booking-links/{id}/availability",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.aura-app.ai/v1/booking-links/{id}/availability"
req, _ := http.NewRequest("GET", url, nil)
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.aura-app.ai/v1/booking-links/{id}/availability")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aura-app.ai/v1/booking-links/{id}/availability")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"slots": [
{
"end_time": 1783509300,
"start_time": 1783507500,
"emails": [
"<string>"
]
}
],
"timezone": "Europe/Berlin"
},
"success": true
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "<string>",
"error": "<string>",
"success": false,
"requestId": "<string>"
}{
"code": "NOT_FOUND",
"error": "Lead not found",
"success": false,
"requestId": "req_abc123"
}start_date/end_dateare inclusive UTC calendar days; the range spans at most 31 days and must start today or later.startandendaccept instants with offsets instead of the date fields. Send exactly one input per edge. Start is inclusive and end is exclusive for slot start times. An instant start must be now or later.- The window is additionally clamped to the link’s booking horizon
(
available_days_in_future). - Slot times are unix seconds (UTC);
timezoneis echoed back for client-side formatting only. - An empty roster or a fully-booked range returns
slots: [](200).
- 400 — invalid date range
- 422 — the link’s configuration was rejected by the availability provider (e.g. a misconfigured grant or calendar)
- 502 — the availability provider is degraded (5xx / timeout)
Path Parameters
Scheduler ID (UUID)
"550e8400-e29b-41d4-a716-446655440000"
Query Parameters
Inclusive start UTC day, today or later. Send start_date or start, not both.
^\d{4}-\d{2}-\d{2}$"2026-07-10"
Inclusive end UTC day. Send end_date or end, not both. The window spans at most 31 days.
^\d{4}-\d{2}-\d{2}$"2026-07-17"
Inclusive start instant with an offset, now or later. Alternative to start_date.
"2026-07-10T20:00:00-04:00"
Exclusive end instant with an offset. Alternative to end_date. Slot start times fall before this instant.
"2026-07-17T20:00:00-04:00"
IANA timezone echoed back for formatting. Defaults to the scheduler's timezone.
"Europe/Berlin"