# API: Business profile

| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | `/v1/business-profile` | Your own site, the latest crawl (claims with sources, what changed) and the proposals for the knowledge base | `knowledge:read` |
| POST | `/v1/business-profile/apply-icp` | Apply the profile's ICP rules to an ICP (merged; its exclusions kept) or to a new one (owner): this is how the profile feeds scoring | `settings:write` |
| GET | `/v1/business-profile/crawls/:id` | One crawl: pages read, claims with their quotes, what changed, the trace | `knowledge:read` |
| GET | `/v1/business-profile/icp-draft` | The ICP rules your accepted profile proposes (roles, industries, sizes) and what applying them to an ICP would change | `knowledge:read` |
| GET | `/v1/business-profile/proposals` | Proposals for knowledge-base sections, pending first, each with its sources and a diff against the section as it is now | `knowledge:read` |
| POST | `/v1/business-profile/proposals/:id/accept` | Accept a proposal, as is or edited: the section is saved in the knowledge base as a new version (owners, from the app) (web app only) | `settings:write` |
| POST | `/v1/business-profile/proposals/:id/reject` | Reject a proposal (the section stays as it is) | `settings:write` |
| POST | `/v1/business-profile/rebuild` | Read your site again and propose changes (owner; runs in the background; nothing reaches the knowledge base until a person accepts it) | `settings:write` |
| PUT | `/v1/business-profile/site` | Set your organization's own website (owner) | `settings:write` |
| GET | `/v1/knowledge-proposals` | Every proposal for the knowledge base in one queue (your site, brand voice, proof points, interview syntheses), each with its sources and the route that decides it | `knowledge:read` |

## Examples

### GET /v1/business-profile

Your own site, the latest crawl (claims with sources, what changed) and the proposals for the knowledge base

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();
```

### POST /v1/business-profile/apply-icp

Apply the profile's ICP rules to an ICP (merged; its exclusions kept) or to a new one (owner): this is how the profile feeds scoring

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile/apply-icp`, {
  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/business-profile/crawls/$ID

One crawl: pages read, claims with their quotes, what changed, the trace

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile/crawls/${id}`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();
```

### GET /v1/business-profile/icp-draft

The ICP rules your accepted profile proposes (roles, industries, sizes) and what applying them to an ICP would change

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile/icp-draft`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();
```

### GET /v1/business-profile/proposals

Proposals for knowledge-base sections, pending first, each with its sources and a diff against the section as it is now

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile/proposals`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();
```

### POST /v1/business-profile/proposals/$ID/reject

Reject a proposal (the section stays as it is)

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile/proposals/${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/business-profile/rebuild

Read your site again and propose changes (owner; runs in the background; nothing reaches the knowledge base until a person accepts it)

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile/rebuild`, {
  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/business-profile/site

Set your organization's own website (owner)

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

```js
const res = await fetch(`https://api.closefinch.com/v1/business-profile/site`, {
  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/knowledge-proposals

Every proposal for the knowledge base in one queue (your site, brand voice, proof points, interview syntheses), each with its sources and the route that decides it

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

```js
const res = await fetch(`https://api.closefinch.com/v1/knowledge-proposals`, {
  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).
