Developers
Replaize API
Authentication
Every route requires a workspace API key, created in Replaize → Settings → API keys. Send it in the x-api-key header (or Authorization: Bearer <key>). A key only grants access to its own workspace's data: keep it server-side.
Base URL: https://replaize.com/api/v1. JSON bodies and responses (UTF-8). Dates: ISO 8601 (2026-11-07T17:00:00Z).
Send a booking — POST /bookings
Call it on every event of your tool: booked, rescheduled, canceled, no-show, showed. The same externalId updates the booking (idempotent): you can resend the same booking as often as needed.
{
"externalId": "abc-123",
"status": "booked",
"bookedAt": "2026-11-05T10:12:00Z",
"scheduledAt": "2026-11-07T17:00:00Z",
"eventName": "Appel découverte",
"source": "lien-story",
"trackingRef": "j57d2k...",
"setter": { "email": "setter@exemple.com" },
"closer": { "name": "Paul", "email": "paul@exemple.com" },
"contact": {
"firstName": "Marie",
"lastName": "Dupont",
"email": "marie@exemple.com",
"phone": "+33612345678",
"instagram": "@marie.dupont"
}
}- externalId (required): the booking ID in your tool.
- status:
booked(default),rescheduled,canceled,no_show,showed. - outcome: optional call outcome.
lost(call held, no sale) moves the lead to your “Calls not closed” column if you set one up. - Automatic columns: in Settings → Pipeline, a column you added can receive
canceled/no_showbookings,lostcalls andwonsales on its own. - scheduledAt (required): the call date. bookedAt: when it was booked (default: now).
- trackingRef: the
rpzparameter of the booking link sent from Replaize. It is the most reliable match: keep this URL parameter until the webhook. - setter:
email(or Replaizeid) of the setter who booked the call. Useful when the setter books on the prospect's behalf: the call is credited to them even if it is not attached to a lead. - contact: prospect's name, email, phone, Instagram username.
Automatic match to the lead, in this order: trackingRef, Instagram username, phone (WhatsApp thread), the prospect's email (written in a message, given on another booking or entered on the lead card). Otherwise the booking lands in Analytics → Bookings → “To attach”, where the team links it to the right lead in two clicks.
Send a sale — POST /sales
Call it when the sale happens, then on every payment (the same externalId updates cashCollected) and on refund.
{
"externalId": "vente-789",
"status": "won",
"soldAt": "2026-11-08T15:30:00Z",
"product": "Coaching 3 mois",
"totalAmount": 2400,
"cashCollected": 800,
"currency": "EUR",
"paymentPlan": "3x",
"bookingExternalId": "abc-123",
"setter": { "email": "setter@exemple.com" },
"closer": { "name": "Paul" },
"contact": {
"firstName": "Marie",
"lastName": "Dupont",
"email": "marie@exemple.com",
"phone": "+33612345678",
"instagram": "@marie.dupont"
}
}- externalId, totalAmount (required). cashCollected: total collected so far (not just the last payment). currency: ISO code (default
EUR). - status:
won(default),refunded,canceled. Refunded or canceled sales leave the KPIs. - bookingExternalId: the
externalIdof the original booking sent to /bookings, the best way to match the sale to the right lead. - setter: credited setter. If missing: the attached lead's setter.
A won sale attached to a lead tags it Client. Unmatched sales go to Analytics → Sales → “To attach”.
Read KPIs — GET /kpis
curl "https://replaize.com/api/v1/kpis?from=2026-11-01&to=2026-11-07" -H "x-api-key: nsk_…"- from, to (required):
YYYY-MM-DDdays in the workspace time zone, up to 92 days. - setter (optional): a setter's
idor email, orunattributed. - granularity:
day(default, daily detail) ortotal.
{
"timezone": "Europe/Paris",
"from": "2026-11-01",
"to": "2026-11-07",
"setters": [
{
"setter": { "id": "k17b…", "name": "Ingrid", "email": "ingrid@…", "role": "member" },
"total": {
"messagesSent": 2500, "messagesTypedInReplaize": 2310,
"repliesReceived": 1432, "replyRate": 0.573,
"newConversations": 237, "leadsReceived": 380,
"followupsDue": 450, "followupsDone": 46,
"linksSent": 36, "callsBooked": 20,
"responsesMeasured": 1210, "avgResponseTimeMs": 840000, "medianResponseTimeMs": 150000,
"suggestionsSentAsIs": 12, "suggestionsEdited": 30, "suggestionsDiscarded": 4,
"salesCount": 3, "salesAmount": 7200, "cashCollected": 2400
},
"days": [{ "date": "2026-11-01", "messagesSent": 340, "...": "…" }]
},
{ "setter": null, "total": { "messagesSent": 157, "...": "…" } }
],
"total": { "messagesSent": 2657, "...": "…" },
"workspace": {
"newConversations": 260, "messagesReceived": 3100,
"messagesSentByHumans": 2657, "messagesSentByAi": 0,
"messagesSentBySequences": 410, "messagesSentByAutomations": 22,
"leadsQualified": 40, "linksSent": 36, "callsBooked": 22,
"avgResponseTimeMs": 900000, "medianResponseTimeMs": 180000
}
}setter: null= unattributed messages (sent from the Instagram or WhatsApp app, outside Replaize).- avgResponseTimeMs: average time between the prospect's unanswered messages and the setter's human reply.
- medianResponseTimeMs: the setter's median response time (the "typical" time, less skewed by next-day replies), approximate to ±20%.
nullwhen no reply was measured. - Same figures as the Setters tab in Analytics.
List bookings and sales — GET /bookings, GET /sales
curl "https://replaize.com/api/v1/bookings?from=2026-11-01&to=2026-11-07" -H "x-api-key: nsk_…"
curl "https://replaize.com/api/v1/sales?from=2026-11-01&to=2026-11-07" -H "x-api-key: nsk_…"Bookings from every source (Calendly, iClosed, webhook) and sales of the period, with the attached lead and the matching rule (matchedBy). Up to 1,000 results per call (capped: true beyond that: narrow the range).
Errors
{ "message": "…" } with the HTTP status: 400 invalid body or parameters, 401 missing or invalid key, 404 unknown route, 5xx Replaize error (retry later). Need help: contact@replaize.com.