# Quickstart

> Munsit is a RESTful API you can call from any language or framework — high-quality Arabic voice synthesis across dialects (Fusha, Emirati, Saudi Najdi, Saudi Hijazi and more), streaming audio output, customizable voice parameters, and Arabic speech recognition. Three steps to your first result.

1

## Get an API key

Sign up and generate an API key from the dashboard for your region. You'll send it in the `x-api-key` header.

> Keys are region-specific. Each endpoint requires an API key from its corresponding dashboard — a global key won't authenticate against the UAE endpoint, and vice versa. See Authentication for details.

[Create a Global API key →](https://app.munsit.com/en/api-keys)

2

## Make your first request

Put your key in the `x-api-key` header, point it at an audio file, and send it.

```bash
# 1. your key, from the dashboard
export MUNSIT_API_KEY="eyJhbGciOiJIUzI1NiIs..."

# 2. send audio, get Arabic text
curl -X POST "https://api.munsit.com/api/v1/audio/transcribe" \
  -H "x-api-key: $MUNSIT_API_KEY" \
  -F "file=@meeting.mp3"
```

```python
import os, requests

r = requests.post(
    "https://api.munsit.com/api/v1/audio/transcribe",
    headers={"x-api-key": os.environ["MUNSIT_API_KEY"]},
    files={"file": open("meeting.mp3", "rb")},
)

print(r.json()["data"]["transcription"])
```

```javascript
import fs from "node:fs";

const form = new FormData();
form.append("file", new Blob([fs.readFileSync("meeting.mp3")]), "meeting.mp3");

const res = await fetch(
  "https://api.munsit.com/api/v1/audio/transcribe",
  { method: "POST",
    headers: { "x-api-key": process.env.MUNSIT_API_KEY },
    body: form }
);

const { data } = await res.json();
console.log(data.transcription);
```

```go
package main

import (
	"bytes"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
)

func main() {
	file, _ := os.Open("meeting.mp3")
	defer file.Close()

	var buf bytes.Buffer
	w := multipart.NewWriter(&buf)
	part, _ := w.CreateFormFile("file", "meeting.mp3")
	io.Copy(part, file)
	w.Close()

	req, _ := http.NewRequest("POST", "https://api.munsit.com/api/v1/audio/transcribe", &buf)
	req.Header.Set("x-api-key", os.Getenv("MUNSIT_API_KEY"))
	req.Header.Set("Content-Type", w.FormDataContentType())

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
```

Response — 200

```
{
  "statusCode": 200,
  "data": {
    "transcriptionId": "805059bf-7c3f-4a1e-9d2b-1f0c6ae83b47",
    "transcription": "اجتماع الفريق يبدأ الساعة العاشرة",
    "duration": 4.56
  },
  "message": "Success"
}
```

> Prefer speech out instead of text? Munsit also does text-to-speech: real-time Arabic voice synthesis with multiple dialects, streaming audio output, and stability / speed voice parameters. The Authentication page shows a full text-to-speech request.

## Explore the documentation

Pick what's next.

- [Get an API key](https://app.munsit.com/en/api-keys) — Generate and manage your API keys from the dashboard. — `app.munsit.com`

- [Text to Speech API](/text-to-speech/get-started) — Arabic voice synthesis with streaming audio output. — `POST /text-to-speech`

- [Speech to Text API](/speech-to-text/transcribe) — Upload audio and get Arabic transcription with streaming support. — `POST /audio/transcribe`

- [Minutes of Meeting API](/speech-to-text/minutes-of-meetings) — Transcribe meeting recordings with structured output. — `POST /minutes-of-meeting`

> Stuck? Every error the API returns is listed on Errors, and a human answers on Support.
