Skip to main content
POST
Create Job

Overview

Part of Batch transcription, which covers the whole flow, models, languages and limits. Create a new batch transcription job. The job is created in CREATED status with your audio accepted — it does not start transcription yet. The response is the same for prisma-v3.0 and Prisma v2.5. Call Start job next. The config object is the same for all three, including for prisma-v3.0. Authenticated private bucket access is not supported. The Try it playground uses the public URL (application/json) body below. For file upload, use the multipart cURL examples. The presigned upload endpoint has no playground.

Authentication

Request body

Public URL (application/json) — Try it

URLs are validated at Start Job, not at create.

Multipart upload (multipart/form-data)

Use cURL / your client — not the Try it panel. Send config as a form field with Content-Type: application/json (see cURL -F '...;type=application/json').

Example cURL

Direct upload (live-verified)

Prisma v3.0

Set model to prisma-v3.0 in config to use Prisma v3.0. It works with every way of creating a job. The model identifies the language itself, and config accepts format, keyterms, topic and speaker_names. See Prisma v3.0 options. The smallest prisma-v3.0 config is:

Inline upload (multipart)

Cloud storage (JSON)

The presigned upload example is below.

Public URL

Diarization (2 speakers)

Speech enhancement (noisy audio)

Set with_denoise: true to clean the recording before it is transcribed. Use it for noisy call-centre or field recordings; leave it off for clean studio audio, where it adds processing time without changing the transcript. See Speech enhancement.
It works the same way on the public-URL body:

Presigned upload (large files)

Use a presigned upload for files too large for a direct upload, up to 5 GiB per file. It works with every model, including prisma-v3.0. You create the job, upload each file to a presigned URL, then start the job.
The response is the same 201 as for any other job (see Response) with an extra uploads array that holds the upload URLs.

Example — Python SDK

The Python SDK builds the multipart request for you, checks file limits before uploading, and sends only the file name (never a path).
create_job() starts the job right away unless you pass start=False. For the whole flow in one call, use client.transcribe(...).

Response

Success — multipart upload (201)

Save job_id. Always start with:
(even if the message mentions /v1/jobs/...)

Success — public URL create (201)

Error responses

401 Missing API key
400 Unsupported language
400 Invalid config (Prisma v3.0 options)
The text after Value error, says what is wrong: An unsupported language code, or auto mixed with other codes, is rejected the same way on every model. Other 400 errors on this endpoint: A config part that is not valid JSON currently returns 500 Internal Server Error. Send valid JSON.
string
Unique job identifier. Required for Start / Status / Files / Cancel.
string
Always CREATED on success.
integer
Number of files accepted for multipart/ZIP uploads. May be null for public-URL creates.

Webhook samples

If you pass callback_url, Gnani sends a POST to your URL when the job finishes. Full payload examples (including transcripts[] / full_transcript): → Webhook samples on Batch transcription Events: job.completed · job.partial_failure · job.failed · job.cancelled

Use cases

  • Uploading one or many call recordings for offline transcription
  • Sending a ZIP of customer audio for batch processing
  • Pointing to public HTTPS / S3 presigned URLs without re-uploading files
  • Uploading recordings too large for a direct upload (up to 5 GiB per file)
Next: Start job

Authorizations

X-API-Key-ID
string
header
required

Your Gnani API key

Body

application/json
config
object
required
source
object
required
callback_url
string<uri>

Optional HTTPS webhook URL for terminal job results

Response

Job created

job_id
string<uuid>
status
string
Example:

"CREATED"

created_at
string<date-time>
message
string
total_files_accepted
integer | null