Channels MCP Self-Host Agencies Pricing Docs Start Free →
⚡ REST API · v1.0.0

API Reference

Real endpoints, real auth, real payloads. Every URL here is wired to a ViewSet in the open-source repo — so you can verify exactly what we ship.

Bearer JWT JSON over HTTPS Multi-tenant scoped

Base URL & Authentication

Pick the environment that matches your keys:

  • Production: https://api.jinaconnect.com
  • Sandbox: https://api.jinaconnect-dev.jinacode.systems

Every request requires a Bearer token. For service-to-service traffic, use an API key issued from your tenant settings. For interactive sessions, exchange credentials for a JWT pair via /token/ and rotate it with /refresh/.

auth.sh
# POST /token/ — exchange email + password for a JWT pair
curl -X POST "https://api.jinaconnect.com/token/" \
  -H "Content-Type: application/json" \
  -d '{ "email": "you@brand.com", "password": "••••••••" }'

# → 200 OK
{ "access": "eyJhbGciOi...",
  "refresh": "eyJhbGciOi..." }

# Use the access token on every call:
-H "Authorization: Bearer eyJhbGciOi..."
→ refresh access tokens via POST /refresh/

API keys are scoped per tenant and per role. Live keys are prefixed jc_live_...; sandbox keys jc_test_.... Pass them in the same Authorization: Bearer header.

Tenants — multi-tenant workspaces

Every customer workspace is a tenant. Agencies run 5–50 tenants on a single deployment, each with its own branding, wallet and WhatsApp Business Account.

Method & PathDescription
GET /tenants/onboarding-options/List available onboarding flows
GET /tenants/branding/Get tenant branding settings
PATCH /tenants/branding/Update custom domain, logo, email sender
GET /tenants/users/List tenant members
POST /tenants/members/invite/Invite a teammate
GET /tenants/roles/RBAC role list
GET /tenants/host-wallet/Get per-tenant wallet balance
GET /tenants/waba-info/WhatsApp Business Account metadata
GET /tenants/tenant-tags/Custom tenant tags for org-level filtering

Contacts

A unified contact directory across channels. Each contact carries a phone number, channel IDs, segments and custom attributes.

Method & PathDescription
GET /contacts/List contacts (paginated, filterable)
POST /contacts/Create a contact
GET /contacts/{id}/Retrieve a contact
PATCH /contacts/{id}/Update contact attributes / segments
POST /contacts/bulk-import/CSV upload for bulk import
create-contact.sh
# POST /contacts/ — create a contact
curl -X POST "https://api.jinaconnect.com/contacts/" \
  -H "Authorization: Bearer jc_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Asha Rao",
    "phone": "+919876543210",
    "segments": ["vip", "diwali-2026"],
    "attributes": { "city": "Pune", "plan": "pro" }
  }'
→ 201 Created · returns the new contact id

Broadcast — WhatsApp

Schedule, send and track WhatsApp template broadcasts, then drill into per-message delivery and click data.

Method & PathDescription
GET /broadcast/List broadcasts
POST /broadcast/Create & queue a broadcast
GET /broadcast/{id}/Get broadcast detail
GET /broadcast/messages/List individual messages within broadcasts
GET /broadcast/url-tracking/Click events on shortened URLs
GET /broadcast/dashboard/Aggregate analytics (delivery, read, reply rates)
queue-broadcast.sh
# POST /broadcast/ — create & queue a template broadcast
curl -X POST "https://api.jinaconnect.com/broadcast/" \
  -H "Authorization: Bearer jc_live_..." \
  -d '{
    "template": "diwali_offer",
    "segment": "diwali-2026",
    "schedule_at": "2026-10-20T09:00:00Z"
  }'
→ 201 Created · broadcast queued, track via /broadcast/dashboard/

WhatsApp

Send template and session messages on the Official WhatsApp Business API, manage templates through Meta approval, and receive Meta-compliant inbound webhooks.

Method & PathDescription
POST /wa/v1/messages/Send a template / session message
GET /wa/v1/messages/List sent & received messages
POST /wa/v1/templates/Submit a template for Meta approval
GET /wa/v1/templates/List templates and approval status
POST /wa/v1/webhooks/{tenant_id}/Meta-compliant inbound webhook
send-whatsapp.sh
# POST /wa/v1/messages/ — send a template message
curl -X POST "https://api.jinaconnect.com/wa/v1/messages/" \
  -H "Authorization: Bearer jc_live_..." \
  -d '{
    "to": "+919876543210",
    "type": "template",
    "template": {
      "name": "diwali_offer",
      "language": "en",
      "components": [{ "type": "body",
        "parameters": [{ "type": "text", "text": "Asha" }] }]
    }
  }'
