NoOneToTalk for Partners
Bring Kibo into your product
Integrate Kibo Chat — an emotionally intelligent AI companion over a simple REST API — and Kibo Call — real-time voice conversations over WebRTC — with per-partner API keys, usage tracking and quotas.
Authentication
Every request must include your partner API key as a Bearer token. Keys are issued per partner, scoped to products (kibo.chat, kibo.call) and shown only once at creation — store them in a secret manager and keep them server-side.
Authorization: Bearer nott_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBase URL: https://noonetotalk.com/api/v1 · JSON in, JSON out · rate limits and monthly quotas per plan (429 with Retry-After on exceed).
Kibo Chat — POST /chat
Send an end-user message, receive a text or voice (MP3 base64) reply. Conversations are stateful per user_id: Kibo remembers context across requests. Your user IDs are namespaced per partner and never collide with other partners'.
curl https://noonetotalk.com/api/v1/chat \
-H "Authorization: Bearer $NOTT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "user_id": "usr_842", "message": "I had a rough day...", "audio": false }'Response — text
{
"type": "text",
"response": "I'm here for you. Want to tell me what happened?",
"session_key": "..."
}Response — audio ("audio": true)
{
"type": "audio",
"response": "<base64 MP3>",
"text": "I'm here for you. Want to tell me what happened?",
"mime_type": "audio/mpeg",
"session_key": "..."
}Replies may take several seconds (LLM + optional TTS) — use a timeout of at least 120s.
Kibo Call — POST /call/tokens
Real-time voice conversation with sub-second latency and natural turn-taking, delivered over WebRTC via the ElevenLabs client SDK (web, iOS, Android, React Native). Your server requests a short-lived token from us; your client connects directly — no media flows through your servers.
curl -X POST https://noonetotalk.com/api/v1/call/tokens \
-H "Authorization: Bearer $NOTT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "user_id": "usr_842" }'Response:
{
"token": "<ephemeral WebRTC token>",
"agent_id": "...",
"expires_in": 300,
"nott_ref": "ptn_12__usr_842"
}Client (web example — SDKs also available for React Native, Swift, Kotlin):
import { Conversation } from "@elevenlabs/client";
// 1. Get a token from YOUR backend (never expose your NOTT API key client-side)
const { token, nott_ref } = await fetch("/your-backend/kibo-call-token")
.then((r) => r.json());
// 2. Start the real-time voice session (WebRTC)
const conversation = await Conversation.startSession({
conversationToken: token,
connectionType: "webrtc",
overrides: { dynamicVariables: { nott_ref } }, // required for billing attribution
});
// ... conversation.endSession() when doneTokens are single-use and expire in minutes — request one per call. Calls are billed by connected minutes. No WebRTC on your side? Use Kibo Chat with "audio": true as a request–response voice fallback.
Usage — GET /usage
Self-service consumption for the current month (?month=YYYY-MM for history).
{
"month": "2026-07",
"chat": { "messages": 12480, "audio_replies": 3120, "quota": 50000 },
"call": { "tokens_issued": 950, "minutes": 1830.5, "quota_minutes": 5000 }
}Errors
Errors follow { "error": { "code", "message" } }. Retry only 502/timeouts, with exponential backoff.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | validation_error | Missing or invalid fields |
| 401 | invalid_api_key | Key missing, invalid, expired or revoked |
| 403 | insufficient_scope | Key not enabled for this product |
| 429 | rate_limited / quota_exceeded | Slow down, or upgrade your plan |
| 502 | upstream_error | Temporary AI backend failure — retry with backoff |
Good practices
Keep your API key server-side only — clients must talk to your backend. Use stable, pseudonymous user_ids (no emails or PII): they define conversation memory. Kibo is an emotional-support companion, not a medical device — surface your own crisis-escalation UX where required by your jurisdiction.
Ready to build with Kibo?
Already have a key? Test it live in the API Playground. Otherwise, get a trial API key with quotas included — no commitment.
