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

Inquiries

Create an inquiry

POST /api/v1/inquiries

Anything your form collects beyond the fields below goes in metadata, untyped.

Request body

application/json, shaped as InquiryInput.

FieldTypeDescription
propertyId stringMust be one of your published listings.
firstName string max 100 chars
lastName requiredstring max 100 chars
email requiredemail max 200 chars
phone string max 50 chars
company stringThe sender’s company, for an HR desk or an agency asking on someone’s behalf. max 200 chars
staying objectWho will stay, when the sender books for someone else, such as an employee or a relative. The sender remains the contact, and a booking made from the inquiry starts with this person as staying.
firstName string max 100 chars
lastName requiredstring max 100 chars
email email max 200 chars
phone string max 50 chars
company string max 200 chars
startDate date YYYY-MM-DD
endDate dateMust be after startDate. YYYY-MM-DD
adults integerThe tenants picker, one field per age band. 0–20
children integer 0–20
infants integer 0–20
pets boolean
message string max 10000 chars
locale stringWhich language they were reading. max 10 chars
source stringWhere the form lives. Defaults to website; manual is the dashboard’s own and refused here. max 50 chars
form enumWhich kind of form sent it: booking, contact, brochure or waitlist. source follows the form, and the confirmation uses that form’s wording from Website › Booking. Without it, a request naming a property or dates is a booking, anything else a contact message. "booking""contact""brochure""waitlist"
sendConfirmation booleanSends the guest a confirmation that their request arrived, if the organisation switched on that form’s reply under Website › Booking. It goes once per inquiry, in locale, in the wording set there. metadata.page and metadata.brochureUrl fill its property and brochure links. Send false if your own system already confirms. default true
metadata objectAnything else your form collects, untyped. At most 10 KB serialised.

Response

201 { id: string }

Errors

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

StatuserrorWhen
400invalid_requestA bad field, with a message naming its path. An unknown or unpublished propertyId is a 400 too.
429rate_limitedToo many requests, or the organisation’s daily allowance for website inquiries is spent (500 by default, shared with its built-in website’s forms).

Notes

  • An inquiry never blocks a day. It becomes a booking when staff convert it.

Request

curl -X POST "https://go.quarters.live/api/v1/inquiries" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "propertyId": "0d6e1c2a-…",
    "firstName": "Sofia",
    "lastName": "Rossi",
    "email": "sofia@example.com",
    "phone": "+39 333 000 0000",
    "startDate": "2026-10-01",
    "endDate": "2027-04-01",
    "adults": 2,
    "children": 0,
    "infants": 0,
    "pets": false,
    "message": "Two of us, relocating for a project.",
    "locale": "en",
    "form": "booking",
    "metadata": {
      "page": "https://www.example.com/house/…"
    }
  }'
const res = await fetch("https://go.quarters.live/api/v1/inquiries", {
  method: "POST",
  headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "propertyId": "0d6e1c2a-…",
    "firstName": "Sofia",
    "lastName": "Rossi",
    "email": "sofia@example.com",
    "phone": "+39 333 000 0000",
    "startDate": "2026-10-01",
    "endDate": "2027-04-01",
    "adults": 2,
    "children": 0,
    "infants": 0,
    "pets": false,
    "message": "Two of us, relocating for a project.",
    "locale": "en",
    "form": "booking",
    "metadata": {
      "page": "https://www.example.com/house/…"
    }
  })
});
const { id } = await res.json();
import requests

res = requests.post(
    "https://go.quarters.live/api/v1/inquiries",
    headers={"Authorization": f"Bearer {token}"},
    json={
      "propertyId": "0d6e1c2a-…",
      "firstName": "Sofia",
      "lastName": "Rossi",
      "email": "sofia@example.com",
      "phone": "+39 333 000 0000",
      "startDate": "2026-10-01",
      "endDate": "2027-04-01",
      "adults": 2,
      "children": 0,
      "infants": 0,
      "pets": False,
      "message": "Two of us, relocating for a project.",
      "locale": "en",
      "form": "booking",
      "metadata": {
        "page": "https://www.example.com/house/…",
      },
    },
)
res.raise_for_status()
id = res.json()["id"]
$ch = curl_init("https://go.quarters.live/api/v1/inquiries");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", "Content-Type: application/json"],
  CURLOPT_POSTFIELDS => json_encode([
    "propertyId" => "0d6e1c2a-…",
    "firstName" => "Sofia",
    "lastName" => "Rossi",
    "email" => "sofia@example.com",
    "phone" => "+39 333 000 0000",
    "startDate" => "2026-10-01",
    "endDate" => "2027-04-01",
    "adults" => 2,
    "children" => 0,
    "infants" => 0,
    "pets" => false,
    "message" => "Two of us, relocating for a project.",
    "locale" => "en",
    "form" => "booking",
    "metadata" => [
      "page" => "https://www.example.com/house/…",
    ],
  ]),
]);
$res = curl_exec($ch);
curl_close($ch);
$id = json_decode($res, true)["id"];
require "net/http"
require "json"

uri = URI("https://go.quarters.live/api/v1/inquiries")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer #{token}"
req["Content-Type"] = "application/json"
req.body = JSON.generate({
  "propertyId" => "0d6e1c2a-…",
  "firstName" => "Sofia",
  "lastName" => "Rossi",
  "email" => "sofia@example.com",
  "phone" => "+39 333 000 0000",
  "startDate" => "2026-10-01",
  "endDate" => "2027-04-01",
  "adults" => 2,
  "children" => 0,
  "infants" => 0,
  "pets" => false,
  "message" => "Two of us, relocating for a project.",
  "locale" => "en",
  "form" => "booking",
  "metadata" => {
    "page" => "https://www.example.com/house/…",
  },
})
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
id = JSON.parse(res.body)["id"]
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"strings"
)

func main() {
	token := os.Getenv("ACCESS_TOKEN")
	body := `{
	   "propertyId": "0d6e1c2a-…",
	   "firstName": "Sofia",
	   "lastName": "Rossi",
	   "email": "sofia@example.com",
	   "phone": "+39 333 000 0000",
	   "startDate": "2026-10-01",
	   "endDate": "2027-04-01",
	   "adults": 2,
	   "children": 0,
	   "infants": 0,
	   "pets": false,
	   "message": "Two of us, relocating for a project.",
	   "locale": "en",
	   "form": "booking",
	   "metadata": {
	     "page": "https://www.example.com/house/…"
	   }
	 }`
	req, _ := http.NewRequest("POST", "https://go.quarters.live/api/v1/inquiries", strings.NewReader(body))
	req.Header.Set("Authorization", "Bearer "+token)
	req.Header.Set("Content-Type", "application/json")
	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["id"])
}

Response · 201

{
  "id": "2c9d…"
}