API Key (Bearer Token)
Include your API key in theAuthorization header:
BOROUGH-<uuid> and are provisioned automatically when you subscribe to a plan.
401. The one delayed path is OAuth 2.1 access tokens (below), which are issued after validation and stay usable until they expire, at most one hour later.
OAuth 2.1 (PKCE)
Borough implements OAuth 2.1 with PKCE for secure delegated access. This is the recommended method for MCP clients and third-party apps.Endpoints
Flow
-
Register your client (optional for localhost apps):
Unregistered clients may only use
localhostredirect URIs. -
Redirect user to authorize:
The user enters their Borough API key (or continues with Free tier) and is redirected back with an authorization code.
-
Exchange code for tokens:
-
Use the access token:
Token lifetimes
Use the refresh token to get new access tokens without re-authorization:
Free-tier access
Search endpoints (/v1/search/rentals, /v1/search/sales), areas (/v1/areas), market endpoints, and photo delivery (/v1/photos/{key}) work without authentication and use Borough’s Free tier limits. The public /v1/health endpoint is also available without authentication, but it is outside Borough’s metered quota and rate-limit middleware. Unauthenticated metered requests are subject to:
- 10 requests/minute rate limit (IP-based)
- 100 requests/month quota
- Maximum 10 results per page
borough.qwady.app, while service integrations continue to use /v1/*, /mcp, /.well-known/*, /oauth/*, and /v1/webhooks/*. Public docs live separately at qwady.wiki/borough.
Error responses
On 401 responses, the
WWW-Authenticate header includes a link to the protected-resource metadata for automatic OAuth discovery.
Security best practices
- Store keys in environment variables, never in client-side code
- Rotate keys by creating a new subscription if compromised
- Use the minimum tier needed for your use case
- For OAuth, always use PKCE with S256 code challenges
- Register your client to restrict allowed redirect URIs