Skip to content

API reference

API: Market

Markdown version

MethodPathWhat it doesScope
GET/v1/buyer-personasBuyer personas (suggested from won deals, or set by a person)prospecting:read
POST/v1/buyer-personasAdd a buyer persona (titles, seniorities, departments, include and exclude keywords, a cap per account)prospecting:write
PATCH/v1/buyer-personas/:idEdit a persona, or accept (active) or archive a suggestionprospecting:write
GET/v1/buyer-personas/:id/provider-searchThe persona's recent provider searches (queued, done or failed) with the people foundprospecting:read
POST/v1/buyer-personas/:id/provider-searchQueue a People Data Labs search for the persona at these accounts (it runs in the worker; needs a PDL key; results are listed only, never imported)prospecting:write
POST/v1/buyer-personas/learnSuggest personas from the titles and deal roles of contacts on won deals (suggestions wait for a person)prospecting:write
POST/v1/buyer-personas/matchContacts that fit the active personas inside target accounts (given ids, a lookalike run, or the default ICP's matches), with matched and skipped contacts and whyprospecting:read
GET/v1/lookalike-runsLookalike runs (one per won deal, plus manual runs), with ranked results, matched attributes, drops and the staged segmentprospecting:read
POST/v1/lookalike-runsQueue a lookalike run from a won deal (once per deal) or from every closed-won account; results are staged as a segment for reviewprospecting:write
POST/v1/lookalike-runs/:id/importImport chosen companies a provider found outside the CRM as accounts (an explicit step by a person; existing domains are skipped) (web app only)prospecting:write
GET/v1/market/settingsTracked technologies, GTM role families, the lookalike cap and threshold, whether mail history feeds the TAM; which paid vendors are on (PredictLeads, People Data Labs) and SIG-004's off settingprospecting:read
PUT/v1/market/settingsChange the market settings (owners). Person-level visitor de-anonymization can't be turned on (founder decision 9).settings:write
GET/v1/tamThe TAM: counts by source (ICP, customer-similar, mail), segment and size, coverage gaps, the market count when a provider is set up, and the accounts with their sources (built on first view)prospecting:read
POST/v1/tam/refreshQueue a TAM rebuild (it runs in the worker: adds new matches, removes disqualified or churned accounts and logs the changes; the market count when a provider is set up)prospecting:write

Examples

GET /v1/buyer-personas

Buyer personas (suggested from won deals, or set by a person)

curl -s "https://api.closefinch.com/v1/buyer-personas" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/buyer-personas`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/buyer-personas

Add a buyer persona (titles, seniorities, departments, include and exclude keywords, a cap per account)

curl -s -X POST "https://api.closefinch.com/v1/buyer-personas" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/buyer-personas`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

PATCH /v1/buyer-personas/$ID

Edit a persona, or accept (active) or archive a suggestion

curl -s -X PATCH "https://api.closefinch.com/v1/buyer-personas/$ID" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/buyer-personas/${id}`, {
  method: "PATCH",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

The persona's recent provider searches (queued, done or failed) with the people found

curl -s "https://api.closefinch.com/v1/buyer-personas/$ID/provider-search" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/buyer-personas/${id}/provider-search`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/buyer-personas/$ID/provider-search

Queue a People Data Labs search for the persona at these accounts (it runs in the worker; needs a PDL key; results are listed only, never imported)

curl -s -X POST "https://api.closefinch.com/v1/buyer-personas/$ID/provider-search" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/buyer-personas/${id}/provider-search`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

POST /v1/buyer-personas/learn

Suggest personas from the titles and deal roles of contacts on won deals (suggestions wait for a person)

curl -s -X POST "https://api.closefinch.com/v1/buyer-personas/learn" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/buyer-personas/learn`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

POST /v1/buyer-personas/match

Contacts that fit the active personas inside target accounts (given ids, a lookalike run, or the default ICP's matches), with matched and skipped contacts and why

curl -s -X POST "https://api.closefinch.com/v1/buyer-personas/match" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/buyer-personas/match`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

GET /v1/lookalike-runs

Lookalike runs (one per won deal, plus manual runs), with ranked results, matched attributes, drops and the staged segment

curl -s "https://api.closefinch.com/v1/lookalike-runs" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/lookalike-runs`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/lookalike-runs

Queue a lookalike run from a won deal (once per deal) or from every closed-won account; results are staged as a segment for review

curl -s -X POST "https://api.closefinch.com/v1/lookalike-runs" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/lookalike-runs`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

GET /v1/market/settings

Tracked technologies, GTM role families, the lookalike cap and threshold, whether mail history feeds the TAM; which paid vendors are on (PredictLeads, People Data Labs) and SIG-004's off setting

curl -s "https://api.closefinch.com/v1/market/settings" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/market/settings`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

PUT /v1/market/settings

Change the market settings (owners). Person-level visitor de-anonymization can't be turned on (founder decision 9).

curl -s -X PUT "https://api.closefinch.com/v1/market/settings" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/market/settings`, {
  method: "PUT",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

GET /v1/tam

The TAM: counts by source (ICP, customer-similar, mail), segment and size, coverage gaps, the market count when a provider is set up, and the accounts with their sources (built on first view)

curl -s "https://api.closefinch.com/v1/tam" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/tam`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/tam/refresh

Queue a TAM rebuild (it runs in the worker: adds new matches, removes disqualified or churned accounts and logs the changes; the market count when a provider is set up)

curl -s -X POST "https://api.closefinch.com/v1/tam/refresh" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/tam/refresh`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

Request and response schemas: https://www.closefinch.com/openapi.json. All resources: API reference.

Send feedback

Tell us what's broken, confusing or missing on this page, or an idea. It goes to the team that builds the product.

Please don't include passwords or card numbers.
Only to reply about this. Never added to any mailing list.