Cubi Estate Agent API

The Agent API from Cubi Estate — 98 operation(s) for agent.

GitHub OpenAPI

Operations 102

POST /agent/search Property search returning rendered markdown for LLM agents (e.g. #
POST /agent/carousel Deliver a different listing from a recent /agent/search to the user's chat… #
POST /agent/actions-menu WA-only: send the `⋯ More` follow-up list message… #
POST /agent/pick Pick ONE listing from the chat's most-recent carousel by an objective criterion… #
POST /agent/reset Wipe all cached carousels for one chat. Used by the /reset slash command #
POST /agent/join Self-service /join: auto-approve the sender onto the allow-list + DM the admin #
POST /agent/mute Admin /mute : silence the degraded-search outage alerts for N minutes (0 =… #
POST /agent/near-me /near-me: coordinate-ranked listings for a shared GPS pin (lat/lon →… #
POST /agent/near-me/prompt /near-me step 1: send the 'share your location' request (Telegram… #
POST /agent/user-consent Record the end-user's contact-consent choice (Yes/No) + ack (mig 156) #
POST /agent/consent-menu Re-show the contact-consent Yes/No prompt (backs the /consent command) #
POST /agent/bug Persist a bug report to the bug_reports queue #
POST /agent/report Persist an external listing URL to the listing_reports queue #
POST /agent/report-listing Build + deliver a /report page for an existing corpus listing (no fetch) #
GET /agent/price-band/{listing_id} Structured asking-price comparison for one corpus listing (MCP… #
POST /agent/inventory Share of each place's listings within a budget (MCP compare_inventory) #
GET /agent/price-history/{listing_id} Every observed asking-price change for one listing (MCP get_price_history) #
POST /agent/similar-elsewhere Homes like one listing in another city, side by side (MCP… #
POST /agent/similar-homes Homes like one listing in its own market, by Cubi's similarity model (MCP… #
POST /agent/estimate Comp-based fair-value price band for an existing corpus listing #
POST /agent/signal Record a per-listing engagement signal (web saves → user_listing_signal) #
POST /agent/listing/view Record that a user opened a listing's detail pane (§41 → detail_viewed signal) #
POST /agent/detail-action Track a listing-detail deep-dive button tap (§54) → user_command_event; returns… #
POST /agent/turn-feedback Record a turn-level 👍/👎 on an assistant reply (web thumbs → turn_feedback, mig… #
DELETE /agent/turn-feedback Admin-only cleanup: purge turn_feedback rows for one user (optionally one turn) #
POST /agent/guest/session Ensure a guest capability: the same one back while valid, refreshed under 30… #
POST /agent/guest/adopt Option B §5a: move a legacy browser-minted guest's data into the server-issued… #
POST /agent/guest/claim Move a guest identity's saved searches, favorites, signals and conversations… #
POST /agent/alert/subscribe Opt in to be emailed when new listings match a search (mig 342; §42 baseline… #
POST /agent/expansion/subscribe Opt in to be emailed IF Cubi expands to a country we don't cover (mig 366, §33d) #
POST /agent/expansion/unsubscribe Leave the expansion waitlist for one country (or all) — mig 366, §33d #
POST /agent/brief Submit a delegated-search brief (P0 concierge; shortlist by email, fulfilled by… #
POST /agent/brief/withdraw Withdraw a brief: erases its email and free text (P0 concierge) #
POST /agent/alert/unsubscribe Cancel a search alert (or all of a user's) #
POST /agent/price-drop-email/subscribe Opt in to price-drop emails for saved listings (§55) #
POST /agent/price-drop-email/unsubscribe Toggle price-drop emails off (§55, Art 7(3) two-way) #
GET /agent/price-drop-email/status Price-drop email toggle state for a web user (§55) #
POST /agent/newsletter/subscribe In-product opt-in to the Cubi product-update newsletter (double opt-in) #
GET /agent/newsletter/status A signed-in user's newsletter opt-in status (drives the FE toggle) #
POST /agent/newsletter/unsubscribe Withdraw newsletter consent for a signed-in user (GDPR Art 7(3)) #
POST /agent/save Save a listing from a cached carousel into the user's saved list #
POST /agent/unsave Remove a listing from the user's saved list #
POST /agent/conversations Create a web chat conversation (Claude-style /chat sidebar) #
GET /agent/conversations List a web user's chat conversations, newest first #
POST /agent/web-session-event Count one proxy-answered session_expired (the FE beacon). Counts only #
POST /agent/conversations/listing Create (idempotently) a chat anchored to one listing — the 'Ask Cubi about this… #
GET /agent/listing/{listing_id}/others-asked 'What others have asked Cubi about this home' — topics other buyers raised… #
GET /agent/listing/{listing_id}/contact-options The 'Ask CUBI about this home' contact-method menu for one listing ({text… #
POST /agent/listing-chat/event Record an FE-side action in a listing-anchored chat (test-window tracking) #
GET /agent/credits Remaining web-search credits (free search pool) for a web user #
GET /agent/conversation/{conv_id} Fetch a web chat conversation transcript #
PATCH /agent/conversation/{conv_id} Rename or archive a web chat conversation #
DELETE /agent/conversation/{conv_id} Delete a web chat conversation #
POST /agent/conversation/{conv_id}/messages Append a completed turn to a web chat conversation #
POST /agent/conversation/{conv_id}/truncate Delete a transcript suffix (Stop / Edit-and-re-ask) and fence out in-flight… #
POST /agent/feedback Record in-chat feedback (emoji rating + optional note) #
POST /agent/subscribe Subscribe a chat to a daily digest for a saved search query #
POST /agent/unsubscribe Cancel a daily-digest subscription (or all of a user's) #
POST /agent/subscriptions List a chat's active daily-digest subscriptions #
POST /agent/digest/run Kick the daily-digest batch (re-run all due subscriptions + deliver) #
POST /agent/price-drop-alerts/run Notify users whose saved listings dropped in price (mig 293) #
POST /agent/alert/run Email opt-in search alerts whose saved search has new matches (mig 342) #
POST /agent/contact-request Two-step 'Contact' button: prompt buyer for DM consent, then record (Yes) or… #
POST /agent/ideas/submit Confirm a prepared idea draft (creates the private idea, or adds your voice to… #
GET /agent/ideas/mine The caller's own ideas (user JWT or anonymous capability) #
POST /agent/ideas/vote Vote (+1) for a published idea — verified users only #
POST /agent/ideas/{public_id}/notify-prefs Per-idea email opt-in/out for status changes (unticked by default) #
POST /agent/ideas/{public_id}/publish-consent Grant or withdraw permission to announce this idea publicly when it ships #
POST /agent/ideas/claim Attach an anonymous submitter's ideas to the signed-in user (needs both… #
GET /agent/ideas/notifications In-app status notifications for the caller (newest first); returning them marks… #
POST /agent/ideas/notifications/{outbox_id}/read Mark one in-app notification read #
POST /agent/ideas/outbox/drain Drain due email outbox rows (B-1b). #
POST /agent/ideas/research/run Weekly pass: recompute the deterministic score for every open idea, then write… #
POST /agent/human-request /human — record a support request for a person at Cubi (admin DM + localized… #
POST /agent/human-reply Admin /reply : relay an answer to a /human requester (admin-only) #
POST /agent/lead-confirm Confirm or decline sending a detected lead to the listing agent #
POST /agent/contact-lead Capture a /contact deep-link message as a lead (contact_requests + admin DM) #
GET /agent/listing/{listing_id}/contact-questions Suggested questions for the 'ask CUBI to message the agency' contact option… #
POST /agent/compare Render a side-by-side comparison table for 1..4 listings #
POST /agent/compare/add Add a listing from a cached carousel to the compare shortlist #
POST /agent/compare/remove Remove a listing from the compare shortlist #
POST /agent/compare/clear Empty the compare shortlist for this chat #
POST /agent/compare/show Render the current compare shortlist as a side-by-side table #
POST /agent/compare/from-favorites Return the user's saved listings as a tappable picker for the compare shortlist #
POST /agent/similar Return up to N listings similar to a seed (in-city or cross-city) #
POST /agent/cross-city-search Find one listing in each of two cities matching the same filters; render… #
POST /agent/preroute-classify Classify a user message: paired-comparison (route to /agent/cross-city-search)… #
POST /agent/similar/forget Stop using this listing as a personalization signal (TODO.md:538) #
POST /agent/summarize Generate or fetch the cached TL;DR + Highlights + Watch-outs for a listing #
POST /agent/summarize/feedback Record 👍/👎 reaction to a summary (TODO.md:331) #
POST /agent/rate Record explicit 👍/👎 rating on a listing (mig 083 `rated` signal) #
POST /agent/reject-reason Record an optional reject-reason after a 👎 (mig 083 `reject_reason` signal) #
POST /agent/feedback-menu Open the optional 'What didn't fit?' reason picker for a listing card (mig 083) #
POST /agent/compare-areas Render a side-by-side area-comparison table (cities or regions) #
POST /agent/saved Deliver the user's saved listings as a tappable list. #
POST /agent/saved/list Deliver the user's saved listings as a single message with one tappable row per… #
GET /agent/favorites Read a user's saved listings as hydrated cards (cross-device favorites) #
GET /agent/listing/{listing_id} Fetch one listing's full details by id (source-prefixed, e.g. dils:9876) #
POST /agent/listing/{listing_id}/translate Translate a listing's full description into the given language (lazy i18n) #
POST /agent/listing/{listing_id}/summary Generate (or fetch) the listing's TL;DR summary — async pane fetch #
POST /agent/filter Structured property filter — bypasses natural-language extraction #
POST /agent/search/page Page the current query's full result set (offset/limit) beyond the ranked batch #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cubi-estate:cubi-estate-agent-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cubi-estate-agent-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cubi Estate Agent API
  version: 0.1.0
  description: 'Operations tagged Agent across 2 of this provider''s published API definitions: cubi-estate-openapi.json, cubi-estate-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://mcp.cubi.estate
  description: Host serving this spec (Swagger UI at https://mcp.cubi.estate/docs loads /openapi.json); also hosts the MCP endpoint https://mcp.cubi.estate/mcp
tags:


# --- truncated at 32 KB (280 KB total) ---
# Full source: https://artifacts.apis.io/cubi-estate/openapi/cubi-estate-agent-api-openapi.yml