Loopedn API

    The Loopedn API sends your leads to the tools you use, as they're captured. Loopedn's Zapier app uses it. For your own system, the webhook is simpler, since it posts each lead to any address you choose.

    Who can use it

    The API is part of Pro. On a team, a team admin makes the key once, and it covers the whole team's leads. A rep working solo on Pro makes their own.

    Your API key

    Make one in Loopedn at Settings, Zapier. It starts with lpd_key_, and Loopedn shows it once, so copy it then. Loopedn keeps only a fingerprint of it, never the key itself.

    Each account has one key. Making a new one turns the old one off at once, along with every subscription made with it. Keep it private, because anyone who has it can send your leads to their own Zaps.

    Making a request

    Every call is a POST to one address, with the key in the X-Api-Key header and a JSON body that names the action.

    POST https://wwuosjsjkupwuvgyyjyu.supabase.co/functions/v1/zapier-api
    X-Api-Key: lpd_key_...
    Content-Type: application/json
    
    { "action": "me" }

    The same call with curl:

    curl -X POST https://wwuosjsjkupwuvgyyjyu.supabase.co/functions/v1/zapier-api \
      -H "X-Api-Key: $LOOPEDN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"action":"me"}'

    Actions

    me

    Says who the key belongs to. Zapier calls it to test a connection, and names the connection after it.

    { "action": "me" }
    
    200
    { "id": "5b1e...", "name": "Acme Events", "kind": "team" }

    kind is team or personal. name is the team's name, or the person's.

    subscribe

    Starts sending leads to an address. trigger is new_lead or new_hot_lead, and target_url is the address Zapier gives a Zap. Only Zapier's own hook addresses, starting https://hooks.zapier.com/, are accepted.

    {
      "action": "subscribe",
      "trigger": "new_lead",
      "target_url": "https://hooks.zapier.com/hooks/standard/123/abc/"
    }
    
    201
    { "id": "9c4f...", "trigger": "new_lead", "created_at": "2026-10-27T15:00:00.000Z" }

    Keep the id, because unsubscribe takes it. Subscribing the same address to the same trigger again returns the same id, never a second subscription.

    unsubscribe

    Stops sending to a subscription. It always works, even when the plan has lapsed, and an id that's already gone is fine.

    { "action": "unsubscribe", "id": "9c4f..." }
    
    200
    { "ok": true, "id": "9c4f..." }

    recent_leads

    The newest leads for a trigger, newest first, each shaped exactly as a delivery. Zapier shows them as samples while a Zap is built. limit is 3 when left out, and at most 10.

    { "action": "recent_leads", "trigger": "new_hot_lead", "limit": 3 }
    
    200
    [ { "id": "...", "type": "lead.created", "lead": { ... }, "event": { ... } } ]

    The two triggers

    • new_lead sends every lead, as it's captured.
    • new_hot_lead sends A leads only. A lead that becomes an A later is sent then.

    What Loopedn sends

    One POST per lead to each subscribed address, usually within a minute of capture, with the same JSON body as the webhook. Its fields are listed in How do I send Loopedn leads to Zapier, Make or my own system?

    • The Loopedn-Event header is always lead.created, and Loopedn-Delivery repeats the body's id.
    • There is no signature. The address itself is the secret, as with any Zapier hook.
    • A subscription gets each lead once. If Loopedn has to try again, the id stays the same.
    • A subscription gets only leads captured after it was made.
    • Never sent, as with the webhook: a lead marked private, a lead with no email yet, an email Loopedn guessed until a rep confirms it, and a lead past the free plan's limit for its event.
    • An address that answers 410 Gone is unsubscribed. Other failures are tried again for about five minutes, then show as failed in Settings, Zapier, where Retry failed sends them again to the subscriptions that missed them.

    Errors

    Every refusal is JSON with an error field, written to show a person as it is.

    • 400 means the request is missing something, or names an action that doesn't exist.
    • 401 means the key is missing, mistyped, or was replaced.
    • 403 means the account no longer has Pro. Sending pauses, and nothing is lost.
    • 500 means Loopedn couldn't finish. Try again.