Skip to content

API reference

API: Dialer

Markdown version

MethodPathWhat it doesScope
POST/v1/dialer/browser-tokenA short-lived login token for this browser's audio (your own Telnyx credential on the organization's credential connection); start a session with rep_audio: browser (web app only)calls:write
GET/v1/dialer/crm-logsCalls logged to the connected CRMs (HubSpot calls, Salesforce call Tasks): status, the CRM's id, or why not. Owners see every call; others only their owncalls:read
PUT/v1/dialer/dispositionsAdd or change a disposition by code (owner): its kind (connect, meeting, no connect, do not call) and the HubSpot call outcome id and Salesforce CallDisposition it maps tosettings:write
GET/v1/dialer/items/:id/contextResearch context and the call guide for a number: the contact, account, open deals, last touches, the latest research brief, an opener and talk track, and live cards (questions, objections, competitors with knowledge-base answers) during the callcalls:read
POST/v1/dialer/items/:id/dispositionAfter a call: the disposition (one of the org's) and notes. They go on the call activity, which is logged to the CRM; "do not call" records the opt-out. Then continue, pause or endcalls:write
POST/v1/dialer/items/:id/skipSkip a number that hasn't been dialedcalls:write
POST/v1/dialer/items/:id/stop-recordingStop recording this call (the prospect asked not to be recorded): the call goes on; the recording and transcript aren't keptcalls:write
GET/v1/dialer/sessionsYour dialing sessions (newest first)calls:read
POST/v1/dialer/sessionsStart dialing: click (one number), power (one at a time, with a preview) or parallel (several lines, if an owner turned it on). Your own confirmed phone rings first: press 1, then each answered call is bridged to you. Every number goes through the calling rulesmessages:send
GET/v1/dialer/sessions/:idA session: its state, each number and what happenedcalls:read
POST/v1/dialer/sessions/:id/endEnd the session: every live leg (yours too) is hung upcalls:write
POST/v1/dialer/sessions/:id/pausePause dialing (a live call goes on)calls:write
POST/v1/dialer/sessions/:id/resumeResume dialingmessages:send
GET/v1/dialer/settingsDialer settings, the org's dispositions and the abandonment meter (parallel dialing: at most 3% of answered calls abandoned over 30 days)calls:read
PUT/v1/dialer/settingsChange the dialer settings (owner). Turning parallel dialing on needs legal_review_done: true, which is recordedsettings:write

Examples

GET /v1/dialer/crm-logs

Calls logged to the connected CRMs (HubSpot calls, Salesforce call Tasks): status, the CRM's id, or why not. Owners see every call; others only their own

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

PUT /v1/dialer/dispositions

Add or change a disposition by code (owner): its kind (connect, meeting, no connect, do not call) and the HubSpot call outcome id and Salesforce CallDisposition it maps to

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

Research context and the call guide for a number: the contact, account, open deals, last touches, the latest research brief, an opener and talk track, and live cards (questions, objections, competitors with knowledge-base answers) during the call

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

POST /v1/dialer/items/$ID/disposition

After a call: the disposition (one of the org's) and notes. They go on the call activity, which is logged to the CRM; "do not call" records the opt-out. Then continue, pause or end

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

Skip a number that hasn't been dialed

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

Stop recording this call (the prospect asked not to be recorded): the call goes on; the recording and transcript aren't kept

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

Your dialing sessions (newest first)

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

POST /v1/dialer/sessions

Start dialing: click (one number), power (one at a time, with a preview) or parallel (several lines, if an owner turned it on). Your own confirmed phone rings first: press 1, then each answered call is bridged to you. Every number goes through the calling rules

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

A session: its state, each number and what happened

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

POST /v1/dialer/sessions/$ID/end

End the session: every live leg (yours too) is hung up

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

Pause dialing (a live call goes on)

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

POST /v1/dialer/sessions/$ID/resume

Resume dialing

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

Dialer settings, the org's dispositions and the abandonment meter (parallel dialing: at most 3% of answered calls abandoned over 30 days)

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

PUT /v1/dialer/settings

Change the dialer settings (owner). Turning parallel dialing on needs legal_review_done: true, which is recorded

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

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.