One REST API for speech, audio, YouTube, image and PDF — with speaker separation and ready-made document templates. Built for CRMs, legal software, HR tools and partners.
https://app.intexting.com/api/V1
curl -X POST https://app.intexting.com/api/V1/audio-to-text \ -H "Authorization: Bearer $TOKEN" \ -F "file=@meeting.m4a" \ -F "diarization=1" \ -F "document_type=minutes_of_meeting"
Copy your personal access token from Dashboard › API Documentation, or generate one with the login endpoint. Send it with every call. Tokens can be revoked from the dashboard at any time.
Authorization: Bearer <YOUR_PERSONAL_ACCESS_TOKEN> Accept: application/json
| Field | Type | Description |
|---|---|---|
| string · required | Your account email | |
| password | string · required | Your account password |
{
"data": {
"token": "1|aB3x…",
"token_type": "Bearer",
"user": { "id": 42, "name": "Priya Mehta", "email": "priya@firm.com" }
}
}
Upload an audio file with diarization=1 and a document_type — you get the transcript, speakers and a structured document back.
curl -X POST https://app.intexting.com/api/V1/audio-to-text \ -H "Authorization: Bearer $TOKEN" \ -F "file=@meeting.m4a" \ -F "diarization=1" \ -F "document_type=minutes_of_meeting"
import requests
res = requests.post(
"https://app.intexting.com/api/V1/audio-to-text",
headers={"Authorization": f"Bearer {TOKEN}", "Accept": "application/json"},
files={"file": open("meeting.m4a", "rb")},
data={"diarization": 1, "document_type": "minutes_of_meeting"},
)
print(res.json()["data"]["document"])
const form = new FormData();
form.append("file", await fs.openAsBlob("meeting.m4a"), "meeting.m4a");
form.append("diarization", "1");
form.append("document_type", "minutes_of_meeting");
const res = await fetch("https://app.intexting.com/api/V1/audio-to-text", {
method: "POST",
headers: { Authorization: `Bearer ${TOKEN}`, Accept: "application/json" },
body: form,
});
console.log((await res.json()).data.document);
$res = Http::withToken($token)
->acceptJson()
->attach("file", fopen("meeting.m4a", "r"), "meeting.m4a")
->post("https://app.intexting.com/api/V1/audio-to-text", [
"diarization" => 1,
"document_type" => "minutes_of_meeting",
]);
$document = $res->json("data.document");
MP3, WAV, M4A, OGG, FLAC or AAC up to 100 MB. Language is auto-detected across 135+ languages.
| Parameter | Type | Description |
|---|---|---|
| file | file · required | MP3, WAV, M4A, OGG, FLAC, AAC · max 100 MB |
| language | string | Optional — auto-detected if omitted |
| diarization | integer | 1 to separate speakers (default 0) |
| document_type | string | Optional — see document templates |
curl -X POST https://app.intexting.com/api/V1/audio-to-text \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json" \ -F "file=@call.mp3" \ -F "diarization=1" \ -F "document_type=client_meeting"
Stream short WebM, WAV, MP3 or OGG chunks from a browser or mobile mic and receive text and documents.
| Parameter | Type | Description |
|---|---|---|
| file | file · required | WebM, WAV, MP3, OGG |
| language | string | Optional |
| document_type | string | Optional |
curl -X POST https://app.intexting.com/api/V1/speech-to-text \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json" \ -F "file=@note.webm" \ -F "document_type=field_visit_report"
Send a YouTube video or live URL. Jobs run asynchronously — poll status every 3–5 seconds, or stop a live stream to finalise it.
| Parameter | Type | Description |
|---|---|---|
| url | string · required | YouTube video or live URL |
| language | string | Optional |
| document_type | string | Optional |
curl -X POST https://app.intexting.com/api/V1/youtube-to-text \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json" \ -F "url=https://youtube.com/watch?v=…" \ -F "document_type=media_article"
JPG, PNG, WEBP, BMP or GIF up to 25 MB. Add notes to guide the extraction.
| Parameter | Type | Description |
|---|---|---|
| file | file · required | JPG, JPEG, PNG, WEBP, BMP, GIF · max 25 MB |
| language | string | Optional — auto-detected |
| notes | string | Optional extraction instructions |
curl -X POST https://app.intexting.com/api/V1/image-to-text \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json" \ -F "file=@whiteboard.jpg" \ -F "notes=Keep the table layout"
PDFs up to 50 MB. Choose all pages or a range.
| Parameter | Type | Description |
|---|---|---|
| file | file · required | PDF · max 50 MB |
| page_range | string | all, 1-5 or 3,7 (default all) |
| language | string | Optional |
curl -X POST https://app.intexting.com/api/V1/pdf-to-text \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json" \ -F "file=@contract.pdf" \ -F "page_range=1-5"
| document_type | Output |
|---|---|
| minutes_of_meeting | Minutes of Meeting |
| client_meeting | Client Meeting Notes |
| interview_report | Interview Report |
| legal_case_report | Legal Case Report |
| field_visit_report | Field Visit Report |
| media_article | Media Article |
| school_notes | School & Lecture Notes |
Errors return status, code, message and field-keyed errors. On 429, retry with exponential backoff.
| Code | Status | Meaning |
|---|---|---|
| 200 | OK | Request succeeded |
| 202 | Accepted | Asynchronous processing started |
| 401 | Unauthorized | Token missing, malformed or revoked |
| 422 | Unprocessable | Validation failed — see errors |
| 429 | Too many requests | Rate limit reached — retry with backoff |
| 500 | Server error | Processing failed — safe to retry |
Every request is encrypted end to end.
Uploaded media is deleted once the transcript is finalised.
Your data is never used to train AI models.
For software companies, implementation partners and agencies who want documents from conversations inside their own products. Tell us your use case and volume.