Skip to the documentation

Old words and new

Searches, runs and results: what each old path, field and code is called now, and what still answers.

On 2026-10-19 the API took the words the product uses: a search is what a client needs, a run is one attempt at it ("Search now"), and its results are the homes that fit. Brief, match and shortlist were the old words.

Every old path still answers exactly as it did, so nothing you built breaks. Each answer also carries Deprecation (when the path became old) and Link (its successor, with your own ids filled in). There is no Sunset: v1 keeps answering until a v2 replaces it. Move when it suits you; idempotency keys, cursors and ETags work across both.

Paths

Old pathIts successor
GET /api/v1/briefs/api/v1/searches
POST /api/v1/briefs/api/v1/searches
POST /api/v1/briefs/draft/api/v1/searches/draft
GET /api/v1/briefs/{searchId}/api/v1/searches/{searchId}
PUT /api/v1/briefs/{searchId}/api/v1/searches/{searchId}
POST /api/v1/searches/{searchId}/matches/api/v1/searches/{searchId}/runs
GET /api/v1/searches/{searchId}/matches/api/v1/searches/{searchId}/runs
GET /api/v1/matches/api/v1/runs
GET /api/v1/matches/{matchId}/api/v1/runs/{runId}
PUT /api/v1/matches/{matchId}/shortlist/api/v1/runs/{runId}/results
POST /api/v1/briefs/{searchId}/matches/api/v1/searches/{searchId}/runs
GET /api/v1/briefs/{searchId}/matches/api/v1/searches/{searchId}/runs
POST /api/v1/matches/{matchId}/shares/api/v1/runs/{runId}/shares
GET /api/v1/matches/{matchId}/shares/api/v1/runs/{runId}/shares
GET /api/v1/matches/{matchId}/shares/{shareId}/api/v1/runs/{runId}/shares/{shareId}
POST /api/v1/matches/{matchId}/shares/{shareId}/email/api/v1/runs/{runId}/shares/{shareId}/email
DELETE /api/v1/matches/{matchId}/shares/{shareId}/api/v1/runs/{runId}/shares/{shareId}
GET /api/v1/search-runs/{id}/pdf/api/v1/runs/{runId}/pdf

Fields

A new path answers the new names. An old path answers the old ones, in the old order. Where a field was added beside its old name on a path that did not move, both answer with the same value.

OldWhereNow
briefId, briefVersionA run, and a run in a listsearchId, searchVersion
runA run: its live executionexecution
shortlist, counts.shortlistedA runresults, counts.results
links.brief, links.shortlist, links.pdfA runlinks.search, links.results, links.pdf (now /runs/{runId}/pdf)
matchId, links.matchA sharerunId, links.run
links.matchesA search (both answer)links.runs
briefA draft (both answer)search
matches, lastMatchAtOrg usage (both answer)runs, lastRunAt
matchesA limit move (send either, not two different counts)runs

Error codes

An old path answers its old code; the new path answers the new one.

On an old pathOn the new path
brief-unrunnablesearch-unrunnable
match-not-readyrun-not-ready

What did not change

  • Scopes: briefs:read, briefs:write, search:read and search:run keep their names.
  • Webhook event types and payloads, such as match.completed and run.succeeded.
  • The headless /api/v1/search family and its executions, now under Headless runs. There, and in run.* webhooks, a run still means one execution.
  • Enum values, such as kind: "market" and a notice's match-gone.