If you’re building a SaaS that resells WhatsApp messaging to your own
clients — a CRM for logistics companies, a helpdesk for retail
brands, an agency managing 200 client inboxes — platform mode gives
each of your tenants a first-class home on Kirimdev.
Each end-customer:
Connects their own WhatsApp Business number via Meta Embedded Signup
Keeps their own inbox, contacts, and message history
Gets attributed back to your organization via every API response
Stays cleanly isolated when archived
…all under your single Kirimdev integration.
"Customer" is not "Contact"
A Customer is your tenant — the business you operate WhatsApp
on behalf of (e.g. “Acme Logistics”). A Contact is a WhatsApp
chat partner (e.g. one of Acme Logistics’ shippers messaging the
business). Different API surfaces, different lifecycles.
Each row owns the rows nested beneath it. Soft delete cascades inward
(archive a customer → its accounts remain); hard delete never happens.
Layer Example Public id Owns Organization ”Your Platform Inc” org_…Teams └─ Team ”Operations” (internal) Customers + direct-org accounts └─ Customer ”Acme Logistics — Jakarta” cus_…One or more WhatsApp accounts └─ WhatsApp account +6281-1111-1111 phone_number_idConversations, contacts, messages
Layer Owns API surface Organization Your platform’s Kirimdev account /v1/meTeam An operations unit inside the org Returned in /v1/me Customer Your end-tenant (logistics company, store, agency, …) /v1/customersWhatsApp account A single phone number a customer owns /v1/accountsConversation / Message / Contact Customer’s chats and partners /v1/{phone_number_id}/...
Good fits
A SaaS automating reminders for 200+ tenant businesses, each with their own number
An agency managing WhatsApp for 50 client brands
An e-commerce platform sending order updates from each store’s own number
A helpdesk where every business owns their support number
Don't use it for
A single in-house team running their own numbers — just connect them under your Team directly, no Customer layer needed
WhatsApp chat partners — those go to contacts
Surface Where Public REST API (/v1/customers/*) Same auth and conventions as the rest of /v1 — bearer token, idempotency keys, error envelope Onboarding page ({APP_URL}/onboard/{token}) Branded landing page your end-customer opens to complete Meta Embedded Signup TypeScript SDK (kirim.customers) @kirimdev/sdk ≥ 3.3Webhook events Six customer.* event types MCP server tools Five customer-scoped tools for AI agent integration Dashboard pages /customers list + detail in the operator dashboard
Quickstart
Five minutes from kirim.customers.create({...}) to a tenant
sending their first message. Open quickstart
Customers
Concept reference — fields, status transitions, multi-team
resolution. Read customers
Setup links
How tokens are minted, stored, expired, and consumed — plus the
security model. Read setup links
Onboarding flow
The end-to-end sequence diagram from POST /setup_links to
customer.onboarded. Read flow
Redirect URLs
Stripe Connect-style return URLs that bounce the tenant back to
your own UI. Read redirects
Webhooks
Six customer.* events with realistic sample payloads.
Read webhooks
Start the quickstart →