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_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Base 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 done

Tokens 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.

HTTPCodeMeaning
400validation_errorMissing or invalid fields
401invalid_api_keyKey missing, invalid, expired or revoked
403insufficient_scopeKey not enabled for this product
429rate_limited / quota_exceededSlow down, or upgrade your plan
502upstream_errorTemporary 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.