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

Agreements

Retrieve the current agreement

GET /api/v1/reservations/{id}/agreement

The booking’s current agreement, or null when none has been issued. Superseded versions are not listed; the current one carries its version.

Path parameters

ParameterInTypeDescription
id requiredpathstringThe reservation id.

Response

200 { agreement: Agreement | null }

Agreement fields
FieldTypeDescription
id string
version integerCounts up on every re-issue. Superseded versions are not listed.
provider enumquarters for an envelope Quarters rendered and signed itself, docuseal for one created in the organisation’s DocuSeal account, guesty for a record imported from Guesty. Each envelope keeps the provider it was issued with. "quarters""docuseal""guesty"
externalId string | nullThe DocuSeal submission id, or the Guesty reservation id; null for a Quarters envelope.
status enum "sent""completed""declined""failed""voided"
templateName string | nullThe Quarters template used; null for a DocuSeal envelope.
sentAt timestamp | null ISO 8601
completedAt timestamp | null ISO 8601
declinedAt timestamp | null ISO 8601
voidedAt timestamp | null ISO 8601
error string | nullWhy it failed. Only kept while status is failed.
documentUrl string | nullThe provider’s own copy of the executed document, where it keeps a lasting link. Null for DocuSeal, whose links expire within the hour.
document object | nullSet once the executed PDF has been archived in Quarters: sealed at signing for its own envelopes, fetched from DocuSeal for those.
signers Signer[]
createdAt timestamp ISO 8601
updatedAt timestamp 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 reservation.

Request

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

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

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

Response · 200

{
  "agreement": {
    "id": "9a41…",
    "version": 1,
    "provider": "docuseal",
    "externalId": "1849213",
    "status": "sent",
    "templateName": null,
    "sentAt": "2026-09-08T10:02:11.000Z",
    "completedAt": null,
    "declinedAt": null,
    "voidedAt": null,
    "error": null,
    "documentUrl": null,
    "document": null,
    "signers": [
      {
        "role": "lessor",
        "name": "Acme Stays B.V.",
        "email": "hello@example.com",
        "status": "completed",
        "signingUrl": null,
        "viewedAt": null,
        "completedAt": "2026-09-08T10:02:11.000Z",
        "declinedAt": null,
        "declineReason": null
      },
      {
        "role": "lessee",
        "name": "Sofia Rossi",
        "email": "sofia@example.com",
        "status": "pending",
        "signingUrl": "https://docuseal.com/s/…",
        "viewedAt": null,
        "completedAt": null,
        "declinedAt": null,
        "declineReason": null
      }
    ],
    "createdAt": "2026-09-08T10:02:11.000Z",
    "updatedAt": "2026-09-08T10:02:11.000Z"
  }
}