How tools behave
These apply to every tool, on this page and on Sequencer tools.- One tool, one request. A tool sends one request to
https://client-api.salesfinity.cowith your API key and returns the response body as JSON text, unchanged. - Arguments are checked first. The server validates arguments against the tool’s schema before sending anything, so a missing required parameter or a value outside an enum fails without reaching the API. Arguments a tool does not list are dropped, not forwarded.
- Errors come back as tool errors. A failed request returns an error whose text is
Salesfinity API error: <status> - <message>, with the API’s own message, for exampleSalesfinity API error: 404 - Contact list not found. The errors page explains each status. - Requests time out after 60 seconds. The tool then fails with a message saying the API did not respond. For anything other than a read, the message adds that the change may still have been applied: check before calling the tool again.
- Short rate limits are waited out. When the team is over its rate limit, the
server waits out a
Retry-Afterof up to 30 seconds and sends the same request once more. A longer wait, or a second 429, comes back as an error that says how many seconds to wait. The limit is per team, so other integrations on the same team use the same budget. - Only Sequencer writes are deduplicated. Each Sequencer
POST, apart from the three previews, carries a newIdempotency-Key, and the automatic rate-limit retry reuses it. A tool call the assistant repeats is a new request with a new key, and writes outside the Sequencer, such ascreate_contact_list, carry no key at all. - Writes say who is acting. An API key identifies a team, not a person. Tools that record an author or an
owner take a
user_id, which must belong to a member of the team;get_teamlists them.
Contact lists
These tools work on a list’s saved contacts. Each list also has a dialing queue, which is what the dialer works through. Creating a list fills both. Adding, removing and merging contacts change only the saved contacts, andreimport_contacts copies them into the queue.
get_contact_lists
List the team’s contact lists, with pagination. Returns list metadata only; useget_contact_list_by_id to see
the contacts inside a list. These are the lists the other tools in this group create and edit; lists synced from a
CRM integration are not included.
Calls GET /v1/contact-lists/csv.
get_contact_list_by_id
Get one contact list with its saved contacts. Searching, sorting and paging apply to the contacts inside the list. CallsGET /v1/contact-lists/csv/{id}.
create_contact_list
Create a contact list owned by a team member, with its contacts. The new list’s dialing queue is filled at the same time, so there is no need to callreimport_contacts afterwards.
Calls POST /v1/contact-lists.
add_contact_to_list
Add one contact to a list’s saved contacts. Withouttag, it reaches the dialing queue the next time
you call reimport_contacts, so add every contact first and reimport once.
With tag, the contact goes to the top of the list and of its dialing queue at once, with no reimport.
If the list’s owner is dialing that list, it is their next call, right after the call in progress. If
the list already holds the person (same email, or same phone number and first name), that contact moves
to the top and takes the tag instead of a second one being added. See
Call a contact next.
Calls POST /v1/contact-lists/{id}.
remove_contact_from_list
Remove a contact from a list’s saved contacts. The dialing queue drops it the next time you callreimport_contacts.
Calls DELETE /v1/contact-lists/{id}/contacts/{contactId}.
merge_contact_lists
Append the saved contacts of one or more source lists to a target list. Contacts are copied as they are, so duplicates are not removed, and they reach the target’s dialing queue the next time you callreimport_contacts.
Calls POST /v1/contact-lists/{id}/merge.
delete_contact_list
Permanently delete a contact list, its saved contacts and its dialing queue. This cannot be undone. CallsDELETE /v1/contact-lists/csv/{id}.
reimport_contacts
Replace a list’s dialing queue with its full set of saved contacts. Call it after adding, removing or merging contacts, or to reset a partly dialed list to its original state. CallsPOST /v1/contact-lists/csv/{id}/reimport.
Notes
Freeform notes on a person or a company. The target is matched by identifiers such as a LinkedIn URL, an email address or a website, not by contact or list IDs.create_note
Create a note on a person or a company. If no record matches the identifiers you give, a minimal one is created and the note is attached to it. A person note needs at least one oflinkedin_url, email, crm_id or phone;
a company note needs website_url or name.
Calls POST /v2/notes.
list_notes
List every note on a person or a company, pinned notes first, then newest first. It only reads: if no record matches the identifiers, it returns 404 rather than creating one. Takes the same identifier rules ascreate_note.
Calls GET /v2/notes.
update_note
Replace the text of a note. Only the note’s author may edit it; anyone else gets 403. CallsPATCH /v2/notes/{id}.
delete_note
Delete a note. Only the note’s author may delete it; anyone else gets 403. CallsDELETE /v2/notes/{id}.
toggle_pin_note
Pin a note, or unpin it if it is already pinned. Any team member may do this, not only the author. Pinned notes sort to the top oflist_notes.
Calls POST /v2/notes/{id}/pin.
Enrichment
Asynchronous phone and email lookups for a LinkedIn profile, searched across Salesfinity’s data network. A lookup that finds something costs one credit from the team’s shared balance; one that finds nothing is free. Polling a request never charges it again.enrich_email
Start a lookup of a work or personal email address. Returns at once with a request_id and status pending;
poll it with get_email_enrichment, or pass a callback_url. Costs 1 credit when an email is found. Refused with
402 when the team has no credits, so check get_enrichment_credits before a large batch.
Calls POST /v1/api/enrichment/email.
get_email_enrichment
Get the current state of an email lookup. Status ispending until the lookup resolves, then completed (the
address is in the emails array) or not-found (emails is empty). Safe to call repeatedly; polling is never
charged.
Calls GET /v1/api/enrichment/email/{id}.
enrich_phone
Start a lookup of mobile and direct-dial numbers. Returns at once with a request_id and status pending; poll
it with get_phone_enrichment, or pass a callback_url. The lookup finishes on the first number that is valid,
not a landline and not graded P3. Costs 1 credit when at least one number comes back. Refused with 402 when the team has
no credits.
Calls POST /v1/api/enrichment/phone.
get_phone_enrichment
Get the current state of a phone lookup. Status ispending until the lookup resolves, then completed or
not-found; a phone lookup never ends as failed. phone_numbers is filled only when the status is completed,
and holds every number on file for the profile, each with its E.164 number, country_code, type (mobile,
direct or office) and a validation object (is_valid, carrier, line_type, likely_to_answer from P1 to
P3, score). Filter on validation rather than dialing every entry. Safe to call repeatedly; polling is never
charged.
Calls GET /v1/api/enrichment/phone/{id}.
get_enrichment_credits
Get the team’s remaining enrichment credits. Email and phone lookups draw on this one balance, andenrich_email and enrich_phone are refused with 402 when it reaches zero.
Calls GET /v1/api/enrichment/credits.
Takes no parameters.
Team
get_team
Get the team’s name and its members. Each member’suser._id is the user ID that other tools take as user_id,
user or user_ids, alongside their name, email, status and license. Takes no parameters.
Calls GET /v1/team.
Call logs
get_call_logs
Search and filter the team’s call history, newest first. The tool sends every filter in thefilters[...] form the
operation expects. Rows leave out the transcript unless include_transcript is true; get_call_log_by_id always
includes it.
Calls GET /v1/call-log.
get_call_log_by_id
Get one call log, with its contact, disposition, recording, transcript and summary. CallsGET /v1/call-log/{id}.
Scored calls
get_scored_calls
List AI-scored calls with their insight: the total score, a score for each facet, coaching recommendations and the call they belong to. CallsGET /v1/scored-calls.
get_scored_call_by_id
Get one scored call with its full AI insight, facet scores and recommendations. CallsGET /v1/scored-calls/{id}.
Dispositions
get_dispositions
Get the call dispositions available to the team, default and custom. Each one’s numericid is the value
get_call_logs and the analytics tools filter on.
Calls GET /v1/dispositions.
get_disposition_by_id
Get one disposition. CallsGET /v1/dispositions/{id}.
CRM sequences
These are the sequence names seen on the team’s call logs, from an external CRM or sales engagement platform. They are not the Salesfinity Sequencer, which has its own tools.get_sequences
List the CRM sequences seen on the team’s call logs, with how often and how recently each was used. Each one’sid is the value get_call_logs takes in sequences.
Calls GET /v1/sequences.
get_sequence_by_id
Get one CRM sequence. CallsGET /v1/sequences/{id}.
Snoozed contacts
get_snoozed_contacts
List snoozed contacts, each with the team member it belongs to and itssnooze_until date.
Calls GET /v1/snoozed-contacts.
get_snoozed_contact_by_id
Get one snoozed contact by its ID. CallsGET /v1/snoozed-contacts/{id}.
get_snoozed_contact_by_linkedin
Look up a snoozed contact by LinkedIn username. Its_id is the ID the other snooze tools take.
Calls GET /v1/snoozed-contacts/by-linkedin/{username}.
update_snoozed_contact
Change the identifiers stored on a snooze record, or move the date it ends withsnooze_until. To end a snooze now, use
delete_snoozed_contact.
Calls PUT /v1/snoozed-contacts/{id}.
delete_snoozed_contact
Delete a snooze record. Lists imported into the dialer afterwards no longer mark the contact as snoozed; a list already imported keeps the marking until it is imported again. CallsDELETE /v1/snoozed-contacts/{id}.
Follow-up tasks
get_follow_ups
List the team’s follow-up tasks, each with its contact, priority,follow_up_date and whether it is overdue.
Calls GET /v1/follow-up.
Custom fields
get_custom_fields
Get the team’s custom field mappings: for each connected source, how its fields map to the names Salesfinity shows (internal_name). Contact custom_fields are free text; to match the fields a CRM import creates, use a mapping’s
internal_name as the label. Takes no parameters.
Calls GET /v1/custom-fields.
Analytics
The three analytics tools count whole UTC days:start_date runs from 00:00 UTC on its date and end_date to the
end of its date. Results are cached for up to 5 minutes.
get_analytics_overview
Get the team’s totals for a period, such as calls, connected calls, conversations and meetings set, each with its growth rate against the previous period of the same length. CallsGET /v1/analytics/overview.
get_list_performance
Get the same metrics broken down by contact list. CallsGET /v1/analytics/list-performance.
get_sdr_performance
Get the same metrics broken down by SDR. CallsGET /v1/analytics/sdr-performance.
Contact object
The fieldscreate_contact_list takes for each contact and add_contact_to_list takes directly. Length limits are
enforced by the API.
Next steps
Sequencer tools
The tools that build sequences, enroll people and work tasks.
Browse use cases
Ready-to-paste prompts that put these tools to work.