Skip to content

API reference

API: Prospecting

Markdown version

MethodPathWhat it doesScope
GET/v1/accounts/:id/icpWhether an account fits an ICP (the default unless icp_id), and whyaccounts:read
DELETE/v1/event-invites/:idRemove a candidate who hasn't been invitedprospecting:write
POST/v1/event-invites/:id/confirm-locationConfirm that a candidate whose location only shares the city name is in the event's city (web app only)prospecting:write
POST/v1/event-invites/:id/rsvpRecord an RSVP (accepts beyond capacity go to the waitlist) (web app only)prospecting:write
GET/v1/icpsIdeal customer profilesprospecting:read
POST/v1/icpsCreate an ICP (owner): may-contact rules, must-not-contact rules and automatic exclusions (customers, partners, open deals)settings:write
GET/v1/icps/:idOne ICPprospecting:read
PUT/v1/icps/:idReplace an ICP's rules (owner)settings:write
POST/v1/icps/:id/archiveArchive an ICP (owner; its must-not rules stop applying)settings:write
DELETE/v1/icps/:id/overrides/:accountRemove an override (owner)settings:write
PUT/v1/icps/:id/overrides/:accountLet an automatically excluded account back into prospecting, with a reason (owner, from the app; must-not rules still hold) (web app only)settings:write
GET/v1/icps/:id/previewAccounts that fit, and how many each rule removesprospecting:read
GET/v1/prospect-eventsEvent plays, soonest lastprospecting:read
POST/v1/prospect-eventsCreate an event play (dinner, coffee or conference) with a city, date, capacity and host (web app only)prospecting:write
GET/v1/prospect-events/:idAn event: candidates, invitations and RSVPs, with seats taken against capacityprospecting:read
POST/v1/prospect-events/:id/attendeesConference mode: import an attendee, speaker or sponsor list (CSV), matched to CRM people by email, then name and company; the rest become leadsprospecting:write
POST/v1/prospect-events/:id/candidatesSelect candidates in the event's city (and its ICP), leaving out do-not-contact, must-not-contact, recently touched accounts and customersprospecting:write
POST/v1/prospect-events/:id/inviteDraft invitations for candidates (all, or chosen ones; 50 at a time) in the background: each waits for the host's approval in their inbox (web app only)prospecting:write
GET/v1/prospect-playsPlays: agent-proposed ones waiting for a person, then accepted onessequences:read
POST/v1/prospect-playsAdd your own play (owner)settings:write
GET/v1/prospect-plays/:idOne play with its versionssequences:read
PUT/v1/prospect-plays/:idEdit one play's audience, trigger, offer or rationale: a new version of this play only (owner)settings:write
POST/v1/prospect-plays/:id/acceptAccept a proposed play, as is or with edits (owner)settings:write
GET/v1/prospect-plays/:id/previewWho in the CRM a play's audience reaches now (customers, partners and open deals left out)sequences:read
POST/v1/prospect-plays/:id/rejectReject a proposed play (owner; it isn't proposed again)settings:write
POST/v1/prospect-plays/proposePropose plays from your site, profile and won deals (owner; a play already known isn't proposed again)settings:write
GET/v1/prospecting/capsThe organization's daily caps on recruiting emails (across goals) and event invitations (across events)prospecting:read
PUT/v1/prospecting/capsSet the organization's daily caps (owner)settings:write
GET/v1/qualifyQualification runs, newest firstprospecting:read
POST/v1/qualifySet up a qualification run: fit questions over a list of accounts (or chosen accounts). Returns the cost estimate; nothing runs until it's startedprospecting:write
GET/v1/qualify/:idA run: its questions, status, counts per verdict and the cost estimate for re-running stale rowsprospecting:read
PUT/v1/qualify/:id/questionsEdit the questions (and budget): answered rows become stale until re-runprospecting:write
GET/v1/qualify/:id/rowsRows with a verdict per question (reason and sources) and the roll-up; filter and sort by verdictprospecting:read
POST/v1/qualify/:id/rows/:row/rerunRe-run one rowprospecting:write
POST/v1/qualify/:id/save-listSave only the passes as a static list of accountsprospecting:write
POST/v1/qualify/:id/startRun it in the background: every row, or only rows not answered for the current questionsprospecting:write
POST/v1/qualify/:id/stopStop a run (rows not reached stay pending)prospecting:write
POST/v1/recruit-candidates/:id/stageMove a candidate (replied, committed, active or declined with their reason, quoted from their reply when there is one) (web app only)prospecting:write
GET/v1/recruit-goalsRecruiting goals with live progress (active out of N)prospecting:read
POST/v1/recruit-goalsStart recruiting: a target number of active design partners, what counts as active, outreach caps and a budget. Emails go from the sender's mailbox only when they approve each one (web app only)prospecting:write
GET/v1/recruit-goals/:idA goal: progress, every candidate's stage and the learnings from declines (quoted, with sources)prospecting:read
PATCH/v1/recruit-goals/:idChange the target, caps, budget or pitchprospecting:write
POST/v1/recruit-goals/:id/:stateStop (withdrawing drafts nobody approved yet) or resume a goal (web app only)prospecting:write
POST/v1/recruit-goals/:id/nextPropose the next batch now (in the background)prospecting:write
GET/v1/segmentsSegments (lists with a grouping, an owner and a status: staged ones wait for approval)prospecting:read
POST/v1/segmentsCreate a segment (staged for approval unless live: true from a person)prospecting:write
POST/v1/segments/:id/approveApprove a staged segment (a person, from the app) (web app only)prospecting:write
GET/v1/segments/:id/historyWho added or removed each member, when and whyprospecting:read
POST/v1/segments/:id/membersAdd (with a reason each) or remove segment members; adding twice changes nothingprospecting:write
POST/v1/segments/buildBuild staged segments from an ICP's matches, grouped by territory, owner or industryprospecting:write
GET/v1/waitlistSignups ranked, each with its reason and evidence (ineligible ones say why)prospecting:read
POST/v1/waitlist/importImport signups (CSV, rows or a CRM list of contacts or leads): deduplicated by email, each linked to its contact or lead or creating a lead, then rankedprospecting:write
POST/v1/waitlist/rankRe-rank every signup (in the background)prospecting:write

Examples

GET /v1/accounts/$ID/icp

Whether an account fits an ICP (the default unless icp_id), and why

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

DELETE /v1/event-invites/$ID

Remove a candidate who hasn't been invited

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

GET /v1/icps

Ideal customer profiles

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

POST /v1/icps

Create an ICP (owner): may-contact rules, must-not-contact rules and automatic exclusions (customers, partners, open deals)

curl -s -X POST "https://api.closefinch.com/v1/icps" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/icps`, {
  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/icps/$ID

One ICP

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

PUT /v1/icps/$ID

Replace an ICP's rules (owner)

curl -s -X PUT "https://api.closefinch.com/v1/icps/$ID" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/icps/${id}`, {
  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();

POST /v1/icps/$ID/archive

Archive an ICP (owner; its must-not rules stop applying)

curl -s -X POST "https://api.closefinch.com/v1/icps/$ID/archive" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/icps/${id}/archive`, {
  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();

DELETE /v1/icps/$ID/overrides/$ACCOUNT

Remove an override (owner)

curl -s -X DELETE "https://api.closefinch.com/v1/icps/$ID/overrides/$ACCOUNT" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/icps/${id}/overrides/${account}`, {
  method: "DELETE",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

GET /v1/icps/$ID/preview

Accounts that fit, and how many each rule removes

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

GET /v1/prospect-events

Event plays, soonest last

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

GET /v1/prospect-events/$ID

An event: candidates, invitations and RSVPs, with seats taken against capacity

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

POST /v1/prospect-events/$ID/attendees

Conference mode: import an attendee, speaker or sponsor list (CSV), matched to CRM people by email, then name and company; the rest become leads

curl -s -X POST "https://api.closefinch.com/v1/prospect-events/$ID/attendees" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospect-events/${id}/attendees`, {
  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/prospect-events/$ID/candidates

Select candidates in the event's city (and its ICP), leaving out do-not-contact, must-not-contact, recently touched accounts and customers

curl -s -X POST "https://api.closefinch.com/v1/prospect-events/$ID/candidates" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospect-events/${id}/candidates`, {
  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/prospect-plays

Plays: agent-proposed ones waiting for a person, then accepted ones

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

POST /v1/prospect-plays

Add your own play (owner)

curl -s -X POST "https://api.closefinch.com/v1/prospect-plays" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospect-plays`, {
  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/prospect-plays/$ID

One play with its versions

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

PUT /v1/prospect-plays/$ID

Edit one play's audience, trigger, offer or rationale: a new version of this play only (owner)

curl -s -X PUT "https://api.closefinch.com/v1/prospect-plays/$ID" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospect-plays/${id}`, {
  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();

POST /v1/prospect-plays/$ID/accept

Accept a proposed play, as is or with edits (owner)

curl -s -X POST "https://api.closefinch.com/v1/prospect-plays/$ID/accept" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospect-plays/${id}/accept`, {
  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/prospect-plays/$ID/preview

Who in the CRM a play's audience reaches now (customers, partners and open deals left out)

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

POST /v1/prospect-plays/$ID/reject

Reject a proposed play (owner; it isn't proposed again)

curl -s -X POST "https://api.closefinch.com/v1/prospect-plays/$ID/reject" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospect-plays/${id}/reject`, {
  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/prospect-plays/propose

Propose plays from your site, profile and won deals (owner; a play already known isn't proposed again)

curl -s -X POST "https://api.closefinch.com/v1/prospect-plays/propose" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospect-plays/propose`, {
  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/prospecting/caps

The organization's daily caps on recruiting emails (across goals) and event invitations (across events)

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

PUT /v1/prospecting/caps

Set the organization's daily caps (owner)

curl -s -X PUT "https://api.closefinch.com/v1/prospecting/caps" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/prospecting/caps`, {
  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/qualify

Qualification runs, newest first

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

POST /v1/qualify

Set up a qualification run: fit questions over a list of accounts (or chosen accounts). Returns the cost estimate; nothing runs until it's started

curl -s -X POST "https://api.closefinch.com/v1/qualify" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/qualify`, {
  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/qualify/$ID

A run: its questions, status, counts per verdict and the cost estimate for re-running stale rows

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

PUT /v1/qualify/$ID/questions

Edit the questions (and budget): answered rows become stale until re-run

curl -s -X PUT "https://api.closefinch.com/v1/qualify/$ID/questions" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/qualify/${id}/questions`, {
  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/qualify/$ID/rows

Rows with a verdict per question (reason and sources) and the roll-up; filter and sort by verdict

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

POST /v1/qualify/$ID/rows/$ROW/rerun

Re-run one row

curl -s -X POST "https://api.closefinch.com/v1/qualify/$ID/rows/$ROW/rerun" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/qualify/${id}/rows/${row}/rerun`, {
  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/qualify/$ID/save-list

Save only the passes as a static list of accounts

curl -s -X POST "https://api.closefinch.com/v1/qualify/$ID/save-list" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/qualify/${id}/save-list`, {
  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/qualify/$ID/start

Run it in the background: every row, or only rows not answered for the current questions

curl -s -X POST "https://api.closefinch.com/v1/qualify/$ID/start" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/qualify/${id}/start`, {
  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/qualify/$ID/stop

Stop a run (rows not reached stay pending)

curl -s -X POST "https://api.closefinch.com/v1/qualify/$ID/stop" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/qualify/${id}/stop`, {
  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/recruit-goals

Recruiting goals with live progress (active out of N)

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

GET /v1/recruit-goals/$ID

A goal: progress, every candidate's stage and the learnings from declines (quoted, with sources)

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

PATCH /v1/recruit-goals/$ID

Change the target, caps, budget or pitch

curl -s -X PATCH "https://api.closefinch.com/v1/recruit-goals/$ID" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/recruit-goals/${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();

POST /v1/recruit-goals/$ID/next

Propose the next batch now (in the background)

curl -s -X POST "https://api.closefinch.com/v1/recruit-goals/$ID/next" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/recruit-goals/${id}/next`, {
  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/segments

Segments (lists with a grouping, an owner and a status: staged ones wait for approval)

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

POST /v1/segments

Create a segment (staged for approval unless live: true from a person)

curl -s -X POST "https://api.closefinch.com/v1/segments" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/segments`, {
  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/segments/$ID/history

Who added or removed each member, when and why

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

POST /v1/segments/$ID/members

Add (with a reason each) or remove segment members; adding twice changes nothing

curl -s -X POST "https://api.closefinch.com/v1/segments/$ID/members" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/segments/${id}/members`, {
  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/segments/build

Build staged segments from an ICP's matches, grouped by territory, owner or industry

curl -s -X POST "https://api.closefinch.com/v1/segments/build" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/segments/build`, {
  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/waitlist

Signups ranked, each with its reason and evidence (ineligible ones say why)

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

POST /v1/waitlist/import

Import signups (CSV, rows or a CRM list of contacts or leads): deduplicated by email, each linked to its contact or lead or creating a lead, then ranked

curl -s -X POST "https://api.closefinch.com/v1/waitlist/import" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/waitlist/import`, {
  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/waitlist/rank

Re-rank every signup (in the background)

curl -s -X POST "https://api.closefinch.com/v1/waitlist/rank" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/waitlist/rank`, {
  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.