Skip to content

API reference

API: Plays

Markdown version

MethodPathWhat it doesScope
POST/v1/autopilot-refills/:id/decideApprove (import, dedupe, enroll through every check) or reject a proposed refillmessages:send
GET/v1/event-playsEvents with follow-up playssequences:read
POST/v1/event-playsCreate an event (webinar, conference, meetup) for follow-up playssequences:write
GET/v1/event-plays/:idAn event: its funnel (imported → companies matched → in ICP → ICP role), statuses and attendeessequences:read
POST/v1/event-plays/:id/attendeesImport (or re-import) the attendee list as CSV: email, name, company, title, status (registered, attended, no-show, speaker, booth)sequences:write
POST/v1/event-plays/:id/runDraft the follow-up for each ICP-role person not yet handled (by status), held for the record ownersequences:write
GET/v1/play-graphsPlay graphs (journeys)sequences:read
POST/v1/play-graphsCreate a play graph (a draft): trigger, A/B, if/else, webhook, assign-owner, lookalike, enroll and end nodessequences:write
GET/v1/play-graphs/:idA play graphsequences:read
PUT/v1/play-graphs/:idSave a play graph (validated; a new version)sequences:write
GET/v1/play-graphs/:id/exportExport a play graph as JSON (to import elsewhere)sequences:read
POST/v1/play-graphs/:id/pastePaste nodes into a play (ids renumbered; links outside the pasted nodes end), optionally after a node; a new versionsequences:write
POST/v1/play-graphs/:id/restoreRestore an earlier version (as a new version)sequences:write
POST/v1/play-graphs/:id/runRun contacts through an active play (at most 100; each node's result is logged)sequences:write
GET/v1/play-graphs/:id/runsA play's recent runs with each node's resultsequences:read
POST/v1/play-graphs/:id/statusTurn a play on, pause or archive it (a play with a webhook is turned on by an organization owner)sequences:write
POST/v1/play-graphs/:id/undoUndo the last save (the version before becomes the newest)sequences:write
GET/v1/play-graphs/:id/versionsA play's versions, newest firstsequences:read
POST/v1/play-graphs/importImport a play graph exported as JSON (a new draft)sequences:write
POST/v1/plays/reactivationRun the reactivation play: closed-lost and dormant contacts, grounded drafts held for each owner (dry_run: who and why, nothing drafted)sequences:write
GET/v1/plays/runsPlay runs (reactivation, event) with their countssequences:read
GET/v1/plays/runs/:idA play run: each person (drafted or skipped, and why) and the outcomes: replies, meetings, re-opened opportunities, revived pipelinesequences:read
GET/v1/sequences/:id/autopilotA sequence's autopilot: source, threshold, refill size, budgets (spent and left), approval, and its refillssequences:read
PUT/v1/sequences/:id/autopilotSet a sequence's autopilot (its owner, or an organization owner; enrolling without approval is an organization owner's choice)messages:send
POST/v1/sequences/:id/autopilot/refillCheck for a refill now (sizes it, checks budgets, searches, proposes or enrolls)messages:send
GET/v1/settings/playsPlay settings: the weekly reactivation play and its cold thresholdsequences:read
PUT/v1/settings/playsChange play settings (owners, signed in) (web app only)settings:write

Examples

POST /v1/autopilot-refills/$ID/decide

Approve (import, dedupe, enroll through every check) or reject a proposed refill

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

Events with follow-up plays

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

POST /v1/event-plays

Create an event (webinar, conference, meetup) for follow-up plays

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

An event: its funnel (imported → companies matched → in ICP → ICP role), statuses and attendees

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

POST /v1/event-plays/$ID/attendees

Import (or re-import) the attendee list as CSV: email, name, company, title, status (registered, attended, no-show, speaker, booth)

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

Draft the follow-up for each ICP-role person not yet handled (by status), held for the record owner

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

Play graphs (journeys)

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

POST /v1/play-graphs

Create a play graph (a draft): trigger, A/B, if/else, webhook, assign-owner, lookalike, enroll and end nodes

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

A play graph

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

PUT /v1/play-graphs/$ID

Save a play graph (validated; a new version)

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

GET /v1/play-graphs/$ID/export

Export a play graph as JSON (to import elsewhere)

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

POST /v1/play-graphs/$ID/paste

Paste nodes into a play (ids renumbered; links outside the pasted nodes end), optionally after a node; a new version

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

Restore an earlier version (as a new version)

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

Run contacts through an active play (at most 100; each node's result is logged)

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

A play's recent runs with each node's result

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

POST /v1/play-graphs/$ID/status

Turn a play on, pause or archive it (a play with a webhook is turned on by an organization owner)

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

Undo the last save (the version before becomes the newest)

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

A play's versions, newest first

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

POST /v1/play-graphs/import

Import a play graph exported as JSON (a new draft)

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

Run the reactivation play: closed-lost and dormant contacts, grounded drafts held for each owner (dry_run: who and why, nothing drafted)

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

Play runs (reactivation, event) with their counts

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

GET /v1/plays/runs/$ID

A play run: each person (drafted or skipped, and why) and the outcomes: replies, meetings, re-opened opportunities, revived pipeline

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

GET /v1/sequences/$ID/autopilot

A sequence's autopilot: source, threshold, refill size, budgets (spent and left), approval, and its refills

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

PUT /v1/sequences/$ID/autopilot

Set a sequence's autopilot (its owner, or an organization owner; enrolling without approval is an organization owner's choice)

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

Check for a refill now (sizes it, checks budgets, searches, proposes or enrolls)

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

Play settings: the weekly reactivation play and its cold threshold

curl -s "https://api.closefinch.com/v1/settings/plays" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/settings/plays`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
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.