Quickstart
1. Get an API key
Section titled “1. Get an API key”Subscribe to a plan on our pricing page to receive your API key. Keys use the format BOROUGH-<uuid>.
Free-tier search endpoints work without authentication (IP-based rate limiting applies).
2. Make your first request
Section titled “2. Make your first request”curl -H "Authorization: Bearer BOROUGH-your-key-here" \ "https://borough.qwady.app/v1/search/rentals?areas=120&maxPrice=4000&minBeds=1"import { BoroughClient } from "@borough/sdk";
const borough = new BoroughClient("BOROUGH-your-key-here");
const results = await borough.rentals.search({ areas: "120", maxPrice: 4000, minBeds: 1,});
for (const listing of results.data) { console.log(`${listing.address.street} - $${listing.price}/mo`);}import requests
headers = {"Authorization": "Bearer BOROUGH-your-key-here"}params = {"areas": "120", "maxPrice": 4000, "minBeds": 1}
response = requests.get( "https://borough.qwady.app/v1/search/rentals", headers=headers, params=params,)data = response.json()
for listing in data["data"]: print(f"{listing['address']['street']} - ${listing['price']}/mo")3. Understand the response
Section titled “3. Understand the response”Every response follows this envelope:
{ "data": [...], "meta": { "total": 142, "page": 1, "perPage": 50, "dataAge": "2026-02-15T14:30:00Z", "source": "cached", "links": { "self": "/v1/search/rentals?areas=120&page=1&perPage=50", "first": "/v1/search/rentals?areas=120&page=1&perPage=50", "last": "/v1/search/rentals?areas=120&page=3&perPage=50", "prev": null, "next": "/v1/search/rentals?areas=120&page=2&perPage=50" } }}Key fields:
data— The response payload (array for lists, object for single resources)meta.dataAge— When the data was last refreshed (ISO 8601)meta.source— How data was served:cached,stale, orlivemeta.links— Pagination navigation URLs
Next steps
Section titled “Next steps”- Authentication — API key formats and header usage
- Search Filters — All available filter parameters
- SDK Guide — Install and use the TypeScript SDK