Skip to content

Batching

On this page

There is no separate batch endpoint. The list is the batch, and one request returns every result. Send one item with the single-item alias and you get the answer directly; send several and results come back in the order you sent them, one per item.

Each document in a list is billed: ten CVs in one /parse/ call cost $0.10, and documents that fail are not charged. See Pricing and billing.

How do I send many CVs in one request?

Put them in the list field of the operation: up to 10 documents in files on /parse/, 10 CVs in resume_pdfs on /evaluate/, or 200 strings on /translate/ and /detect-language/. One request returns every result in the order you sent it, and a failed item never fails the rest.

Ceilings per operation

OperationList fieldCeilingSingle-item alias
/parse/files10 documentsfile
/evaluate/resume_pdfs, against one job10 documentsresume_pdf
/translate/texts, or files200 strings and 50,000 characters, or 10 documentstext
/detect-language/texts200 textstext
/summary/JSON array of interviews, or repeated media10 interviews or filesa single object
/prompt/noneone instruction per call (stateful)none
/parse/async, /evaluate/asyncfile_urls, resume_urls25 linksnone

Three properties to design around

  1. Order is preserved. results[i] always belongs to input i (on /translate/ with texts, translations[i]).
  2. Failures are per item. A bad document returns an error entry beside the successful ones, and the HTTP status stays 200. On /translate/ with texts, a string that could not be translated comes back unchanged with ok[i] set to false.
  3. The batch answers inside the request budget. Items that cannot finish inside the 300-second budget return a 504 entry rather than sinking the whole request. Resubmit just those.

Re-sending a failed item is always safe. It cannot create duplicates or half-finished records.

Backlogs larger than one request

For a backlog, prefer the async lane: POST /parse/async or POST /evaluate/async takes up to 25 links per task, answers at once, and delivers the result by callback or polling.

Heavy work runs three operations at a time on capacity shared across the service; beyond that, up to 12 requests queue for at most 10 seconds, then get 503. Sustained throughput is roughly 2 to 4 CVs per minute and varies with load. If you need materially more, tell us the volume. See Rate limits.

CV parsing takes 40 to 90 seconds per document. Treat CV processing as a background job, not a page load, and keep your client timeout above five minutes.

Evaluating a backlog against one job

Register the description once (free), then send lists of CVs against the job_id it returns. Inline job_details does the same job, but registering keeps a long backlog from re-sending the same paragraph with every request.

# 1. Register the job. Returns a job_id.
curl -X POST https://api.curriculo.me/public/jobs/ \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"job_details": "Senior backend engineer, Python and FastAPI, Seoul", "label": "BE-Seoul"}'
# -> {"job_id": "job_abc123", "label": "BE-Seoul"}

# 2. Evaluate a list of CVs against it.
curl -X POST https://api.curriculo.me/public/evaluate/ \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -F 'resume_pdfs=@candidate_a.pdf' \
  -F 'resume_pdfs=@candidate_b.docx' \
  -F 'job_id=job_abc123'

See Register a job and Evaluate a candidate.

Was this page helpful?

Updated