API review

Saleshandy API review

Cold-email sequencer bundled with the Lead Finder B2B database (852M+ contacts, 9-provider waterfall), with unlimited mailboxes, a REST API on every plan, an official MCP server and a CLI. Best for budget all-in-one: sending + verified contact data on one plan.

Verified 25 Oct 2026 · 115 endpoints listed · Official MCP server

What a call costs

The actions you pay for, as Saleshandy prices them.

ActionCostPer
Reveal verified work email1Lead Finder credit
Reveal verified mobile phone6Lead Finder credits (7 with email)
Enrich one company (POST /v1/enrich/company)0.1Lead Finder credit per company (measured: creditsCharged 0.1, balance 50 → 49.9)
Lead Finder credit top-up$13 / $25 / $50 / $100 / $180 / $320 / $800 / $1,600500 / 1k / 2.5k / 5k / 10k / 20k / 50k / 100k credits

Pricing, plan by plan

US dollars, as Saleshandy's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Free tier 7-day free trial, no credit card, trial sending capped at 100 emails; the trial account shows 50 Lead Finder credits and 2,000 active prospects (in-app Billing, our trial 2026-10-25)

Starter

$41/mo

billed monthly

$34/mo

billed annually

1 user, 2,000 active prospects, 6,000 emails/mo, 1,500 Lead Finder credits/mo

API included
Plan details

Lead Finder top-ups from $13/500 credits

Pro

$99/mo

billed monthly

$76/mo

billed annually

10 users, 30,000 active prospects, 100,000 emails/mo, 4,000 Lead Finder credits/mo; adds webhooks, CRM and no-code integrations

API included
Plan details

top-up packs

Scale 200K

$189/mo

billed monthly

$149/mo

billed annually

unlimited users and active prospects, 200,000 emails/mo, 8,000 Lead Finder credits/mo, white-label

API included
Plan details

300K emails $299/$239; 600K $599/$479; custom = sales

Rate limits

Docs publish no numeric REST limit ('fair usage limits').

More on limitsLess

Live REST responses on our trial carried x-ratelimit-limit: 20 with x-ratelimit-reset on the next minute boundary, plus x-ratelimit-global-limit: 300 (window not stated). Enrichment has separate per-account per-minute/hour/day limits readable via GET /v1/enrich/rate-limits: our trial returned 60/min, 3,000/hour, 50,000/day (the spec example shows 30 / 1,000 / 10,000). Sending limits are per mailbox (daily sending limit settings).

How to get an API key

Saleshandy uses API key. The steps below follow Saleshandy's own docs.

  1. Create a Saleshandy account. API access starts on the Starter plan.
  2. my.saleshandy.com -> Settings -> API Key -> Create API Key (shown once; label with letters, numbers, hyphens).
  3. Send it with every request: header (x-api-key).
  4. Make a first call: To import new prospects. Keep the key in an environment variable, never in the command.
    curl -X POST "https://open-api.saleshandy.com/v1/prospects/import" \
      -H "x-api-key: $SALESHANDY_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{}'

Where the docs live

WhatWhere
Documentationdeveloper.saleshandy.com/api-reference/introduction
API referencedeveloper.saleshandy.com/api-reference/introduction
OpenAPI specdeveloper.saleshandy.com/openapi.json
llms.txtsaleshandy.com/llms.txt
Base URLhttps://open-api.saleshandy.com
MCP serverhttps://mcp.saleshandy.com/mcp
SDKs@saleshandy/saleshandy-cli (npm, official, Node 18+, multi-profile)

Strengths and limits

Where it fits

  • Budget all-in-one: sending + verified contact data on one plan
  • Agencies on Scale (unlimited users/teams, white-label)
  • Agent workflows via official MCP (OAuth or API key) and npm CLI
  • Leads-to-email workflows: CSV or domains in, enriched contacts into a sequence

Where it falls short

  • Starter-plan integrations: no webhooks, Zapier/Make/n8n or CRM sync below Pro
  • High-throughput enrichment without checking the per-account enrichment rate limits
  • Teams needing a documented general REST rate limit: the docs say only 'fair usage'; live responses carry x-ratelimit-limit 20 per minute window and x-ratelimit-global-limit 300 (our trial, 2026-10-25)

