API reference
Every endpoint
Every operation, by resource, all under https://go.quarters.live/api/v1. Each of them except the
token exchange takes Authorization: Bearer.
Authentication
OAuth 2.0 client credentials, the same grant Guesty’s Open API uses, so an integration written against one needs a different token URL and nothing else.
Listings
Property content as the Publish button froze it. A property that has never been published does not exist here, and content being edited right now never leaks. Only the calendar is live.
Reservations
Bookings, in every status. Read them to drive contracts, accounting or a guest portal. The embedded property block is the flat’s identity as it stands today, name, address and owner, because that is what a tenancy agreement must state; listing content stays behind the publish boundary and comes from /listings.
Agreements
The tenancy agreement on a booking. Reading works for every organisation. Writing is for one kind of organisation only: one that has chosen, under Settings › Contracts, to issue and sign its contracts in another system (DocuSeal, say) and let Quarters mirror what that system reports. While that setting is on, nothing in Quarters sends a contract; the dashboard shows these rows and offers staff one button, Request contract, which arrives with you as an agreement.requested webhook.
- GET
/api/v1/reservations/{id}/agreement - PUT
/api/v1/reservations/{id}/agreement - PUT
/api/v1/reservations/{id}/agreement/document - GET
/api/v1/reservations/{id}/agreement/document
Inquiries
Your booking form lands here, as a row staff convert to a reservation in one click and resolve to a guest record, rather than as an email somebody re-types.
Objects
What the endpoints read and return, field by field.
- Listing A property as the Publish button froze it. Content being edited right now never appears here; only the calendar is live.
- Address Where the flat is.
- Room A room of the flat. Bathrooms carry no beds; a living room may.
- Bed One kind of bed in a room, with how many of it there are.
- Image A photo, in four renditions. URLs are absolute and stable until the listing is re-published.
- Description The six prose fields of a listing. `title` is plain; the rest is the editor’s HTML.
- CalendarDay One day of a listing’s availability.
- Reservation A booking with its guest, the property’s identity, the money as agreed at booking time and the current agreement if there is one.
- ReservationStatus `inquiry` is a request that blocks nothing; `reserved` is held; `confirmed` is firm; `cancelled` releases its days.
- PropertyIdentity The flat’s identity as it stands today: name, address, owner. Read live, because that is what a tenancy agreement must state. Listing content stays behind the publish boundary and comes from /listings.
- Guest The person the booking is for.
- Agreement The tenancy agreement on a booking, in its current version.
- Signer One party to the agreement.
- AgreementInput Your whole current view of the envelope.
- SignerInput One party, as you report it. Signers are matched by role and never removed, so you may send only the party that changed.
- InquiryInput A booking request from your form. Text is trimmed.
- TokenRequest The form posted to the token endpoint. HTTP Basic with client_id:client_secret is accepted in place of the two fields, and so is the same form as a JSON object.
- TokenResponse A bearer token, good for 24 hours.
- Error Every failure on a resource endpoint. A 401 also carries WWW-Authenticate: Bearer.
- OAuthError The token endpoint fails in RFC 6749’s own shape rather than the API’s, because that is what an OAuth client library reads.