Skip to content

API reference

API: Signals

Markdown version

MethodPathWhat it doesScope
GET/v1/accounts/:id/signalsAn account's signal fields, the score's breakdown and its dated why-now evidenceaccounts:read
GET/v1/community/hitsDetections: people and companies on event lists, podcast guests, reviews and GitHub activity, with the match and the quotesignals:read
POST/v1/community/hits/:id/metMark (or unmark) a person on an event list as met: they go on the follow-up listsignals:write
GET/v1/community/podcast-searchFind podcast feeds by name (the free iTunes Search API; your words are sent to Apple)signals:read
GET/v1/community/review-sitesReview sites we checked: terms URL, date checked, allowed or not, and whysignals:read
GET/v1/community/sourcesRegistered community sources (events, podcasts, review sources with their terms status, GitHub repositories) with detection countssignals:read
POST/v1/community/sourcesRegister a source: a public event page (or a CSV-only event), a podcast RSS feed, a review page whose terms allow reading (or a paste-only review source), or a GitHub repositorysignals:write
DELETE/v1/community/sources/:idRemove a source and its detections (signals already fired stay)signals:write
PATCH/v1/community/sources/:idPause or resume a source, rename it, or record a review site's terms check (terms URL, allowed yes/no, note)signals:write
POST/v1/community/sources/:id/csvImport an event's attendee, speaker or sponsor list (CSV), matched by email, then name and company, then companysignals:write
POST/v1/community/sources/:id/pollCheck a source now, in the background (one community job at a time per organization; once a minute per source). Poll the sources list: pending drops to 0 when it's donesignals:write
POST/v1/community/sources/:id/reviewsPaste reviews or import them as CSV; they're analysed in the background (named pains with the reviewer's words, role, company size, us or a competitor). Poll the sources list until pending is 0signals:write
GET/v1/signal-eventsThe feed: signals across monitors, newest first (unread = new)signals:read
POST/v1/signal-events/:id/:actionMark a signal seen, dismiss it (it stops counting toward the score) or restore itsignals:write
POST/v1/signal-events/seenMark every new signal seensignals:write
GET/v1/signal-presetsBuilt-in monitors you can turn on with one click, and the cadence choicessignals:read
POST/v1/signal-presets/:key/enableTurn on a built-in monitor (presets that read the web take an audience: a list, an ICP or chosen accounts)signals:write
GET/v1/signalsMonitors (the All view): schedule, status, last and next run, activity in the last 7 and 30 dayssignals:read
POST/v1/signalsCreate a monitor (a draft: test it, then turn it on)signals:write
DELETE/v1/signals/:idDelete a monitor and the signals it found (owner)settings:write
GET/v1/signals/:idOne monitorsignals:read
PATCH/v1/signals/:idEdit a monitor (rule, strength, schedule, audience)signals:write
POST/v1/signals/:id/runRun a monitor now (also a paused or draft one). CRM monitors run at once; news monitors are queued.signals:write
POST/v1/signals/:id/stateTurn a monitor on or pause itsignals:write
POST/v1/signals/:id/testDry run: what the monitor would find now (saves nothing; public-event monitors check up to 5 accounts)signals:write
POST/v1/signals/compileTurn a plain-English description into a monitor rule you can review and edit (nothing is saved)signals:write
GET/v1/target-accountsAccounts with their score, status, signals and latest signal, sortable and filterableaccounts:read

Examples

GET /v1/accounts/$ID/signals

An account's signal fields, the score's breakdown and its dated why-now evidence

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

GET /v1/community/hits

Detections: people and companies on event lists, podcast guests, reviews and GitHub activity, with the match and the quote

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

POST /v1/community/hits/$ID/met

Mark (or unmark) a person on an event list as met: they go on the follow-up list

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

Find podcast feeds by name (the free iTunes Search API; your words are sent to Apple)

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

GET /v1/community/review-sites

Review sites we checked: terms URL, date checked, allowed or not, and why

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

GET /v1/community/sources

Registered community sources (events, podcasts, review sources with their terms status, GitHub repositories) with detection counts

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

POST /v1/community/sources

Register a source: a public event page (or a CSV-only event), a podcast RSS feed, a review page whose terms allow reading (or a paste-only review source), or a GitHub repository

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

DELETE /v1/community/sources/$ID

Remove a source and its detections (signals already fired stay)

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

PATCH /v1/community/sources/$ID

Pause or resume a source, rename it, or record a review site's terms check (terms URL, allowed yes/no, note)

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

Import an event's attendee, speaker or sponsor list (CSV), matched by email, then name and company, then company

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

Check a source now, in the background (one community job at a time per organization; once a minute per source). Poll the sources list: pending drops to 0 when it's done

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

Paste reviews or import them as CSV; they're analysed in the background (named pains with the reviewer's words, role, company size, us or a competitor). Poll the sources list until pending is 0

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

The feed: signals across monitors, newest first (unread = new)

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

POST /v1/signal-events/$ID/$ACTION

Mark a signal seen, dismiss it (it stops counting toward the score) or restore it

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

Mark every new signal seen

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

Built-in monitors you can turn on with one click, and the cadence choices

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

POST /v1/signal-presets/$KEY/enable

Turn on a built-in monitor (presets that read the web take an audience: a list, an ICP or chosen accounts)

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

Monitors (the All view): schedule, status, last and next run, activity in the last 7 and 30 days

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

POST /v1/signals

Create a monitor (a draft: test it, then turn it on)

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

DELETE /v1/signals/$ID

Delete a monitor and the signals it found (owner)

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

GET /v1/signals/$ID

One monitor

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

PATCH /v1/signals/$ID

Edit a monitor (rule, strength, schedule, audience)

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

Run a monitor now (also a paused or draft one). CRM monitors run at once; news monitors are queued.

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

POST /v1/signals/$ID/state

Turn a monitor on or pause it

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

Dry run: what the monitor would find now (saves nothing; public-event monitors check up to 5 accounts)

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

Turn a plain-English description into a monitor rule you can review and edit (nothing is saved)

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

Accounts with their score, status, signals and latest signal, sortable and filterable

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