Worth knowing

  • Starter ($41) includes API and MCP but NOT webhooks, Zapier/Make/n8n or CRM integrations; those start at Pro ($99).
  • Help-centre 'Saleshandy API' article still says 'Saleshandy currently doesn't offer Webhook', which is stale: webhooks and /v1/webhook endpoints exist.
  • MCP auth differs between sources: developer docs say OAuth (or an api-key header); the help-centre article puts the API key in the URL path. Prefer OAuth/header so the key is not in a URL.
  • Lead Finder credits do not roll over; annual billing deposits the whole year up front.
  • No published general REST rate limit; live responses show x-ratelimit-limit 20 per minute window and a global 300, and enrichment limits differ by account (trial: 60/min, 3,000/h, 50,000/day vs spec example 30 / 1,000 / 10,000), so read GET /v1/enrich/rate-limits and the headers before bulk work.
4 moreShow fewer
  • Prospect import 'Bad Request: prospectList must be a valid prospect item' is fixed by setting conflictAction to addMissingFields, per support FAQ.
  • The docs give the base URL as open-api.saleshandy.com/v1 while every spec path already starts with /v1; join host + spec path, never base + path, or you get /v1/v1/.
  • Enrichment POSTs return HTTP 201 with a requestId, not the 200 the OpenAPI spec documents; treat any 2xx as accepted.
  • The MCP exposes tools with no REST equivalent in the public spec (delete_sequence, delete_step, create_dnc_list).

Who should use it

Use Saleshandy for
Budget all-in-one: sending + verified contact data on one plan
Look elsewhere for
Starter-plan integrations: no webhooks, Zapier/Make/n8n or CRM sync below Pro

If Saleshandy is not the answer

Other Email sending tools in this directory, each with its own review.

Before you build

Four things to settle first, each read off Saleshandy's own pages.

  • Confirm the API is on your planAPI access starts on the Starter plan. Free tier: 7-day free trial, no credit card, trial sending capped at 100 emails.
  • Keep the key out of your codeAPI key. It is sent as: header (x-api-key).
  • Design around the rate limitDocs publish no numeric REST limit ('fair usage limits').
  • Know the catch before you scaleStarter ($41) includes API and MCP but NOT webhooks, Zapier/Make/n8n or CRM integrations; those start at Pro ($99).

Want us to build it for you?

Tell us what you want Saleshandy to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.

Read from saleshandy.com/pricing.md and developer.saleshandy.com/api-reference/introduction. Verified 25 Oct 2026.

All 115 endpointsFor developers: method, path, what it does and what it costs.

Base URL: open-api.saleshandy.com

Bulk and async: Prospect import returns a requestId to poll (GET /v1/prospects/import-status/{requestId}); enrichment max 100 per call, async with status/result endpoints.

Webhooks: API: POST /v1/webhook/create, GET /v1/webhook, GET /v1/webhook/{id}. Events: email sent, email opened, email link clicked, reply received, email bounced, prospect unsubscribed, prospect finished, prospect outcome changed, task created, LinkedIn task updated, call task updated, WhatsApp task updated and 2 more

