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

Listings

Retrieve one listing

GET /api/v1/listings/{id}

The same object the list serves, for one property.

Path parameters

ParameterInTypeDescription
id requiredpathstringThe listing id, from /listings.

Response

200 { listing: Listing }

Listing fields
FieldTypeDescription
id stringOpaque. The same id a reservation’s propertyId carries.
slug string
nickname stringThe operator’s short name for the flat.
active booleanAlways true. Only listed properties are served, and a listed property is in operation.
isListed booleanAlways true. A property taken off the website disappears from this list.
propertyType stringApartment, House, … as the operator classified it.
roomType stringEntire home/apt, Private room, …
address Address
accommodates integerHow many people the flat sleeps.
rooms Room[]
bedrooms integerDerived from rooms.
beds integerDerived from rooms.
bathrooms numberDerived from rooms. Fractional for half bathrooms.
squareMeter integer | null
timezone stringThe IANA zone the listing’s dates are local to.
pricing object
currency "EUR"
rateBasis enumWhich of monthlyRateCents or nightlyRateCents this listing charges. The other keeps whatever the operator set and is never converted. "monthly""nightly"
monthlyRateCents integer | nullMonthly rent. Integer euro-cents.
nightlyRateCents integer | nullThe nightly rate. Integer euro-cents.
depositCents integer | nullSecurity deposit. Integer euro-cents.
utilitiesCents integer | nullMonthly utilities. Integer euro-cents.
furnitureCents integer | nullMonthly furniture fee. Integer euro-cents.
terms object
minNights integer | nullThe shortest stay the operator accepts.
maxNights integer | null
amenities string[]Amenity keys, e.g. wifi, washer, dishwasher.
description Description
translations map of DescriptionThe same six fields per site language, keyed by language code. Fall back to description for anything missing.
images Image[]Sorted by sortOrder. The primary photo is not necessarily first.
publishedAt timestampWhen the Publish button froze this content. 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, or never published.

Request

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

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

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

Response · 200

{
  "listing": {
    "id": "0d6e1c2a-…",
    "slug": "jordaan-canal-loft",
    "nickname": "JOR-1A",
    "active": true,
    "isListed": true,
    "propertyType": "Apartment",
    "roomType": "Entire home/apt",
    "address": {
      "street": "Prinsengracht 123",
      "postalCode": "1015 DX",
      "city": "Amsterdam",
      "country": "NL",
      "area": "Jordaan",
      "latitude": 52.3731,
      "longitude": 4.8837
    },
    "accommodates": 2,
    "rooms": [
      {
        "kind": "bedroom",
        "name": "",
        "beds": [
          {
            "type": "queen",
            "count": 1
          }
        ]
      },
      {
        "kind": "full_bathroom",
        "name": "",
        "beds": []
      }
    ],
    "bedrooms": 1,
    "beds": 1,
    "bathrooms": 1,
    "squareMeter": 58,
    "timezone": "Europe/Amsterdam",
    "pricing": {
      "currency": "EUR",
      "rateBasis": "monthly",
      "monthlyRateCents": 240000,
      "nightlyRateCents": null,
      "depositCents": 240000,
      "utilitiesCents": 15000,
      "furnitureCents": null
    },
    "terms": {
      "minNights": 30,
      "maxNights": 365
    },
    "amenities": [
      "wifi",
      "washer",
      "dishwasher"
    ],
    "description": {
      "title": "Canal loft in the Jordaan",
      "summary": "<p>…</p>",
      "space": "<p>…</p>",
      "neighborhood": "<p>…</p>",
      "access": null,
      "notes": null
    },
    "translations": {
      "nl": {
        "title": "…",
        "summary": "<p>…</p>",
        "space": null,
        "neighborhood": null,
        "access": null,
        "notes": null
      }
    },
    "images": [
      {
        "id": "4b7a…",
        "isPrimary": true,
        "caption": null,
        "sortOrder": 0,
        "width": 2400,
        "height": 1600,
        "bytes": 481221,
        "thumbnail": "https://…",
        "regular": "https://…",
        "large": "https://…",
        "original": "https://…"
      }
    ],
    "publishedAt": "2026-08-28T09:12:44.000Z"
  }
}