Lead-intake API

API

Lead-intake API

Forward leads from any external tool — Zapier, Make, Meta Lead Ads, a custom landing page — straight into your Sendcore audience. Each lead is deduplicated; a new contact is marked subscribed and enrolled into your welcome automation, exactly like a signup form. To sync contact data in bulk without firing automations, use the Contacts API instead.

1. Create an API key

  1. Go to Store settings → API keys.
  2. Click Create key, name it (e.g. “Zapier”), and copy it. It's shown only once. The narrow Contact intake only scope is all this endpoint needs — a leaked key then can't read your data or touch the CRM.

2. Endpoint

POST https://www.sendcore.me/api/leads/intake. Authenticate with your key as a Bearer token. Send a JSON body with at least an email. Optional: first_name, last_name, phone, source. Field names are matched intelligently — email_address, firstName, phone_number, a single full_name (split into first/last) all land correctly — and unrecognized keys are kept as custom properties on the contact.

curl -X POST https://www.sendcore.me/api/leads/intake \
  -H "Authorization: Bearer sc_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"email":"customer@example.com","first_name":"Alex","source":"meta_lead_ads"}'

The response tells you exactly what happened:

JSON
{
  "ok": true,
  "created": true,             // contact row created (vs updated)
  "consent_state": "SUBSCRIBED",
  "consent_preserved": false,  // true = an existing opt-out was kept
  "suppressed": false,         // true = address is on the suppression list
  "first_subscription": true   // welcome automations fired
}

3. Connect it in Zapier

In a Zapier Webhooks → POST action, under Headers add name Authorization and value Bearer sc_live_… (the word Bearer, a space, then your key — not the bare key).

Getting a 401?

Some tools prefer a dedicated header. In that case use header name X-API-Key with the value set to your key without the “Bearer” prefix. Sendcore accepts both.

Under Data, map each key to the lead's own answers from the trigger: email → the lead's Email, full_name → the “Full Name” question (or first_name / last_name if your form asks them separately), phone → Phone Number. Optionally set source to something recognisable, e.g. meta_lead_ads. You can also leave Data empty — Zapier then forwards every trigger field and Sendcore sorts them out, keeping ad metadata (ad name, campaign, form…) as custom properties, never as the contact's name.

Don't map “Ad Name” as the name

Meta Lead Ads triggers also expose Ad Name, Adset Name, Campaign Name and Form Name. Those describe the ad, not the person — the same value for every lead. If every new contact shows the same “name” (often the ad's title in caps), your Zap is mapping one of those fields: point first_name / full_name at the form's actual name question instead, then contact support and we'll clean up the names already saved.

What happens to a lead

  • De-duplicated by email (an existing contact is updated, not duplicated); name, phone and custom properties enrich the profile without ever blanking data the lead didn't carry.
  • A new contact is marked subscribed and, if a welcome automation is active, enrolled.
  • An existing contact keeps their consent choice: a lead can never resubscribe someone who unsubscribed. When that protection applies, the response says consent_preserved: true (and suppressed: true when the address is on the suppression list) — the lead's data is saved, but no marketing email will go out.

Next steps