Developer documentation

Giggy Speech API

Giggy provides text-to-speech and speech-to-text APIs. Batch uses zero credits with request and queue limits; Fast and Streaming use prepaid credits. REST and MCP default to Fast when mode is omitted.

Text-to-speech billing

Batch is free. Fast: $5.00 per 1,000,000 input characters; Streaming: $10.00 per 1,000,000 input characters with Pro, Studio or Scale credits. Starter and Creator cost more per credit.

TTS counts Unicode code points in the full submitted text, including spaces and punctuation, not UTF-8 bytes or generated audio duration. The same character rates apply across supported languages. Each paid request rounds up to a pricing block with a minimum charge. REST and MCP use the app's selected-mode rates; free homepage and authenticated Playground previews retain their preview exemption.

Fast: 10 credits per started 20-character block, minimum 10 credits. Streaming: 10 credits per started 10-character block, minimum 10 credits. See pricing and credit-pack estimates.

API base URL

Use https://api.giggy.ai/v1 for text-to-speech and speech-to-text. Existing integrations can continue using https://giggy.ai/v1 with the same API keys, request formats, billing and generation history. Keep each operation on the origin where it was admitted.

Core developer endpoints

Partner integrations: LiveKit, Pipecat and Jambonz

Use these compatibility integrations with your existing voice stack. They do not establish upstream provider listings or commercial partnerships. Keep Giggy API keys server-side. Existing integrations can retain the legacy origin and installed transport until their adapter is updated and qualified.

LiveKit

Configure the LiveKit OpenAI TTS plugin with base_url=https://api.giggy.ai/v1, model=giggyspeech, your Giggy voice UUID and response_format=pcm. Supply STT, LLM, VAD and room transport separately; a base URL change does not supply a native STT adapter. Disable automatic synthesis replay after partial streaming. The native Giggy TTS contribution remains an open contribution, not a released provider.

LiveKit runnable TTS example · Native TTS and streaming STT contribution status. Older example checkouts may still use giggy.ai; explicitly configure api.giggy.ai for the API path.

Pipecat

pipecat-giggy 0.3.1 is the released Giggy-maintained TTS/live STT adapter. Install with python -m pip install pipecat-giggy==0.3.1; the tested Pipecat dependency is 1.12.0. It uses V25 one-socket live STT with binary PCM, explicit stop, canonical decode preparation, fenced final events and saved-result verification. Applications own transport and upstream turn timing. Drain the lifecycle and surface verification errors after final text. Version 0.2.0 retains its earlier transport. Native LiveKit streaming STT remains available from its unreleased source PR.

Jambonz

Configure a custom STT provider with wss://api.giggy.ai/v1/audio/transcriptions and your Giggy API key. Jambonz sends Authorization: Bearer on the upgrade, then start, binary 8 kHz mono LINEAR16 and stop on one socket; transcription messages return there. Giggy converts 8 kHz continuously to canonical 16 kHz. Do not use the HTTPS recording endpoint for live recognition. Without external endpointing, the existing energy threshold and 650 ms silence rule delimit utterances; test quiet speech and noise. Unsupported hints reject explicitly.

Jambonz custom STT specification · Giggy live STT guide. The Jambonz-style wire protocol is tested; native media-server calls require separate end-to-end qualification. STT compatibility does not establish support for Jambonz streaming TTS.

Speech-to-text quickstart: Python and JavaScript

Keep GIGGY_API_KEY on your server. Use https://api.giggy.ai/v1 for recording STT and wss://api.giggy.ai/v1/audio/transcriptions for live STT. Install the published Python SDK with python -m pip install giggy==0.2.0 (Python 3.10+) or JavaScript/TypeScript SDK with npm install @giggy-ai/[email protected] (Node.js 22+). Prepare signed PCM16 mono 16 kHz WAV, for example with ffmpeg -i input.mp3 -ac 1 -ar 16000 -c:a pcm_s16le recording.wav. Free Batch accepts 0.5 seconds–25 minutes. Use paid Fast for recordings up to 12 hours.

Python: retrieve the final transcript

import os
from giggy import Giggy

giggy = Giggy(api_key=os.environ["GIGGY_API_KEY"], base_url="https://api.giggy.ai/v1")
result = giggy.transcriptions.transcribe("recording.wav", mode="batch")
print(result["text"])

JavaScript: retrieve the final transcript

import { Giggy } from '@giggy-ai/sdk';

const giggy = new Giggy({ apiKey: process.env.GIGGY_API_KEY, baseURL: 'https://api.giggy.ai/v1' });
const result = await giggy.transcriptions.transcribe({ audioPath: 'recording.wav', mode: 'batch' });
console.log(result.text);

These existing SDK methods submit once, wait for durable completion and fetch the signed transcript without forwarding your API key to the artifact host. The default SDK mode is Batch; direct REST requests default to paid Fast. For raw REST, POST the WAV body with Content-Type: audio/wav and xi-api-key. Batch/Fast admission returns HTTP 202 with generation.generation_uuid, not transcript text. Retain that UUID, read GET /v1/generations/{generationUuid} until completed, then fetch generation.result.url for the final transcript JSON. A timeout is not permission to upload the same recording again.

Choose the spoken language (optional)

