API v1
Everything your systems can ask Quarters.
Published listings and live availability for your website, reservations for whatever runs your contracts or your books, and signed webhooks so none of them has to poll.
- Base URL
https://go.quarters.live/api/v1- Auth
- OAuth 2.0 client credentials, then
Authorization: Bearer. HTTP Basic for no-code tools. How - Spec
- openapi.json, for Postman, Bruno or a generator.
- Quick start Credentials, a token and your first call, in ten minutes.
- Authentication OAuth 2.0 client credentials. The same grant Guesty uses.
- Webhooks Signed deliveries, so nothing has to poll.
- API reference Every endpoint, with samples in six languages.
- Build a booking website Mirror the listings, draw the calendar, land the form.
- Sync reservations Every booking once, then only what changed.
- Zapier, Make and n8n A webhook starts the workflow, one step reads the record.
- Objects What the endpoints read and return, field by field.
Endpoints
Authentication
Listings
Reservations
Agreements
Inquiries
First call
A token from the token endpoint, then every published listing.
Request
curl "https://go.quarters.live/api/v1/listings" \
-H "Authorization: Bearer $ACCESS_TOKEN"const res = await fetch("https://go.quarters.live/api/v1/listings", {
headers: { Authorization: `Bearer ${token}` }
});
const { listings } = await res.json();import requests
res = requests.get(
"https://go.quarters.live/api/v1/listings",
headers={"Authorization": f"Bearer {token}"},
)
res.raise_for_status()
listings = res.json()["listings"]$ch = curl_init("https://go.quarters.live/api/v1/listings");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token"],
]);
$res = curl_exec($ch);
curl_close($ch);
$listings = json_decode($res, true)["listings"];require "net/http"
require "json"
uri = URI("https://go.quarters.live/api/v1/listings")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{token}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
listings = JSON.parse(res.body)["listings"]package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
token := os.Getenv("ACCESS_TOKEN")
req, _ := http.NewRequest("GET", "https://go.quarters.live/api/v1/listings", nil)
req.Header.Set("Authorization", "Bearer "+token)
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data["listings"])
}