Hear2Text
Developer API

Transcription your servers can call

Post a file or a URL, poll one endpoint, get back timestamped, speaker-labelled text. The same engine that powers Hear2Text, behind an HTTP API — included with every subscription, at no extra cost per minute.

Zobacz cennik
POST /api/public/v1/transcriptions
curl -X POST https://heartotext.com/api/public/v1/transcriptions \
  -H "Authorization: Bearer h2t_live_..." \
  -H "Idempotency-Key: 7f3c9a12" \
  -F "file=@meeting.m4a" \
  -F "language=en"

{
  "id": "0f2f5f6a-2c6c-4f4e-9d1e-5d8f2a1b3c4d",
  "status": "queued",
  "title": null,
  "language": "en",
  "duration_seconds": null,
  "created_at": "2026-09-19T10:11:12+00:00",
  "updated_at": "2026-09-19T10:11:12+00:00",
  "source": { "type": "file", "name": "meeting", "url": null },
  "workspace": null,
  "progress": { "step": null, "percent": null, "indeterminate": false },
  "failure_reason": null
}

Upload a recording and get an id back.

What you can build

Anything that needs speech turned into text without a person in the loop.

Meeting notes

Drop the recording from your conferencing tool in as the call ends and have the transcript waiting in your workspace before anyone opens their laptop again.

Podcast pipelines

Generate show notes, chapter markers and SRT subtitles from the master file as part of your publishing job.

Call quality review

Score support and sales calls automatically: speaker labels tell you who spoke, timestamps tell you when.

Media archives

Backfill years of audio and video into searchable text, one request per file, at the pace your fair-use ceiling allows.

Three requests, start to finish

No SDK to install, no webhooks to host. Create, poll, fetch.

01

Create

POST the file or a URL. You get an id and the status "queued" straight back.

POST /transcriptions
curl -X POST https://heartotext.com/api/public/v1/transcriptions \
  -H "Authorization: Bearer h2t_live_..." \
  -H "Idempotency-Key: 7f3c9a12" \
  -F "file=@meeting.m4a" \
  -F "language=en"

{
  "id": "0f2f5f6a-2c6c-4f4e-9d1e-5d8f2a1b3c4d",
  "status": "queued",
  "title": null,
  "language": "en",
  "duration_seconds": null,
  "created_at": "2026-09-19T10:11:12+00:00",
  "updated_at": "2026-09-19T10:11:12+00:00",
  "source": { "type": "file", "name": "meeting", "url": null },
  "workspace": null,
  "progress": { "step": null, "percent": null, "indeterminate": false },
  "failure_reason": null
}
02

Poll

GET the transcription until status reads "completed". The response carries a progress step and percentage while it works.

GET /transcriptions/{id}
curl https://heartotext.com/api/public/v1/transcriptions/0f2f5f6a-2c6c-4f4e-9d1e-5d8f2a1b3c4d \
  -H "Authorization: Bearer h2t_live_..."

{
  "id": "0f2f5f6a-2c6c-4f4e-9d1e-5d8f2a1b3c4d",
  "status": "completed",
  "title": null,
  "language": "en",
  "duration_seconds": 1845,
  "created_at": "2026-09-19T10:11:12+00:00",
  "updated_at": "2026-09-19T10:14:40+00:00",
  "source": { "type": "file", "name": "meeting", "url": null },
  "workspace": null,
  "progress": { "step": null, "percent": null, "indeterminate": false },
  "failure_reason": null
}
03

Fetch

GET the segments, cursor-paginated, or ask for the whole thing as txt, srt, vtt, pdf or docx.

GET /transcriptions/{id}/segments
curl "https://heartotext.com/api/public/v1/transcriptions/0f2f5f6a-2c6c-4f4e-9d1e-5d8f2a1b3c4d/segments?limit=100" \
  -H "Authorization: Bearer h2t_live_..."

{
  "data": [
    { "index": 0, "start": 61.0, "end": 65.0, "speaker": "A", "text": "Hello" }
  ],
  "has_more": true,
  "next_cursor": "eyJvIjoxMDB9"
}

Kluczowe funkcje

Speaker labels

Every segment carries the speaker it belongs to, worked out from the audio itself.

Timestamped segments

Start and end times on every segment, ready for subtitles or for seeking in a player.

Automatic language detection

Send the audio without a language and it is detected, or pin it with an ISO code.

Export formats

txt, srt, vtt, pdf and docx from the same transcription, without re-running it.

Safe retries

Send an Idempotency-Key with a create and a repeated request returns the first response instead of a second transcription.

One error shape

Every failure is a JSON body with a stable error code and a human message.

Subscribers only

Included with every Hear2Text subscription

The API is not a separate product and has no separate bill. Any paid plan turns it on; there is no per-minute API price and no free API tier. Your key stops working if the subscription lapses, and starts again when it resumes.

Monthly
9,99 USD/month
Yearly
89,99 USD/year
Works out at 7,50 USD a month.

Keys are created and revoked in your profile, under the API tab. A key is shown once, at creation.

Limits

These are the numbers the API enforces, read straight from the running configuration.

LimitValue
Longest single recording6 hours
Audio per day (fair use)1200 minutes
Transcriptions running at once5
Largest upload512 MB
Requests per minute, per key120
New transcriptions per hour, per account60
New transcriptions per day, per account500

Go over a rate limit and you get a 429 with a Retry-After header — nothing is dropped, and nothing is billed extra.

Często zadawane pytania

How much does the API cost?
Nothing beyond your subscription. There is no per-minute API rate and no separate developer plan — a paid Hear2Text subscription includes API access, within the fair-use limits above.
Is there a free tier or a trial key?
No. The API is for subscribers only. You can try the transcription itself for free in the app, and the API turns on the moment you subscribe.
Do you send webhooks when a transcription finishes?
Not in v1. You poll the transcription endpoint, which is cheap and does not need you to host a public callback URL. Webhooks are on the list.
Can I translate or use the AI assistant through the API?
Not in v1. Translation and the assistant stay in the app for now; the API covers transcription, segments and exports.
Can I call the API from the browser?
No. CORS is off by design: an API key belongs on your server, never in a page a visitor can read.
What happens to my keys if I cancel?
They stop authenticating and every request answers 403 subscription_required. The keys themselves stay in your profile and work again if you resubscribe.

Start building

The reference, the error catalogue and copy-paste examples are all in the docs.