# 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)

```bash
curl -s "https://api.closefinch.com/v1/activities/$ID/scores" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
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 '{}'
```

```js
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)

```bash
curl -s "https://api.closefinch.com/v1/coaching/queue" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s "https://api.closefinch.com/v1/coaching/reps/$ID" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/coaching/rubrics" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s -X POST "https://api.closefinch.com/v1/coaching/rubrics" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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)

```bash
curl -s -X PATCH "https://api.closefinch.com/v1/coaching/rubrics/$ID" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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)

```bash
curl -s "https://api.closefinch.com/v1/coaching/team" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s "https://api.closefinch.com/v1/deal-coverage" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s "https://api.closefinch.com/v1/deal-flags" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
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 '{}'
```

```js
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)

```bash
curl -s -X PATCH "https://api.closefinch.com/v1/deal-plans/$ID" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
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 '{}'
```

```js
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

```bash
curl -s -X POST "https://api.closefinch.com/v1/deals/$ID/diagnosis" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
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 '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/deals/$ID/intelligence" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
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 '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/deals/$ID/methodology/history" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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

```bash
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 '{}'
```

```js
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

```bash
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 '{}'
```

```js
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)

```bash
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 '{}'
```

```js
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)

```bash
curl -s -X POST "https://api.closefinch.com/v1/deals/$ID/plans" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/deals/$ID/plays" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
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 '{}'
```

```js
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

```bash
curl -s -X POST "https://api.closefinch.com/v1/deals/$ID/room" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
curl -s -X POST "https://api.closefinch.com/v1/deals/$ID/value" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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)

```bash
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 '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/methodologies" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s "https://api.closefinch.com/v1/pipeline/review" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/plays" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s "https://api.closefinch.com/v1/record-suggestions" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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

```bash
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 '{}'
```

```js
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

```bash
curl -s -X POST "https://api.closefinch.com/v1/record-suggestions/scan" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/settings/deal-rooms" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s -X PUT "https://api.closefinch.com/v1/settings/deal-rooms" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
curl -s -X PUT "https://api.closefinch.com/v1/settings/methodology" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/settings/risk" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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)

```bash
curl -s -X PUT "https://api.closefinch.com/v1/settings/risk" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/stages/$ID/rule" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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

```bash
curl -s -X PUT "https://api.closefinch.com/v1/stages/$ID/rule" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/win-loss/revival" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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

```bash
curl -s "https://api.closefinch.com/v1/win-loss/summary" \
  -H "Authorization: Bearer $RA_API_KEY"
```

```js
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](https://www.closefinch.com/openapi.json). All resources: [API reference](https://www.closefinch.com/docs/api).
