Skip to content
Developers
esc
  • Type an endpoint, an object or a word from a guide.

Reservations

Retrieve one reservation

GET /api/v1/reservations/{id}

The booking with its guest, the property’s identity, the money as agreed at booking time, and the current agreement if there is one.

Path parameters

ParameterInTypeDescription
id requiredpathstringThe reservation id, from the list or a webhook.

Response

200 { reservation: Reservation }

Reservation fields
FieldTypeDescription
id stringOpaque.
status ReservationStatus
propertyId string
property PropertyIdentity | null
guest Guest
onContract Party
staying Party
startDate date YYYY-MM-DD
endDate dateExclusive. YYYY-MM-DD
nights integerThe booking’s end minus its start.
adults integer | null
children integer | null
infants integer | null
pets boolean
petDetails string | nullWhat the pet is, as the team wrote it. Null without a pet.
pricing objectSnapshotted when the booking was made. A later rate change on the listing never rewrites an agreed booking.
currency "EUR"
rateBasis enumWhat rentCents is per: the property's basis when the booking was made, unless the booking was set to the other. "monthly""nightly"
rentCents integer | nullRent as agreed, per rateBasis: a month or a night. Integer euro-cents.
utilitiesCents integer | nullMonthly utilities as agreed. Integer euro-cents.
furnitureCents integer | nullMonthly furniture fee as agreed. Integer euro-cents.
monthlyCents integer | nullRent + utilities + furniture, for a monthly booking. Null for a nightly one. Integer euro-cents.
depositCents integer | nullSecurity deposit as agreed. Integer euro-cents.
minStayMonths integer | nullWhat the agreement states as the minimum term.
requiresContract booleanWhether this booking needs a signed agreement before it counts as confirmed. Worked out on each request, so a change to what decides it does not move updatedAt.
agreement Agreement | null
dashboardUrl urlOpens the same record in the dashboard, for an alert email or a back-office link.
optionAt timestamp | nullWhen the status was entered. Never cleared. ISO 8601
reservedAt timestamp | nullWhen the status was entered. Never cleared. ISO 8601
confirmedAt timestamp | nullWhen the status was entered. Never cleared. ISO 8601
cancelledAt timestamp | nullWhen the status was entered. Never cleared. ISO 8601
createdAt timestamp ISO 8601
updatedAt timestampThe incremental-sync key: see updatedSince on the list. ISO 8601

Errors

Every failure is { error, message }; see Errors. A missing or expired bearer is a 401 on every endpoint but the token exchange.

StatuserrorWhen
404not_foundUnknown to your organisation.

Notes

  • pricing is snapshotted when the booking is made. A later rate change on the listing never rewrites it.
  • requiresContract is never true for a booking priced per night. Otherwise the first of these that answers decides: the booking's own setting, a contract already sent or signed, the property's setting, the organisation's contract rules, its default.

Request

curl "https://go.quarters.live/api/v1/reservations/7c02…" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
const res = await fetch("https://go.quarters.live/api/v1/reservations/7c02…", {
  headers: { Authorization: `Bearer ${token}` }
});
const { reservation } = await res.json();
import requests

res = requests.get(
    "https://go.quarters.live/api/v1/reservations/7c02…",
    headers={"Authorization": f"Bearer {token}"},
)
res.raise_for_status()
reservation = res.json()["reservation"]
$ch = curl_init("https://go.quarters.live/api/v1/reservations/7c02…");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ["Authorization: Bearer $token"],
]);
$res = curl_exec($ch);
curl_close($ch);
$reservation = json_decode($res, true)["reservation"];
require "net/http"
require "json"

uri = URI("https://go.quarters.live/api/v1/reservations/7c02…")
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) }
reservation = JSON.parse(res.body)["reservation"]
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/reservations/7c02…", 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["reservation"])
}

Response · 200

{
  "reservation": {
    "id": "7c02…",
    "status": "reserved",
    "propertyId": "0d6e1c2a-…",
    "property": {
      "id": "0d6e1c2a-…",
      "nickname": "JOR-1A",
      "slug": "jordaan-canal-loft",
      "address": {
        "street": "Prinsengracht 123",
        "postalCode": "1015 DX",
        "city": "Amsterdam",
        "country": "NL"
      },
      "ownerName": "A. de Vries",
      "timezone": "Europe/Amsterdam"
    },
    "guest": {
      "id": "e31f…",
      "firstName": "Sofia",
      "lastName": "Rossi",
      "name": "Sofia Rossi",
      "email": "sofia@example.com",
      "phone": "+39 333 000 0000",
      "company": null
    },
    "onContract": {
      "name": "Sofia Rossi",
      "email": "sofia@example.com",
      "phone": "+39 333 000 0000",
      "company": null
    },
    "staying": {
      "name": "Sofia Rossi",
      "email": "sofia@example.com",
      "phone": "+39 333 000 0000",
      "company": null
    },
    "startDate": "2026-10-01",
    "endDate": "2027-04-01",
    "nights": 182,
    "adults": 2,
    "children": 0,
    "infants": 0,
    "pets": false,
    "petDetails": null,
    "pricing": {
      "currency": "EUR",
      "rateBasis": "monthly",
      "rentCents": 240000,
      "utilitiesCents": 15000,
      "furnitureCents": 25000,
      "monthlyCents": 280000,
      "depositCents": 240000,
      "minStayMonths": 6
    },
    "requiresContract": true,
    "agreement": null,
    "dashboardUrl": "https://go.quarters.live/acme/reservations?reservation=7c02…",
    "optionAt": "2026-09-01T14:20:05.000Z",
    "reservedAt": "2026-09-08T09:58:40.000Z",
    "confirmedAt": null,
    "cancelledAt": null,
    "createdAt": "2026-09-01T14:20:05.000Z",
    "updatedAt": "2026-09-08T09:58:40.000Z"
  }
}