→ 202 Accepted · returns message_id & status: queued

Voice — 5 HTTP providers + 12 SIP trunks

Place outbound calls, build IVR templates that compile to TwiML / NCCO / Plivo XML, pull CDRs and recordings, and log consent for compliance.

Method & PathDescription
GET /voice/api/provider-configs/List configured voice providers
POST /voice/api/calls/Place an outbound call
GET /voice/api/calls/List calls with status & duration
GET /voice/api/calls/{id}/Retrieve call detail (CDR + transcription)
GET /voice/api/call-events/DTMF / answer / hangup / transfer events
GET /voice/api/recordings/S3-backed recordings index
POST /voice/api/templates/Create an IVR template (TwiML / NCCO / Plivo XML)
GET /voice/api/rate-cards/Per-destination call rates
POST /voice/api/recording-consents/Log recording consent for TCPA compliance
GET /voice/api/ari-health/Asterisk / ARI SIP infra health check
place-call.sh
# POST /voice/api/calls/ — place an outbound call
curl -X POST "https://api.jinaconnect.com/voice/api/calls/" \
  -H "Authorization: Bearer jc_live_..." \
  -d '{
    "to": "+919876543210",
    "provider_config": "twilio-in",
    "template_id": "ivr_payment_reminder"
  }'
→ 201 Created · poll /voice/api/calls/{id}/ for the CDR

SMS

Send transactional and promotional SMS through Twilio, MSG91 or Fast2SMS with DLT-registered templates, plus inbound and DLR webhooks.

Method & PathDescription
GET /sms/v1/apps/List configured SMS apps (Twilio / MSG91 / Fast2SMS)
POST /sms/v1/messages/Send an SMS
GET /sms/v1/templates/List DLT-registered templates
POST /sms/v1/broadcast/Bulk SMS broadcast
POST /sms/v1/webhooks/{app_id}/inbound/Inbound SMS webhook
POST /sms/v1/webhooks/{app_id}/dlr/DLR (delivery report) webhook

Telegram

Register Telegram bot apps, send and broadcast messages, and receive inbound updates from the Telegram Bot API.

Method & PathDescription
GET /telegram/v1/bots/List Telegram bot apps
POST /telegram/v1/messages/Send a Telegram message
POST /telegram/v1/broadcast/Broadcast on Telegram
POST /telegram/v1/webhooks/{bot_app_id}/Inbound webhook from Telegram Bot API

RCS

Send rich cards and suggested-replies over Google RBM or Meta RCS, individually or as a broadcast.

Method & PathDescription
GET /rcs/v1/apps/List RCS apps (Google RBM / Meta RCS)
POST /rcs/v1/messages/Send an RCS rich card / suggested-replies message
POST /rcs/v1/broadcast/RCS broadcast

Team Inbox

A unified, omni-channel inbox. Read messages across every channel, pull inbox metrics, and export conversations as PDF.

Method & PathDescription
GET /team-inbox/api/messages/Unified inbox across all channels
GET /team-inbox/api/stats/Inbox metrics (response time, open conversations)
POST /team-inbox/api/export-pdf/Export a conversation as PDF

Errors & Rate Limits

Standard HTTP status codes apply. The body for any non-2xx response is always { "detail": "...", "code": "..." }.

StatusMeaningWhat to do
200OK
201Created
400Validation errorInspect detail for field-level errors
401UnauthorizedRefresh JWT or check API key
403ForbiddenRBAC role doesn't permit this action
404Not foundVerify ID and tenant scope
429Rate limitedBack off — see the Retry-After header
5xxServer errorRetry with exponential backoff; check the status page

Rate limits (hosted)

Per-tenant defaults — raised on Enterprise plans:

  • Broadcast send: 500 msgs/sec per tenant (subject to the Meta MPS quota)
  • Voice outbound: 50 calls/sec per provider
  • Read endpoints: 100 req/sec per API key
  • Webhooks delivered to your endpoint: up to 200 req/sec with retries

Need a hand wiring this up? WhatsApp us, email hello@jinacode.systems, or book a 30-min call.

Chat on WhatsApp