⚡ Developer API

Real kid voices, one POST away

The only TTS API built for children's content — real child voices in 11 languages. Pay per character with credits, no subscription required.

Quick start

  1. Create an account and pick a plan (from $3/month — every plan includes monthly credits).
  2. Create an API key on your dashboard.
  3. POST your text — get an MP3 back.
curl https://kidsstoryteller.ai/api/v1/tts \
  -H "Authorization: Bearer ksk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Once upon a time, in a forest full of wonder, a little fox found a glowing seed.",
    "voice": "kid-girl",
    "speed": "normal"
  }' \
  --output story.mp3

🦊 MCP — turn Claude into a bedtime-story engine

Add our MCP server to Claude Code or Claude Desktop and just ask: "Have Milo read this story about Ada — use the photo of her room as the scene." An animated, lip-synced video link comes back in the chat. Talking-character videos cost 500 credits; audio narration is 1 credit per 10 characters.

{
  "mcpServers": {
    "kidsstoryteller": {
      "command": "npx",
      "args": ["-y", "kidsstoryteller-mcp"],
      "env": { "KIDSSTORYTELLER_API_KEY": "ksk_live_..." }
    }
  }
}

Tools: create_talking_storybook · get_storybook_status · list_characters · create_audio_story — package: kidsstoryteller-mcp

▶️ Try it

Hear any voice before you integrate. (Uses your account's character allowance — no API key needed here.)

80/300

POST /api/v1/tts

text required — NO length limit. Up to ~20,000 characters returns audio directly; longer texts return 202 + a jobId to poll (GET /api/v1/tts?jobId=…) for the MP3 URL. Truly unlimited.

voice — voice id (default kid-girl). See the list below or GET /api/v1/voices.

speedslow | normal | gentle.

formatmp3 (binary, default) or json (base64).

const res = await fetch("https://kidsstoryteller.ai/api/v1/tts", {
  method: "POST",
  headers: {
    "Authorization": "Bearer ksk_live_YOUR_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    text: "Era uma vez uma raposa azul…",
    voice: "kid-portuguese",
    format: "json", // base64 instead of binary
  }),
});
const { audio, credits_charged } = await res.json();

Errors are JSON: { "error": { "code", "message" } }401 bad key, 402 not enough credits, 400 invalid input or content rejected, 429 rate limited. You are never charged for a failed request.

Pricing

1 credit per 10 characters (minimum 1 credit per request), from the same credit balance as the rest of KidsStoryteller. Every plan includes monthly credits — from 5,000 on Basic ($3/month) up to 200,000 on Studio — so roughly $0.045–0.06 per 1,000 characters. Unused credits bank for 90 days.

ElevenLabs APIThis API
Per 1,000 chars~$0.165–0.30$0.045–0.06
SubscriptionRequiredFrom $3/month
Real child voicesProhibited by policy11 voices · 11 languages

Content safety

Every request is screened by an AI moderation layer before synthesis. Text that isn't appropriate for a kids platform is rejected (HTTP 400, no charge). This is non-negotiable — these are children's voices.

Voices

🧒 Kid voices (12)

kid-girlEnglish (US)
kid-babyEnglish (US)
kid-britishEnglish (UK)
kid-spanishSpanish (Mexico)
kid-frenchFrench
kid-germanGerman
kid-chineseChinese (Mandarin)
kid-italianItalian
kid-portuguesePortuguese (Brazil)
kid-japaneseJapanese
kid-turkishTurkish
kid-koreanKorean

🎙 Adult narration voices (38)

azure-ariaEnglish (US)
azure-jennyEnglish (US)
azure-michelleEnglish (US)
azure-monicaEnglish (US)
azure-saraEnglish (US)
azure-guyEnglish (US)
azure-davisEnglish (US)
azure-tonyEnglish (US)
azure-freyaEnglish (AU)
azure-williamEnglish (AU)
azure-neerjaEnglish (IN)
azure-emilyEnglish (IE)
calm-momEnglish (US)
sweet-teacherEnglish (US)
sunny-friendEnglish (US)
bedtime-whisperEnglish (US)
playful-elfEnglish (US)
friendly-bearEnglish (US)
story-dadEnglish (US)
cozy-uncleEnglish (US)
gentle-giantEnglish (US)
story-grandpaEnglish (US)
azure-es-daliaSpanish (Mexico)
azure-es-jorgeSpanish (Mexico)
azure-es-elenaSpanish (Spain)
azure-fr-deniseFrench
azure-fr-henriFrench
azure-fr-vivienneFrench
azure-de-katjaGerman
azure-de-konradGerman
azure-de-amalaGerman
azure-pt-franciscaPortuguese (Brazil)
azure-pt-antonioPortuguese (Brazil)
azure-pt-thalitaPortuguese (Brazil)
azure-it-isabellaItalian
azure-it-giuseppeItalian
azure-ko-sunhiKorean
azure-ko-injoonKorean

Questions? Contact us — we reply within 24 hours.