API reference
API: Deal intelligence
| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | /v1/activities/:id/scores | A call's coaching scores (the rep and their managers only) | transcripts:read |
| POST | /v1/call-scores/:id/review | Mark a call reviewed (its rep's manager) | transcripts:write |
| GET | /v1/coaching/queue | Your review queue: your reports' lowest-scored unreviewed calls (3 each, last 14 days) | transcripts:read |
| GET | /v1/coaching/reps/:id | A rep's coaching profile (the rep and their managers only) | transcripts:read |
| GET | /v1/coaching/rubrics | Coaching rubrics | transcripts:read |
| POST | /v1/coaching/rubrics | Add a rubric (owner) | settings:write |
| PATCH | /v1/coaching/rubrics/:id | Change a rubric (owner) | settings:write |
| GET | /v1/coaching/team | Your reports compared (90 days) | transcripts:read |
| GET | /v1/deal-coverage | Single-threading audit: roles, engaged contacts, champions, executive access, owner concentration (read-only) | deals:read |
| GET | /v1/deal-flags | Open risk flags across deals (by kind or owner) | deals:read |
| POST | /v1/deal-flags/:id/dismiss | Dismiss a risk flag (it stays dismissed 14 days) | deals:write |
| PATCH | /v1/deal-plans/:id | Edit a plan's items (done seller items close their tasks) | deals:write |
| 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 | deals:write |
| POST | /v1/deals/:id/diagnosis | Diagnose the deal (why it was won or lost, or why it's slipping), cited | deals:write |
| POST | /v1/deals/:id/flags/check | Check a deal's risk flags now | deals:write |
| GET | /v1/deals/:id/intelligence | A deal's risks (watching state), methodology, next action, coverage, plans, value and diagnosis | deals:read |
| PUT | /v1/deals/:id/methodology/:key | Set an element yourself (the reasoning pass won't change it) | deals:write |
| GET | /v1/deals/:id/methodology/history | A deal's methodology score over time | deals:read |
| POST | /v1/deals/:id/methodology/score | Run the methodology reasoning pass on a deal now | deals:write |
| PATCH | /v1/deals/:id/next-action | Mark the next action done or dismissed | deals:write |
| POST | /v1/deals/:id/next-action | Work out the deal's one best next step (from its gaps, risks and the org's wins) | deals:write |
| POST | /v1/deals/:id/plans | Draft a close plan or mutual action plan (seller items become tasks) | deals:write |
| GET | /v1/deals/:id/plays | Plays that fit the deal now, with why and the knowledge each surfaces | deals:read |
| POST | /v1/deals/:id/plays/:key/run | Run a play on the deal (its steps become tasks) | deals:write |
| POST | /v1/deals/:id/room | Create (or update) the deal's room now | deals:write |
| POST | /v1/deals/:id/value | Build the value case: assessment from the buyer's stated numbers (formula shown), hypothesis, pyramid | deals:write |
| PUT | /v1/members/:id/reports-to | Set who a member reports to (owner; coaching visibility, forecast roll-ups) | members:write |
| GET | /v1/methodologies | Built-in methodologies and the active one | deals:read |
| GET | /v1/pipeline/review | An owner's open deals with risks, methodology, last touch and next action (yours by default) | deals:read |
| GET | /v1/plays | The sales-play library | deals:read |
| GET | /v1/record-suggestions | Open record suggestions (contacts who keep appearing on a deal, leads matching contacts) | deals:read |
| POST | /v1/record-suggestions/:id/:action | Accept (add the contact to the deal, or convert the lead onto the contact) or dismiss | deals:write |
| POST | /v1/record-suggestions/scan | Look for new record suggestions now | deals:write |
| GET | /v1/settings/deal-rooms | Slack deal rooms: on/off, the connection, which deals get one, who joins on a win | deals:read |
| PUT | /v1/settings/deal-rooms | Set Slack deal rooms (owner) | settings:write |
| PUT | /v1/settings/methodology | Pick the org's methodology (owner): a built-in key, or a name and your own elements | settings:write |
| GET | /v1/settings/risk | Risk thresholds (org defaults, per-stage overrides) and the built-in defaults | deals:read |
| PUT | /v1/settings/risk | Set risk thresholds (owner) | settings:write |
| GET | /v1/stages/:id/rule | A stage's automation rule | deals:read |
| PUT | /v1/stages/:id/rule | Set a stage's rule (owner): reached automatically from conversations, locked, entry/exit criteria | settings:write |
| GET | /v1/win-loss/revival | Closed-lost deals worth reviving | deals:read |
| GET | /v1/win-loss/summary | Themes across won and lost deals (by stage, size or owner) and the won-vs-lost objection comparison | deals: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.