Skip to content

API reference

API: Deal intelligence

Markdown version

MethodPathWhat it doesScope
GET/v1/activities/:id/scoresA call's coaching scores (the rep and their managers only)transcripts:read
POST/v1/call-scores/:id/reviewMark a call reviewed (its rep's manager)transcripts:write
GET/v1/coaching/queueYour review queue: your reports' lowest-scored unreviewed calls (3 each, last 14 days)transcripts:read
GET/v1/coaching/reps/:idA rep's coaching profile (the rep and their managers only)transcripts:read
GET/v1/coaching/rubricsCoaching rubricstranscripts:read
POST/v1/coaching/rubricsAdd a rubric (owner)settings:write
PATCH/v1/coaching/rubrics/:idChange a rubric (owner)settings:write
GET/v1/coaching/teamYour reports compared (90 days)transcripts:read
GET/v1/deal-coverageSingle-threading audit: roles, engaged contacts, champions, executive access, owner concentration (read-only)deals:read
GET/v1/deal-flagsOpen risk flags across deals (by kind or owner)deals:read
POST/v1/deal-flags/:id/dismissDismiss a risk flag (it stays dismissed 14 days)deals:write
PATCH/v1/deal-plans/:idEdit a plan's items (done seller items close their tasks)deals:write
POST/v1/deal-plans/:id/shareShare a plan with the buyer: an email in the deal owner's inbox, sent from their mailbox when they approvedeals:write
POST/v1/deals/:id/diagnosisDiagnose the deal (why it was won or lost, or why it's slipping), citeddeals:write
POST/v1/deals/:id/flags/checkCheck a deal's risk flags nowdeals:write
GET/v1/deals/:id/intelligenceA deal's risks (watching state), methodology, next action, coverage, plans, value and diagnosisdeals:read
PUT/v1/deals/:id/methodology/:keySet an element yourself (the reasoning pass won't change it)deals:write
GET/v1/deals/:id/methodology/historyA deal's methodology score over timedeals:read
POST/v1/deals/:id/methodology/scoreRun the methodology reasoning pass on a deal nowdeals:write
PATCH/v1/deals/:id/next-actionMark the next action done or dismisseddeals:write
POST/v1/deals/:id/next-actionWork out the deal's one best next step (from its gaps, risks and the org's wins)deals:write
POST/v1/deals/:id/plansDraft a close plan or mutual action plan (seller items become tasks)deals:write
GET/v1/deals/:id/playsPlays that fit the deal now, with why and the knowledge each surfacesdeals:read
POST/v1/deals/:id/plays/:key/runRun a play on the deal (its steps become tasks)deals:write
POST/v1/deals/:id/roomCreate (or update) the deal's room nowdeals:write
POST/v1/deals/:id/valueBuild the value case: assessment from the buyer's stated numbers (formula shown), hypothesis, pyramiddeals:write
PUT/v1/members/:id/reports-toSet who a member reports to (owner; coaching visibility, forecast roll-ups)members:write
GET/v1/methodologiesBuilt-in methodologies and the active onedeals:read
GET/v1/pipeline/reviewAn owner's open deals with risks, methodology, last touch and next action (yours by default)deals:read
GET/v1/playsThe sales-play librarydeals:read
GET/v1/record-suggestionsOpen record suggestions (contacts who keep appearing on a deal, leads matching contacts)deals:read
POST/v1/record-suggestions/:id/:actionAccept (add the contact to the deal, or convert the lead onto the contact) or dismissdeals:write
POST/v1/record-suggestions/scanLook for new record suggestions nowdeals:write
GET/v1/settings/deal-roomsSlack deal rooms: on/off, the connection, which deals get one, who joins on a windeals:read
PUT/v1/settings/deal-roomsSet Slack deal rooms (owner)settings:write
PUT/v1/settings/methodologyPick the org's methodology (owner): a built-in key, or a name and your own elementssettings:write
GET/v1/settings/riskRisk thresholds (org defaults, per-stage overrides) and the built-in defaultsdeals:read
PUT/v1/settings/riskSet risk thresholds (owner)settings:write
GET/v1/stages/:id/ruleA stage's automation ruledeals:read
PUT/v1/stages/:id/ruleSet a stage's rule (owner): reached automatically from conversations, locked, entry/exit criteriasettings:write
GET/v1/win-loss/revivalClosed-lost deals worth revivingdeals:read
GET/v1/win-loss/summaryThemes across won and lost deals (by stage, size or owner) and the won-vs-lost objection comparisondeals:read

Examples

GET /v1/activities/$ID/scores

A call's coaching scores (the rep and their managers only)

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

POST /v1/call-scores/$ID/review

Mark a call reviewed (its rep's manager)

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

Your review queue: your reports' lowest-scored unreviewed calls (3 each, last 14 days)

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

GET /v1/coaching/reps/$ID

A rep's coaching profile (the rep and their managers only)

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

GET /v1/coaching/rubrics

Coaching rubrics

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

POST /v1/coaching/rubrics

Add a rubric (owner)

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

Change a rubric (owner)

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

GET /v1/coaching/team

Your reports compared (90 days)

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

GET /v1/deal-coverage

Single-threading audit: roles, engaged contacts, champions, executive access, owner concentration (read-only)

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

GET /v1/deal-flags

Open risk flags across deals (by kind or owner)

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

POST /v1/deal-flags/$ID/dismiss

Dismiss a risk flag (it stays dismissed 14 days)

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

Edit a plan's items (done seller items close their tasks)

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

Share a plan with the buyer: an email in the deal owner's inbox, sent from their mailbox when they approve

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

Diagnose the deal (why it was won or lost, or why it's slipping), cited

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

Check a deal's risk flags now

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

A deal's risks (watching state), methodology, next action, coverage, plans, value and diagnosis

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

PUT /v1/deals/$ID/methodology/$KEY

Set an element yourself (the reasoning pass won't change it)

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

A deal's methodology score over time

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

POST /v1/deals/$ID/methodology/score

Run the methodology reasoning pass on a deal now

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

Mark the next action done or dismissed

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

Work out the deal's one best next step (from its gaps, risks and the org's wins)

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

Draft a close plan or mutual action plan (seller items become tasks)

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

Plays that fit the deal now, with why and the knowledge each surfaces

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

POST /v1/deals/$ID/plays/$KEY/run

Run a play on the deal (its steps become tasks)

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

POST /v1/deals/$ID/room

Create (or update) the deal's room now

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

Build the value case: assessment from the buyer's stated numbers (formula shown), hypothesis, pyramid

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

PUT /v1/members/$ID/reports-to

Set who a member reports to (owner; coaching visibility, forecast roll-ups)

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

Built-in methodologies and the active one

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

GET /v1/pipeline/review

An owner's open deals with risks, methodology, last touch and next action (yours by default)

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

GET /v1/plays

The sales-play library

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

GET /v1/record-suggestions

Open record suggestions (contacts who keep appearing on a deal, leads matching contacts)

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

POST /v1/record-suggestions/$ID/$ACTION

Accept (add the contact to the deal, or convert the lead onto the contact) or dismiss

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

Look for new record suggestions now

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

Slack deal rooms: on/off, the connection, which deals get one, who joins on a win

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

PUT /v1/settings/deal-rooms

Set Slack deal rooms (owner)

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

PUT /v1/settings/methodology

Pick the org's methodology (owner): a built-in key, or a name and your own elements

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

Risk thresholds (org defaults, per-stage overrides) and the built-in defaults

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

PUT /v1/settings/risk

Set risk thresholds (owner)

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

A stage's automation rule

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

PUT /v1/stages/$ID/rule

Set a stage's rule (owner): reached automatically from conversations, locked, entry/exit criteria

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

Closed-lost deals worth reviving

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

GET /v1/win-loss/summary

Themes across won and lost deals (by stage, size or owner) and the won-vs-lost objection comparison

curl -s "https://api.closefinch.com/v1/win-loss/summary" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/win-loss/summary`, {
  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.