Developers

Ship voice in five minutes. Keep shipping after that.

Two battle-tested SDKs, one straightforward HTTP API, and a streaming surface that doesn't make you build back-pressure yourself. Install, get a key, make the call.

One line, any terminal:

npm install @tryhakim/voice
pip install hakim
curl https://api.tryhakim.ai/v1/audio/speech

Code that runs on first copy

One call to synthesise. One call to transcribe.

The same three endpoints back the landing demo, the playground, and your production pipeline. Every example below is the shortest working call, no fake helpers, no hidden config.

Synthesise speech

TTS with Hakim Fast v1.3. Streaming MP3 to disk, a voice you already heard on the landing.

import { Hakim } from '@tryhakim/voice';

const client = new Hakim({ apiKey: process.env.HAKIM_API_KEY });

const audio = await client.audio.speech.create({
  model: 'hakim-fast-v1.3',
  voice: 'reem-khaleeji',
  input: 'أهلاً وسهلاً بكم في حكيم.',
  format: 'mp3',
});

await audio.writeToFile('hello.mp3');

Transcribe audio

STT with Hakim Arab v2. Verbose JSON so you get timestamps, speakers, and confidences without a second call.

import { createReadStream } from 'node:fs';
import { Hakim } from '@tryhakim/voice';

const client = new Hakim({ apiKey: process.env.HAKIM_API_KEY });

const transcription = await client.audio.transcriptions.create({
  model: 'hakim-arab-v2',
  file: createReadStream('call.wav'),
  language: 'ar',
  response_format: 'verbose_json',
});

console.log(transcription.text);

Every parameter lives in the API reference.

SDKs + bindings

Pick the runtime you already ship in.

Typed surface, idiomatic naming, zero bundled telemetry. Node and Python are stable and on every release. HTTP is the common denominator, cURL always works.

Node.js · TypeScript

Stable

ESM + CJS. First-class streams. Runs on Node 18+, Cloudflare Workers, Deno, Bun.

npm install @tryhakim/voice

Python

Stable

Sync + async clients. Typed with mypy. Runs on CPython 3.9+ and PyPy.

pip install hakim

Go

Planned

Idiomatic Go client with context-aware streaming. Targeted for v1.1.

Coming soon

Rust

Planned

Zero-cost async client using tokio + tower. Targeted for v1.1.

Coming soon

Build in five minutes

From landing to first audio in four steps.

We're not grading the stopwatch, we're saying the flow is small enough that if you get stuck, something's wrong with us, not you.

  1. Create a free account

    No card, no trial clock, no automatic Starter plan. Sign up with email or GitHub and you're on the free tier.

  2. Grab an API key

    Dashboard → API keys → new key. Named, scoped, revokable. We never show the raw key again after you close the modal.

  3. Install an SDK

    npm install @tryhakim/voice or pip install hakim. Or skip the SDK and hit the HTTP API with cURL, everything works the same way.

  4. Make the first call

    Paste one of the snippets above, replace the text, run. You'll hear Reem in Khaleeji, or you'll see the transcription for your own audio file.

Streaming

Streaming that doesn't pretend.

TTS streams PCM or MP3 chunks from the first viable frame. STT streams interim + final tokens over WebSocket. We don't hold a whole utterance hostage to buffer on our side.

First chunk arrives fast

Streamed synthesis starts emitting audio before the full utterance is generated, so your user hears the opening phonemes while the rest is still decoding.

Back-pressure handled for you

Both SDKs honour consumer back-pressure, stop reading and we stop generating. No phantom bills for audio you never played.

Resumable transcription

Long STT sessions survive reconnection via a resume token. Lose the socket, reconnect, continue, no re-uploading the audio you already sent.

Your free key is one form away.

Five minutes to a running synthesis. No card, no sales call, no automatic plan upgrade when the trial ends.