Skip to content

Summarise an interview

POSThttps://api.curriculo.me/public/summary/
On this page

Stateless. Turns an interview into highlights, red_flags, skills_mentioned, decision_recommendation, decision_reasoning and optional speaking-time analytics. Send a transcript as text, a transcript document, or a recording to be transcribed and summarised in one request.

Price: $0.01 per request for a transcript. For a recording, $0.002 per minute of audio plus $0.01. See Pricing and billing.

Transcript mode

application/json. Send a JSON object for one interview, or a JSON array for up to 10. Each interview gets its own id.

FieldTypeNotes
interview_idstringYour own identifier. Echoed back, never looked up.
transcript_text (required)stringRaw transcript, up to 200,000 characters.
transcript_entriesobject[]Optional structured turns (participant, text, startTime, endTime). Enables speaking-time analytics.
languagestringISO 639-1 code to render the summary prose in. Defaults to English.
curl -X POST https://api.curriculo.me/public/summary/ \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"interview_id": "int_0042", "transcript_text": "Interviewer: Tell me about a system you shipped. Candidate: …", "language": "en"}'

File mode

multipart/form-data on the same path. Upload recordings or transcript documents.

FieldTypeNotes
mediafile[]Repeat for up to 10 files. Each file's own content decides how it is read: PDF, DOCX and DOC are read as transcripts (up to 50 MB); anything else is treated as audio or video (for example mp4, mov, mkv, mp3, m4a, wav) and transcribed first (up to 100 MB).
interview_idstringYour identifier, shared by every file in the request. Defaults to the uploaded filename.
languagestringISO 639-1 code for the summary prose.
curl -X POST https://api.curriculo.me/public/summary/ \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -F '[email protected]' \
  -F 'interview_id=int_0042' \
  -F 'language=en'

A recording comes back with its transcription alongside the analysis, so no separate transcription vendor is needed. Because a mislabelled upload is read by its content, a transcript saved with the wrong extension still lands correctly.

A synchronous call must finish inside 300 seconds. For long interviews, send a link to POST /summary/async instead: recordings up to 1 GB and 2 hours.

Where media transcription is not enabled, a recording returns 503. Send a transcript instead.

Response

The summary fields above, with your interview_id echoed back. A JSON array of interviews returns a results array in input order. See Batching.

Timing

15 to 20 seconds for a transcript. Recordings take longer, depending on length.

Errors

StatusTypical cause
400Blank transcript, unreadable file, or a duplicate JSON key.
413A transcript over 200,000 characters, more than 10 interviews or files, or a file over its size limit.
422transcript_text is missing, or a field is misnamed.
503Media transcription is not enabled. Send a transcript instead.
504Processing exceeded 300 seconds. Use /summary/async.

Updated