Skip to main content
Connect Salesfinity to your own systems: push lists in, pull call outcomes out, and run sequences from your code. Your first call takes about five minutes and needs only an API key. If you want an AI assistant to do the work instead of writing code, use the MCP server. It gives Claude and other assistants the same abilities as the API.

Choose how you connect

REST API

JSON over HTTPS. Best for backend jobs, data sync and your own product.

MCP server

Ask Claude or another assistant to read and change your Salesfinity data.

OpenAPI description

Every operation, typed. Generate a client or feed it to your tools.

Quickstart: make your first call

1

Get an API key

  1. In Salesfinity, open Settings → Connections, then the API & Webhooks tab.
  2. Click Create New API Key.
  3. Copy the key and store it in your secret manager. Treat it like a password: the dashboard shows it only once. If you lose it, create a new one.
A key belongs to one team. Every request made with it sees only that team’s lists, calls and analytics. There is no account-wide key, so an integration that serves several teams needs one key per team.
2

Make your first call

Every request sends the key in the x-api-key header. The cheapest way to test a key is to read the team it belongs to.
3

Check the response

A working key returns your team under data, with each member’s user record. Keep the member user._id values: writes that act as a person, such as creating a list or writing a note, take one as user_id.A missing or wrong key returns 403 with a JSON body, not an HTML page:
You’re done when GET /v1/team returns your team name and its members. Next, list your contact lists with GET /v1/contact-lists/csv.
Keys are long-lived and do not expire on a schedule. Rotate a key from the same settings screen when someone with access leaves, or if a key is ever committed to source control.

What you can build

Each card links to the operation or guide that does the job.

Load lists from your own data

Create a contact list from your warehouse or CRM export. Creating it also fills its dialing queue.

Sync call outcomes to your warehouse

Page through call logs with date and rep filters, and keep your reporting up to date.

Get calls and replies pushed to you

Webhooks POST call, snooze and Sequencer events to your server as they happen.

Find a phone or email from your app

Start a lookup for a LinkedIn profile and get the result by callback or by polling.

Run sequences from your system

Build a cadence, enroll people and work the task queue end to end. Sequencer is in early access.

Report on your team in Claude

Connect the MCP server and ask questions about calls, reps and lists in plain language.

Build the client

There is no official Salesfinity SDK. The API is fully described by an OpenAPI document, so you can write a thin client by hand or generate one.

Generate a client from the OpenAPI description

The description is at /api-reference/openapi.json. Every operation has a unique operationId, which becomes the method name in most generators.

Conventions worth encoding once

Retries

Retry on 429 and 5xx with exponential backoff and jitter. On a 429, wait at least the number of seconds in the Retry-After header. Do not retry 400, 402, 403, 404, 413 or 422 — none of them succeed on a second identical attempt. Allow at least 60 seconds before timing out a request: a Sequencer call can take up to 55 seconds before the API answers 504. Outside the Sequencer, POST endpoints are not idempotent, so cap retries and confirm state with a GET before retrying a create. Sequencer writes (POST /v2/sequencer/*, except the /preview endpoints) accept an Idempotency-Key header that makes a retry safe. A write that fails frees its key, so after a 5xx on a create, check with a GET before retrying. See Retrying writes safely.

Rate limits

Limits are per team: every API key on the team shares them. Per minute, the Sequencer allows 600 reads and 300 writes, the heavy reporting reads (the call-log and scored-call lists, analytics, and CRM sequences) allow 120, and everything else allows 1200. Every authenticated response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, so a bulk job can pace itself instead of waiting for a 429. See Rate limits for the routes in each bucket.

Test safely

There is no separate sandbox host. https://client-api.salesfinity.co is the only public API host, and it works on live data. Build your test plan around that.
GET /v1/team, GET /v1/dispositions, GET /v1/custom-fields and the analytics endpoints have no side effects. They still count toward the rate limits, and analytics shares the 120-per-minute heavy-reads budget.
Generate a key for a team that is not actively dialing, so writes cannot disturb a live queue. Creating a contact list gives you an isolated target for add, remove and merge calls that you can delete afterwards.
Creating a list also creates its dialing queue with the contacts you send. Reimporting a list replaces its dialing queue with its saved contacts. Deleting a list deletes its dialing queue, and so does merging with delete_sources for each source list. Adding, removing and merging contacts change only the saved list, which reaches the dialing queue at the next reimport.
A Sequencer sequence is created disabled. Enabling it starts the cadence for everyone enrolled, and its email steps send real email from your team’s mailboxes. The three /preview endpoints change nothing, so use them to check an enrollment, a rule set or a template first.
Set the enrichment callback_url to a test endpoint while developing, so results are not POSTed at a production handler. It must be a public http or https URL: localhost and private, loopback or link-local IP addresses are rejected with 400. Expose a local handler through a tunnel or use a request-inspection service.
Enrichment endpoints spend real credits. POST /v1/api/enrichment/email and POST /v1/api/enrichment/phone each cost one credit when the lookup returns a result, drawn from the team enrichment credits, which are separate from the SmartEnrich credits members spend in the dialer. A lookup that finds nothing costs nothing. Both return 402 Payment Required once the team’s balance reaches zero. Check the credit balance before a bulk run.

Receive events

Webhooks push call, snooze and Sequencer events to your server as they happen, so you do not have to poll. Create a subscription in the dashboard under Settings → Connections → API & Webhooks. Every delivery carries an x-salesfinity-event-id that stays the same across retries, so make your receiver skip IDs it has already processed. The events, payload shape and delivery rules are in Webhooks.

Build with the Sequencer API

The Sequencer API runs outreach end to end: sequences, steps, templates, enrollments, tasks, suppression and rules of engagement. The Sequencer is in early access, so check the changelog for changes that can affect an integration. Start with Run a sequence over the API.

Machine-readable resources

The server card describes a server for searching these docs. The Salesfinity MCP server, which works with your team’s data, is at https://mcp.salesfinity.ai/mcp; its tools are listed in the MCP tool reference. Every documentation page is also available as Markdown. Append .md to the URL, or send an Accept: text/markdown request header:

Get help

Email [email protected] or visit the help center. When you report an API problem, include the request_id from the error body (or the X-Request-Id response header), the request path, the timestamp, and the error and statusCode. Never include your API key.

Next steps

Read the API reference

Authentication, pagination, webhooks and every operation in one place.

Handle errors and retries

What each status means and what your client should do about it.

Connect Claude to Salesfinity

Let an assistant read and change your data through the MCP server.

Run a sequence over the API

Create a cadence, enroll people and work the tasks it makes.