For uploaded recordings in Batch, Fast, or Streaming, set language to a supported code or name, such as en or English, to skip automatic language detection. With a raw WAV body, use POST /v1/audio/transcriptions?mode=fast&language=en. With a JSON data URL, include "language": "en". Omit language, or use null in JSON, for automatic detection. Live WebSocket start also accepts an optional supported language; omit it for automatic detection.

Choose the correct transcription workflow

Uploaded recordings and live microphone input use different contracts
WorkflowInput and deliveryCompletion
Uploaded recording: Batch or FastCompleted WAV; HTTP 202 admission, then durable statusFetch canonical transcript after completed
Streaming an uploaded recordingCompleted WAV; cumulative transcript_chunk SSE revisions, up to 12 hoursReplace provisional text; reconcile the UUID and fetch the final result
Live microphone: StreamingOne authenticated WebSocket; send start, wait for ready, then binary PCM16 mono and stop; paid API up to 12 hours, previews and reference replay up to 30 secondsValidate input_complete and final transcription identity/sequence; verify durable completion and saved transcript

Application capture, resampling, VAD and turn boundaries are your responsibility. Closing unfinished live input cancels it; closing uploaded-recording SSE does not cancel the admitted recording. Paid API live admission reserves 96,000 credits and settles against accepted audio duration. Do not append cumulative revisions or treat them as verified final text.

Complete examples: Python uploaded-WAV Streaming · JavaScript uploaded-WAV Streaming · Python live microphone · Node live PCM replay. A replay example tests the live protocol; it does not capture microphone hardware.

Live STT: one WebSocket for audio and transcripts

Connect your server to wss://api.giggy.ai/v1/audio/transcriptions with Authorization: Bearer or xi-api-key in the upgrade headers. Keep credentials off browser clients. Send {"type":"start","format":"raw","encoding":"LINEAR16","sampleRateHz":16000,"interimResults":true,"options":{"endpointing":"external"}}; optionally set language. Wait for generation_created and ready before sending headerless binary PCM16 LE mono audio. Send {"type":"stop"} after the real tail. Do not open an HTTPS request every 20 ms.

Replace cumulative transcription text. Validate generation UUID, attempt, increasing sequence and is_final; require input_complete before publishing final text. Continue to canonical completion and verify saved text and duration. Jambonz can use the same endpoint with8 kHz LINEAR16 start/audio/stop;8 kHz is converted continuously to canonical 16 kHz. Without external endpointing, the existing energy threshold and 650ms silence rule delimit turns. Quiet speech and background noise require testing.

Paid API input supports 0.5 seconds to 12 hours and reserves 96,000 credits, settling against accepted duration. Previews and the reference replay are capped at 30 seconds. Start promptly, bound capture queues, and honor input/idle watchdogs. A disconnect cancels unfinished work; do not reconnect or replay ambiguous PCM. Existing HTTPS/SSE clients remain supported explicitly. Sockets remain pinned to the admitting controller while deployments drain.

Download the locked Node WebSocket reference client. Extract, run npm ci, set GIGGY_API_KEY and GIGGY_STT_ORIGIN=https://api.giggy.ai, then run npm start -- --input recording.wav --allow-billable. The example replays 0.5–30 seconds of PCM16 mono 16 kHz WAV at capture cadence; applications own microphone capture and endpointing. Published SDK transports do not automatically change when this guide changes.

Migrate an OpenAI or AssemblyAI application

OpenAI-compatible text-to-speech uses https://api.giggy.ai/v1/audio/speech: keep the OpenAI speech client, set its base URL to https://api.giggy.ai/v1, authenticate with your Giggy key, set model=giggyspeech and use a Giggy voice UUID. Choose a supported response format and disable automatic synthesis retries. See the existing OpenAI-client TTS example.

Speech-to-text is a separate contract. Changing an OpenAI client base URL alone does not migrate audio.transcriptions.create: Giggy accepts raw WAV rather than an OpenAI multipart upload, uses xi-api-key and returns asynchronous admission or cumulative SSE. Replace the transcription call with the Giggy Python or JavaScript quickstart above, convert the recording locally and consume the verified final text. For AssemblyAI, replace transcriber.transcribe(audio) with transcriptions.transcribe and transcript.text with the result text.

Speaker labels, word timestamps, confidence, chapters, sentiment and redaction options have no equivalent in this API. Remove unsupported options; do not invent fields. For explicit lifecycle control use submit/get/result. After interruption with a known UUID, reconcile that operation rather than automatically resubmitting it.

AI coding agents and MCP

Giggy exposes a Streamable HTTP MCP server at https://giggy.ai/mcp. MCP supports public voice discovery, owned custom-voice discovery, speech generation, recorded-audio transcription, and durable generation reads. It is not a live microphone transport.

Voice-agent compatibility

LiveKit, Pipecat and Vapi can use the existing TTS compatibility integrations. The Giggy-maintained Pipecat adapter 0.3.0 supplies one-socket WebSocket STT and decode preparation with upstream Pipecat VAD. Native LiveKit streaming STT is available in its open source PR; the Vapi custom TTS webhook does not make Giggy a native Vapi transcriber. See the framework capability guide. These integrations do not establish an upstream provider listing. Use the published OpenAPI contract for supported formats and rates. Compatibility synthesis uses paid modes.

Developer tools and integrations

OpenAPI 3.1 specification · Speech API documentation · Pricing