115 endpoints
MethodPathWhat it doesCost
POSTasync/v1/prospects/importTo import new prospectsNot stated
POST/v1/prospects/verification-statusTo find the verification status of given emailsNot stated
POSTasync/v1/prospects/import-with-field-nameImport prospect with field name., Ensure that the field names exist in the system. You can import up to 100,000 prospects at a time, with a maximum content size of 90 MB. This can bNot stated
GET/v1/prospects/import-status/{requestId}While importing prospect you will receive the requestId. Using that requestId you can check the status of the import process.Not stated
GET/v1/prospects/attributeGet Prospect Long text attribute value by idNot stated
POST/v1/prospects/{prospectId}/attributeUpdate prospect field values, Sets or updates the value of one or more fields on a prospect profile. To update a single field, provide fieldId and attributeValue. To update multiple fields in one requestNot stated
GET/v1/prospects/{prospectId}/notesList notes for a prospect, Returns a paginated list of notes attached to the specified prospect, along with any draft note and pagination metadata. Use the skip and take query parameters to page througNot stated
GET/v1/sequencesTo get the sequences and steps of a userfree (measured on our trial)
POST/v1/sequencesCreate a new sequence, Create a new sequence with a title. Optionally attach one or more sending email accounts via emailAccountIds and/or assign a schedule in the same call. Upfront validNot stated
PATCH/v1/sequences/update-prospect-outcomeTo update the prospect outcomeNot stated
GET/v1/sequences/{sequenceId}/email-accountsList of sending email account of sequenceNot stated
POST/v1/sequences/{sequenceId}/email-accounts/addAdd sending email account to sequenceNot stated
POST/v1/sequences/{sequenceId}/email-accounts/removeRemove sending email account from sequenceNot stated
POST/v1/sequences/prospects/import-with-field-nameImport prospect with field name in to sequence, Ensure that the field names exist in the system. You can import up to 100,000 prospects at a time, with a maximum content size of 90 MB. This can be a largeNot stated
POST/v1/sequences/statusActivate or Pause sequence for selected sequencesNot stated
POST/v1/sequences/{sequenceId}/stepsCreate a new step for a sequence, Add a step to the sequence. A step belongs to a channel (Email, LinkedIn, Task, Call, Whatsapp) and has at least one variant (up to 26 for A/B testing on Email). Required</strongNot stated
GET/v1/sequences/{sequenceId}/stepsList all steps and variants for a sequence, Return every step in the sequence, in execution order, each with its variants and their payloads. Useful for exporting a sequence or for inspecting what will be sent.Not stated
PATCH/v1/sequences/{sequenceId}/steps/{stepId}/variants/{variantId}Update a step variant for a sequence, Update the payload, status, taskNote, priority, assigneeId, or attachmentIds of an existing variant. The payload</coNot stated
GET/v1/sequences/{sequenceId}/settingsGet sequence settings (optionally filter by code), Return all 13 public settings for the sequence along with the full assigned schedule ( id, name, timezone, isDefault ), all four <codNot stated
PATCH/v1/sequences/{sequenceId}/settingsUpdate sequence settings and/or schedule, Send a partial update, only the codes in settings[] are changed, the rest are preserved. Unsubscribe link (code 1) The value must contain the {{link}}Not stated
PATCH/v1/sequences/{sequenceId}/priority-distributionUpdate priority distribution for a sequence, Sets how outreach emails are prioritised across the sequence steps. Pass the preset id in the request body as priorityDistributionId. Preset reference: 1</Not stated
PATCH/v1/sequences/{sequenceId}/scheduleUpdate the schedule assigned to a sequence, Assign a different schedule to the sequence. The schedule controls which days and time windows emails in this sequence are sent. Pass scheduleId (hashed) in the body. The response returnNot stated
POST/v1/sequences/{sequenceId}/steps/{stepId}/variantsAdd a new variant to an existing step, Append a variant to an existing step. Email steps support up to 26 variants (A/B…Z); other channels support a single active variant at a time. The payload shape must match the step's chaNot stated
GET/v1/sequences/{sequenceId}/steps/{stepId}Get sequence step variantsNot stated
POST/v1/sequences/{sequenceId}/contactsAttach contacts to a sequence stepNot stated
POST/v1/sequences/{sequenceId}/test-emailSend a test email for a sequence stepNot stated
POST/v1/sequences/{sequenceId}/verify-prospectsStart prospect email verification for a sequenceNot stated
GET/v1/fieldsList all fields, Returns a list of fields defined in your account. Pass systemFields=true to include built-in system fields (such as First Name, Last Name, Email) along with your custom fields. Pass <codeNot stated
POST/v1/fieldsCreate a custom field, Creates a new custom field that can be used to store additional information on prospect profiles. Supported field types are Text, Number, Long Text, Currency, Date, and Dropdown.Not stated
PATCH/v1/fields/{fieldId}Update a custom field, Updates the label, fallback text, and/or tags of an existing custom field. Only custom (non-system) fields can be updated. Use the field ID returned by the GET /fields endpoint.Not stated
GET/v1/prospects/tagsto find all tagsNot stated
GET/v1/prospectsFetch all user prospects with paginationNot stated
GET/v1/prospects/{contactId}/minimal/sequencesGet minimal sequence histories for a contactNot stated
PATCH/v1/prospects/statusChange status of prospects (Mark prospect as replied, finished, paused, unsubscribed and active)Not stated
POST/v1/prospects/unsubscribeto unsubscribe prospectsNot stated
POST/v1/contacts/unsubscribeto unsubscribe prospectsNot stated
POST/v1/prospects/tags/assignto assign tags to prospectsNot stated
POST/v1/prospects/tags/un-assignto unassign tags to prospectsNot stated
POST/v1/blacklist-domainsAdd a domain to the blacklist.Not stated
POST/v1/dncAdd a domain/email(s) to the dnc list.Not stated