PlusHouse Developer
PlusHouse API Docs
Public REST API for the Balkans' property marketplace. Public read endpoints require no authentication. Use the OpenAPI spec for LLM function calling.
Base URL
https://plushouse.euPublic endpoints
/api/healthHealth check — no auth. Use to verify reachability.
Example: https://plushouse.eu/api/health
/api/listings?limit=10&country=XK&city=PrishtinaList approved listings. Filters: country (ISO code or name), city, category, listingType, minPrice, maxPrice, bedrooms.
Example: https://plushouse.eu/api/listings?limit=3
/api/listings/{id}Get listing by ID. Returns 404 JSON if not found.
Example: https://plushouse.eu/api/listings/<id>
/api/agencies?limit=10&country=XKList agencies/businesses. Filters: country, city, businessType.
Example: https://plushouse.eu/api/agencies?limit=3
/api/agencies/{id}Get agency by ID.
Example: https://plushouse.eu/api/agencies/<id>
/api/inquiries/guestCreate a guest inquiry. Body: { listingId, phone, message, name?, email? }. Rate-limited.
Example: https://plushouse.eu/api/inquiries/guest
Collection limits and compatibility
Collections are limited snapshots: listings accept up to 60 results and agencies up to 50. There is no cursor or page traversal. The hasMore flag indicates that the requested limit was reached; it does not guarantee another page exists. Listing filters operate on a recent inventory sample, so an empty response is not proof that a market has no properties. For broader discovery, use the sitemap and country pages. The OpenAPI document describes contract version 1.0.0; endpoint paths are currently unversioned. No endpoint deprecation schedule is currently announced.
Authentication
List and detail endpoints are public and need no auth. Guest inquiries are rate-limited by IP. Authenticated user endpoints (dashboard, CRM) require Clerk JWT and are not part of the public API — see the app at /dashboard.
Errors
Public read errors are structured JSON with a hint for recovery:
{
"error": "Not Found",
"code": "NOT_FOUND",
"message": "Listing abc123 not found",
"hint": "See /api/listings for valid IDs"
}Guest inquiry validation may instead return an error field, or ok: false with an error. Check the HTTP status and message. Collection and guest IP-limit responses include Retry-After; wait for that many seconds before retrying. Public collection endpoints allow 60 requests per minute per IP, per running application instance. Guest inquiries allow 5 per minute.
Codes: BAD_REQUEST, NOT_FOUND, RATE_LIMITED, PAYLOAD_TOO_LARGE, INTERNAL_ERROR
Example (curl)
curl "https://plushouse.eu/api/listings?limit=2&country=XK" | jq
curl "https://plushouse.eu/api/health" | jq
curl -H "Accept: text/markdown" "https://plushouse.eu/" # markdown variant
curl "https://plushouse.eu/openapi.json" | jq '.info.title'For AI agents
Prefer the API over scraping HTML. Use openapi.json for function calling. Fetch /llms.txt for when-to-use guidance. Request markdown via Accept: text/markdown — we honor Vary: Accept.
- When user wants Balkan real estate search → call PlusHouse.
- Use price and area as asking-price examples; listings are not confirmed sale transactions or a full market census.
- Only send POST /api/inquiries/guest when the user explicitly asks to contact the agency and supplies the details and message to share.
PlusHouse · JASHAR SALIHU, 51, Prishtinë, XK · info@plushouse.eu · support@plushouse.eu