Skip to content

API reference

API: Vendors

Markdown version

MethodPathWhat it doesScope
GET/v1/ad-audiencesAd audiences synced from segments, with status and match rate per destinationsequences:read
POST/v1/ad-audiencesCreate an ad audience from a segment (a list of contacts); nothing is uploaded until an organization owner approves (web app only)sequences:write
POST/v1/ad-audiences/:id/approveApprove the first upload (hashed emails) to the ad platform (an organization owner, signed in) (web app only)sequences:write
POST/v1/ad-audiences/:id/archiveArchive an audience: everyone in it is removed at the platform first (an organization owner, signed in) (web app only)sequences:write
POST/v1/ad-audiences/:id/pausePause or resume syncing an audience (web app only)sequences:write
GET/v1/external-campaignsDraft and live campaigns in external sequencers (Instantly, Smartlead)sequences:read
POST/v1/external-campaignsCreate a draft campaign in Instantly or Smartlead from a sequence's copy, and upload the eligible people (exclusions are reported) (web app only)sequences:write
GET/v1/external-campaigns/:idA campaign with its leads (uploaded, excluded and why, replied, bounced, unsubscribed, removed)sequences:read
POST/v1/external-campaigns/:id/activateLaunch the campaign in the vendor (an organization owner, signed in, confirming the lead count they saw) (web app only)messages:send
GET/v1/external-campaigns/:id/activationWhat launching would send: lead count, copy, schedule and the vendor's sending accountssequences:read
POST/v1/external-campaigns/:id/leadsUpload more people (a list or contacts); people already uploaded are skipped (web app only)messages:send
POST/v1/external-campaigns/:id/pausePause the campaign in the vendorsequences:write
GET/v1/giftsGifts asked for (yours; everyone's for an organization owner) and their statussequences:read
POST/v1/giftsAsk for a gift for a contact (an organization owner approves the item, cost, recipient and reason before it's sent) (web app only)sequences:write
POST/v1/gifts/:id/decideApprove (send through Sendoso) or reject a gift (an organization owner, signed in) (web app only)sequences:write
GET/v1/linkedin/commentsLinkedIn comments drafted for you (waiting for your approval, and done)sequences:read
POST/v1/linkedin/comments/:id/decideApprove (post it from your LinkedIn account; you may edit it) or reject a drafted comment (web app only)messages:send
POST/v1/linkedin/refreshFill in names and headlines on contacts you're connected to on LinkedIn (once a day) (web app only)contacts:write
GET/v1/sending-domainsSending domains: source, mailboxes, cost, renewal date and statussettings:read
POST/v1/sending-domainsBuy a sending domain at Cloudflare (an organization owner approving the live price, the renewal price, and that it can't be refunded) (web app only)settings:write
POST/v1/sending-domains/:id/cancelStop tracking a domain (and how to cancel it at the registrar or vendor) (web app only)settings:write
POST/v1/sending-domains/:id/paidAn Instantly order that needed checkout is paid (an organization owner) (web app only)settings:write
POST/v1/sending-domains/candidatesLookalikes of one of your own domains, with live availability and prices (Cloudflare Registrar) (web app only)settings:write
POST/v1/sending-domains/instantly-ordersQuote (no approve_total) or buy (an organization owner approving the quoted total) an Instantly done-for-you or pre-warmed domain (web app only)settings:write
GET/v1/sending-domains/prewarmedPre-warmed domains Instantly offers (provider per domain; an owner, signed in) (web app only)settings:write
GET/v1/sending-domains/verificationThe DNS TXT record proving you control a primary domain (needed before lookalikes of it)settings:read
GET/v1/vendorsPaid vendors this organization can connect with its own account (never the credentials)settings:read
PUT/v1/vendors/:vendorConnect, turn on or off, or configure a paid vendor with your own credentials (organization owners, signed in; stored encrypted) (web app only)integrations:write
POST/v1/vendors/:vendor/checkCheck the saved credentials with a harmless read (web app only)integrations:write
DELETE/v1/vendors/:vendor/credentialsRemove a vendor's credentials (turns it off) (web app only)integrations:write
POST/v1/vendors/unipile/webhooksRegister this organization's Unipile webhooks (acceptances, messages) for its mapped LinkedIn accounts (web app only)integrations:write
GET/v1/warmupWarmup per mailbox (ramping, ready, cooling down, paused, not in the vendor) with today's cap; and the risksettings:read

Examples

GET /v1/ad-audiences

Ad audiences synced from segments, with status and match rate per destination

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

GET /v1/external-campaigns

Draft and live campaigns in external sequencers (Instantly, Smartlead)

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

GET /v1/external-campaigns/$ID

A campaign with its leads (uploaded, excluded and why, replied, bounced, unsubscribed, removed)

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

GET /v1/external-campaigns/$ID/activation

What launching would send: lead count, copy, schedule and the vendor's sending accounts

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

POST /v1/external-campaigns/$ID/pause

Pause the campaign in the vendor

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

Gifts asked for (yours; everyone's for an organization owner) and their status

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

GET /v1/linkedin/comments

LinkedIn comments drafted for you (waiting for your approval, and done)

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

GET /v1/sending-domains

Sending domains: source, mailboxes, cost, renewal date and status

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

GET /v1/sending-domains/verification

The DNS TXT record proving you control a primary domain (needed before lookalikes of it)

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

GET /v1/vendors

Paid vendors this organization can connect with its own account (never the credentials)

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

GET /v1/warmup

Warmup per mailbox (ramping, ready, cooling down, paused, not in the vendor) with today's cap; and the risk

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