Bearer auth. Cursor pagination. Idempotency keys. Signed webhooks. The API your team would have built if it had the weekend.
Pick a runtime
const API_BASE = process.env.IR_API_URL ?? 'https://api.instantreply.co';
const headers = { 'Authorization': `Bearer ${process.env.IR_API_KEY}` };
// List active conversations
const res = await fetch(`${API_BASE}/v1/conversations?status=active`, { headers });
const { data, pagination } = await res.json();
for (const c of data) {
if (c.last_message_preview?.includes('refund')) {
await fetch(`${API_BASE}/v1/conversations/${c.id}`, {
method: 'PATCH', headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({ tags: ['priority:refund'] }),
});
}
}v1 surface
/v1/conversationsList conversations, cursor pagination/v1/conversations/:idFetch one conversation/v1/conversations/:idUpdate status, assignee, tags/v1/conversations/:id/messagesList messages in a conversation/v1/conversations/:id/messagesSend an outbound reply/v1/messagesList sent and received messages with delivery status/v1/messagesSend a message by conversation or contact/v1/messages/:idFetch one message with delivery status/v1/contactsList contacts/v1/contacts/:idFetch one contact/v1/contacts/:idUpdate name, email, lead stage/v1/channelsConnected platforms, status/v1/analytics/summaryDashboard analytics by date range/v1/usageTier, rate-limit headroom, request count/v1/keysList API keys for the workspace/v1/keysCreate a scoped live or test key/v1/keys/:id/rotateRotate an API key/v1/keys/:idRevoke an API key/v1/webhooksList registered webhook endpoints/v1/webhooksRegister a webhook, returns signing secret/v1/webhooks/:idRevoke a webhook endpoint/v1/webhooks/:id/deliveriesInspect recent webhook delivery attempts/v1/webhooks/sendTrigger a WhatsApp journey/send immediately/v1/webhooks/trigger-campaignCompatibility alias for /v1/webhooks/send/v1/webhooks/sign-payloadGenerate a test HMAC signature for a payload/v1/journeysList active WhatsApp journeys and required variables/v1/triggerEnroll a phone into a WhatsApp journey/v1/trigger/historyList recent journey trigger enrollments/v1/trigger/validateDry-run a journey trigger payload/v1/trigger/batchBatch enroll up to 100 recipients/v1/trigger/enrollmentsStop enrollments for a phone/journey/v1/eventsFire a semantic event mapped to a journey/v1/templatesList WhatsApp message templates/v1/templatesCreate and submit a template to Meta/v1/templates/:idFetch one template/v1/templates/generate/validateValidate a draft objective before storing/v1/templates/:id/validateValidate category fit + UTILITY coaching (flagged phrases, cost gap)/v1/templates/:id/submitSubmit template to Meta for approval/v1/trigger/status/:idExplain a delivery outcome - what happened, fault (ours vs Meta), next step/v1/campaignsList broadcast campaigns/v1/campaignsCreate a campaign draft/v1/campaigns/:idFetch one campaign/v1/campaigns/:idUpdate a draft or scheduled campaign/v1/campaigns/:id/sendStart a draft campaign/v1/pipeline/leadsList pipeline leads/v1/pipeline/leads/:idFetch one pipeline lead/v1/pipeline/leads/:idUpdate pipeline lead fields/v1/pipeline/leads/:id/stageMove a lead to a new stage/v1/pipeline/stagesList pipeline stages/v1/automationsList automations/v1/automations/:idFetch one automation/v1/automations/:id/triggerManually trigger an automation/v1/commentsList tracked comments/v1/comments/:idFetch one comment/v1/comments/:id/replyReply to a tracked comment/v1/developer/capabilitiesScopes and features available to the current key/v1/developer/onboardingIntegration checklist - which steps are done/v1/developer/limitsRate limits and quotas for the current plan tier/v1/developer/troubleshooting/errors/:codePlain-English explanation of a Meta or platform error codeDesign
Every list endpoint returns has_more and next_cursor. No skipped records under load, no off-by-one.
Pass a UUID and retry safely for 24 hours. Side effects fire exactly once.
Paste the ID in support and we trace the exact request, exact response, exact downstream call.
Same JSON envelope on every failure. code, message, doc_url, request_id. No surprise nulls.
Errors
No nested success flags. No mixed casing. No silent 200s on failure. If the call broke, the body tells you exactly which call, what it expected, and where the docs live.
// 422 Unprocessable Entity
{
"error": {
"code": "INVALID_PLATFORM",
"message": "Channel 'tiktok' is not yet supported on v1.",
"doc_url": "https://instantreply.co/api-docs#errors",
"request_id": "req_8f2a0b1c"
}
}No card on the trial