Developers

Listings and inquiries

Every listing on Acquestor came from the broker who represents it. The broker owns the listing and every inquiry about it, and Acquestor never contacts the seller.

For brokers: getting a listing in#

All routes end in a draft. A draft goes live only when the broker approves it on acquestor.com, where they review each field, see the source page behind each drafted figure, accept the Listing License and confirm their authority to list. Approval needs ListAgentFullName, ListOfficeName and ListAgentStateLicense (write "None required" where a state requires none); members see all three on each listing. Social Security, account and card numbers are removed from listing text on every route, and a figure of nine digits or more is refused as an identifier.

Route How Notes
Your own file POST /listing-imports with kind: file and your teaser, CIM or financial summary The draft cites a page for every figure. Free, up to 30 file drafts a month per broker
CSV POST /listing-imports with kind: csv Columns use the canonical field names; GET /listing-imports/template.csv has the template. The job reports errors by row
JSON POST /listings with the fields Starts as a draft

Imports run as a job: poll GET /listing-imports/{import_id} for status, draft_listing_ids, row_errors and flags. A file that looks like a printout of a BizBuySell, BizQuest or LoopNet page is flagged marketplace_printout_suspected, and the broker must confirm the content is their own before approving the draft.

sh
curl https://api.acquestor.com/v1/listing-imports \
  -H "Authorization: Bearer $ACQUESTOR_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F kind=file -F file=@teaser.pdf

GET /broker/listings returns your org's listings in every status. PATCH /listings/{listing_id} edits one; an edit to price, financials or disclosure on a live listing sends it back for approval. POST /listings/{listing_id}/withdraw withdraws it.

In an AI host, create_listing_draft takes the file as base64 and returns the draft. Approval stays on acquestor.com.

Listing fields#

Listings use RESO Data Dictionary names where RESO has the field, and X_-prefixed US business fields where it doesn't: ListPrice, GrossIncome (annual revenue), X_SellersDiscretionaryEarnings, X_NAICSCode, StateOrProvince, X_DisclosureLevel (teaser, financials or full) and the rest in the reference. No field holds the seller's name or contact details.

SBA ceiling cards on listings#

A listing with SDE shows two SBA ceiling cards: one at the broker's salary and capex assumptions, and one at the BLS median manager salary for the area. Both appear on the listing. The sba_financeable search filter uses the second.

A listing's history#

GET /listings/{listing_id} (MCP: get_listing) returns history: every change to the listing's figures and status, oldest first. Each entry has at, the event (drafted, updated, approved, withdrawn, or recorded for the figures on file when history began), the channel it came through (site, api, mcp, csv, file, or unknown before history was kept), a line ready to show, and changes, where each number is a Figure that cites the broker's listing as of that entry's date.

json
{
  "at": "2026-10-12T15:04:11.000Z",
  "event": "updated",
  "channel": "api",
  "line": "Oct 12, 2026: Updated through the API. Asking price $820,000 to $780,000.",
  "changes": [
    { "field": "ListPrice",
      "from": { "value": 820000, "unit": "USD", "source": "s1" },
      "to": { "value": 780000, "unit": "USD", "source": "s2" } }
  ]
}

Your own organization sees every entry, drafts included, and the file a draft was read from. Members see a listing from its first approval, and only the fields its disclosure level shows.

For buyers: search and inquiries#

GET /listings (MCP search_listings) searches member listings by q, naics, state, price_min, price_max, sde_min and sba_financeable. Results carry teaser fields; GET /listings/{listing_id} (MCP get_listing) returns what the broker's disclosure level allows, with both ceiling cards.

Listings are for signed-in members' own use. A developer key receives only its own org's listings.

Broker-written text, such as PublicRemarks and X_Headline, is third-party data. On the MCP server it is marked as such; see conventions.

Inquiries#

POST /listings/{listing_id}/inquiries (MCP contact_listing_broker) sends a message to the listing broker's org, and only to them.

json
{"message": "Is the seller open to a 10% seller note on standby?", "share_profile": false}

GET /inquiries returns a buyer's sent inquiries or a broker org's inbox.

Closed-deal contributions#

Contributions aren't open yet. Until their page on acquestor.com ships, this operation returns 422 not_yet_supported and saves nothing, and the MCP tool isn't listed. When they open:

POST /comps/contributions (MCP contribute_closed_deal) saves an anonymised closed deal as pending_attestation. It takes only the fields in the reference; any other field is refused with 422 invalid_input, so no name, note or commission can be stored. The broker attests on acquestor.com that they represented a party, that the record isn't copied from a licensed database, that sharing it is allowed, and that it names no person, business or street address. Comps open once enough deals are in.