Usage, plans and languages
Three read-only endpoints tell you where you stand and what you can ask for. GET /me/usage needs your API key. GET /plans and GET /languages are public.
Your usage
Section titled “Your usage”GET /me/usage
curl -sS "https://api.scribewren.com/v1/me/usage" \ -H "Authorization: Bearer $SCRIBEWREN_API_KEY"The numbers below are examples. Yours depend on the plan and on what you have done today.
{ "planId": "unlimited_monthly", "day": { "date": "2026-12-01", "resetsAt": "2026-12-02T00:00:00.000Z", "transcriptions": { "used": 12, "limit": null }, "aiNotes": { "used": 0, "limit": 100 }, "translations": { "used": 0, "limit": 25 }, "askQuestions": { "used": 0, "limit": 100 } }, "month": { "start": "2026-12-01", "resetsAt": "2027-01-01T00:00:00.000Z", "audioMs": { "used": 86400000, "limit": 1000000000 }, "fairUseThrottled": false }, "inFlight": { "used": 1, "limit": 5 }}This object is the data field of the usual envelope.
| Field | Notes |
|---|---|
planId |
The owner’s plan: free, unlimited_monthly or unlimited_yearly. |
day.date |
The current day in UTC. Daily counters reset at 00:00 UTC, at day.resetsAt. |
day.transcriptions |
Transcriptions started today. An upload counts when you complete it. A retry counts as a new start. |
day.aiNotes, day.translations, day.askQuestions |
Counters for features of the app. They share the account, so they move when someone uses the app. This API has no endpoint for them. |
month.start, month.resetsAt |
The current calendar month in UTC. |
month.audioMs |
Audio processed this month, in milliseconds. limit is the fair-use level, not a hard cap. |
month.fairUseThrottled |
true once used reaches the fair-use level. New jobs then go to the standard queue until the month resets. They are never rejected for this reason. |
inFlight |
Uploads that are still pending plus transcriptions that are queued or running. limit is how many may be open at once. |
Each counter is an object with used and limit. When limit is null, the plan has no cap on that counter.
Because the endpoint is cheap, you can check it before a large batch. If inFlight.used has reached inFlight.limit, a new POST /media returns 403 PLAN_LIMIT_EXCEEDED with details.limit set to concurrency. For the other limits, see Errors.
GET /plans
No key is needed. The response lists every plan with its limits and features, straight from the same configuration the app uses. Read limits from here instead of hardcoding them, because plan limits can change.
Each plan has:
| Field | Notes |
|---|---|
id |
free, unlimited_monthly or unlimited_yearly. |
name |
Display name. |
interval |
month, year or null for the free plan. |
price |
{ amount, currency }, with amount in minor currency units. |
limits |
Numbers, with null meaning no cap: dailyTranscriptions, maxDurationMs, maxFileSizeBytes, concurrency, aiNotesDaily, translationsDaily, playbackRetentionDays, fairUseAudioMsMonthly and a few more for app features. |
features |
queueClass, aiNoteTypes, translation, diarization, exportFormats and api. |
features.api is true for the plans that include this API.
Languages
Section titled “Languages”GET /languages
No key is needed. The response has two lists, transcription and translation. Each entry is { code, name, rtl }, where rtl is true for right-to-left languages.
Pass a code from transcription as options.language when you create media. The value auto is always accepted and detects the language. It is not listed.
Anonymous calls are limited per IP address. See Rate limits.
Can't find what you need? Contact support, email [email protected], or open Help and then Contact in the app. scribewren.com