API review

Expandi API review

Cloud LinkedIn + email automation priced per LinkedIn seat, with dedicated country IPs and warm-up. There is NO public REST API: integration is outbound webhooks (25 events), 'reversed webhooks' (per-campaign URLs to add, pause or resume a lead) and a beta MCP server. Best for single LinkedIn accounts or small sales teams that want safety features.

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

Pricing, plan by plan

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

Free tier 7-day free trial, no charge until you decide to buy (pricing FAQ).

Business

$99/mo

billed monthly

$79/mo

billed annually

per LinkedIn account seat; annual = 20% off paid upfront ('2 months free'); taxes vary by country; dedicated country IP, auto warm-up, unlimited campaigns, multichannel (LinkedIn + email), integrations

No API
Plan details

image/GIF personalisation and Sendspark video are paid add-ons

Agency

Custom quote

custom, '+10 Seats' ('the more accounts you take, the more you save'), white-label, roles & permissions, client reports, dedicated CSM

No API

Rate limits

No API rate limits documented.

More on limitsLess

LinkedIn action limits are set per account as randomised daily ranges, with recommended-limits guidance and warm-up.

How to get an API key

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

  1. Create a Expandi account.
  2. Campaign -> Webhooks tab -> 'URL to use' (add people) and 'Campaign contact actions' (pause/resume URLs). MCP: Account Settings -> 'AI agents' -> View token.
  3. Send it with every request: Reversed webhooks: no header auth; each URL carries its own credentials as query parameters (documented pause URL form: ?key=<uuid>&secret=<uuid>), so the URL itself is the secret. MCP: OAuth sign-in, or an access token for n8n/Make/scripts.
  4. Make a first call: Reversed webhook: pause a person in the campaign. Keep the key in an environment variable, never in the command.
    curl -X GET "https://api.liaufa.com/api/v1/open-api/campaign-contact/{campaign_contact_id}/pause/?key=<key>&secret=<secret>&key=$EXPANDI_API_KEY"

Where the docs live

WhatWhere
Documentationhelp.expandi.io/en/articles/5405654-reversed-webhooks-api
llms.txthelp.expandi.io/llms.txt
Base URLhttps://api.liaufa.com/api/v1/open-api
MCP serverhttps://api.liaufa.com/mcp

Strengths and limits

Where it fits

  • Single LinkedIn accounts or small sales teams that want safety features (dedicated IP, auto warm-up, randomised limit ranges)
  • Pushing leads into a campaign from a CRM or Zapier via the campaign's reversed-webhook URL
  • Event feeds to Zapier, Google Sheets, HubSpot, Pipedrive and Salesforce
  • Driving campaigns conversationally through its MCP (drafts only; the human approves sends)

Where it falls short

  • Programmatic campaign creation or analytics pulls (no REST API)
  • Agencies wanting a documented API for multi-client orchestration (use HeyReach or Aimfox)
  • Anything needing a lead's campaign-contact ID up front: pause/resume URLs need it, and it only appears in webhook history

Worth knowing

  • There is no public REST API. Expandi itself calls reversed webhooks 'the closest to the publicly available API we have'.
  • Pause/resume URLs need the lead's campaign-contact ID, which only appears in the history of a webhook that already fired for that lead.
  • 'Contact replied' webhooks fire only when Expandi syncs inbox during active times. Sending a manual message before the sync means the replied webhook never fires.
  • The 'message sent' webhook can fire for old conversations sent before the webhook was activated, which causes duplicate CRM activity.
  • The MCP server lives on a different domain (api.liaufa.com), not expandi.io. Allow-list it.
5 moreShow fewer
  • An MCP OAuth grant covers ALL LinkedIn accounts the user manages in Expandi, not just one.
  • Daily limit ranges must not start at 0, or some days send nothing.
  • A reversed-webhook add fails silently for leads already in another campaign, already in a connector campaign of the same Expandi company, or with the wrong connection degree for the campaign type (e.g. a 1st-degree contact into a connector campaign); placeholders are still imported.
  • 'make' and 'n8n' in integrations are MCP access-token clients, not native Expandi integrations.
  • The free trial cannot be explored without connecting a LinkedIn account: onboarding step 3 has no skip and every app URL redirects to it.

Who should use it

Use Expandi for
Single LinkedIn accounts or small sales teams that want safety features (dedicated IP, auto warm-up, randomised limit ranges)
Look elsewhere for
Programmatic campaign creation or analytics pulls (no REST API)

If Expandi is not the answer

Other LinkedIn outreach tools in this directory, each with its own review.

Before you build

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

  • Confirm the API is on your planFree tier: 7-day free trial, no charge until you decide to buy (pricing FAQ).
  • Keep the key out of your codeAPI key. It is sent as: Reversed webhooks: no header auth; each URL carries its own credentials as query parameters (documented pause URL form: ?key=<uuid>&secret=<uuid>), so the URL itself is the secret. MCP: OAuth sign-in, or an access token for n8n/Make/scripts..
  • Design around the rate limitNo API rate limits documented.
  • Know the catch before you scaleThere is no public REST API. Expandi itself calls reversed webhooks 'the closest to the publicly available API we have'.

Want us to build it for you?

Tell us what you want Expandi 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 expandi.io/pricing, help.expandi.io/en/articles/5405654-reversed-webhooks-api and help.expandi.io/en/articles/5405322-daily-limits. Verified 25 Oct 2026.

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

Base URL: https://api.liaufa.com/api/v1/open-api

Bulk and async: Reversed webhook adds one profile per call; bulk is via CSV/lead lists in the UI or CRM lead lists.

Webhooks: Webhooks fire only for events after activation, except 'message sent', which can fire for older conversations. Reply events fire only when Expandi syncs conversations during the account's active times, and a manual message sent before the sync suppresses the 'replied' webhook. Webhooks fire even for inactive campaigns. History tab shows success/failure. A per-webhook 'time delta' can batch fires every 1, 4, 8, 12 or 24 hours (default: fire immediately). Delivery is an HTTP POST to your URL. Events: Contact replied, Contact tagged, Connection request accepted, Contact interest status changed, Contact disconnected, Contact revoked, Connection request accepted by contact in active campaign, Contact replied to campaign message, Connection request sent, Contact added to campaign, Message sent, Contact replied first time since start and 13 more

3 endpoints
MethodPathWhat it doesCost
POST<campaign 'URL to use' from Webhooks tab>Reversed webhook: add a person to the campaignNot stated
GET/campaign-contact/{campaign_contact_id}/pause/?key=<key>&secret=<secret>Reversed webhook: pause a person in the campaignNot stated
GET<campaign resume URL with [campaign contact ID]>Reversed webhook: resume a person in the campaignNot stated