Developer hub

Build on top of your own conversations

A REST API over contacts, conversations, messages and leads, signed webhooks for every event, and flow steps that call your systems — all included in every plan, no add-on.

What you can build

REST API

Read and create contacts and leads, list conversations, and send a real message on any connected channel.

Signed webhooks

Get pushed every new message, status change and won deal, signed so you can trust what you receive.

Call your API mid-flow

A flow step can call your own endpoint and keep a value from the reply on the contact — no middleware needed.

Google Sheets

Append a row to a spreadsheet from any flow — the no-code path when a full integration is overkill.

Website widget

Drop one script tag on your site and conversations land in the same inbox as every other channel.

Meta Conversions API

Send lead and purchase events back to Meta so your ad campaigns optimize on real outcomes.

Your first call in three steps

Everything is a token away — there is no separate developer account and no approval queue.

1

Create a workspace

Sign up and connect at least one channel so there is something to talk to.

2

Issue an access token

Settings → Integrations → Developer API. Pick the abilities the token may use; it can never exceed your own permissions.

3

Call the API

Send the token as a Bearer header. Start with /me to confirm which workspace you are talking to.

# List your contacts
curl https://app.labeeq.com/api/v1/contacts \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"

# Send a message into a conversation
curl -X POST https://app.labeeq.com/api/v1/conversations/42/messages \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body": "Your order is on its way!"}'

Endpoint reference

Base URL: https://app.labeeq.com/api/v1

Endpoint Token ability What it does
GET/me Who am I: the token's user, workspace, and abilities.
GET/contacts?search= contacts:read List contacts, newest first; search matches name and email.
GET/contacts/{id} contacts:read One contact by id.
POST/contacts contacts:write Create a contact (name required; email, phone, lifecycle_stage_id optional).
GET/conversations?status=&contact_id=&channel_id= conversations:read List conversations with status, contact and channel filters.
GET/conversations/{id} conversations:read One conversation with its channel and assignee.
GET/conversations/{id}/messages conversations:read A conversation's messages, newest first.
POST/conversations/{id}/messages messages:send Send an outbound message ({"body": "…"}) — real channel delivery, as the token's user.
GET/leads?outcome=&contact_id= leads:read List leads; outcome takes open, won, or lost.
POST/leads leads:write Open a lead (contact_id and name required; value and source optional).

Webhooks for everything that happens

Point an endpoint at your server, pick your events, and Labeeq POSTs each one as it happens — with retries and automatic back-off if you are down.

message.received message.sent conversation.created conversation.opened conversation.closed conversation.assigned contact.created contact.lifecycle_changed lead.created lead.won lead.lost

Verifying a delivery

Every request carries an HMAC-SHA256 of the raw body in X-Labeeq-Signature. Compare it with your endpoint secret before trusting the payload.

expected = "sha256=" + HMAC_SHA256(secret, raw_body)
if (expected !== header("X-Labeeq-Signature")) reject()

No sales call needed

Create a workspace, issue a token, and you are calling the API in minutes. Zapier, Make and n8n connect the same way.