Send documents and a description
curl -X POST "https://api.valjeanspecialty.com/api/agent/v1/intake" \ -H "Authorization: Bearer $VALJEAN_KEY" \ -F "narrative=Seafood restaurant with a full bar in Mount Pleasant" \ -F "state=SC" -F "lines=GL,LL" -F "client_reference=INT-1" \ -F "files=@ACORD-125.pdf;type=application/pdf"import fs from "node:fs";
const form = new FormData();form.append("files", new Blob([await fs.promises.readFile("loss-runs.pdf")], { type: "application/pdf" }), "loss-runs.pdf");form.append("narrative", "Seafood restaurant with a full bar in Mount Pleasant");const res = await fetch("https://api.valjeanspecialty.com/api/agent/v1/intake", { method: "POST", headers: { Authorization: `Bearer ${process.env.VALJEAN_KEY}` }, body: form,});console.log(await res.json());import os, requests
res = requests.post( "https://api.valjeanspecialty.com/api/agent/v1/intake", headers={"Authorization": f"Bearer {os.environ['VALJEAN_KEY']}"}, files={"files": ("loss-runs.pdf", open("loss-runs.pdf", "rb"), "application/pdf")},)print(res.json())Starts a file from documents plus a few sentences. Valjean reads the documents with AI and a broker confirms the details. multipart/form-data with “files” (up to 5, 4 MB in total) and the fields below (lines comma-separated), or JSON with the same fields and no files.
Needs a read-and-submit key and an agency with a signed broker agreement.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Your own id for this request (up to 80 letters, numbers, . _ : -). Used as client_reference when the body has none; a retry with the same key returns the first file (200, duplicate: true). If both are sent they must match.
Example
AMS-10442Request Bodyrequired
Section titled “Request Bodyrequired”object
Up to 5 files, 4 MB in total. PDF, images, Word, Excel, CSV or text.
Comma-separated, e.g. GL,LL.
Example
{ "narrative": "Family-owned seafood restaurant with a bar in Folly Beach, open 11 to 11.", "state": "SC", "lines": "GL,LL", "client_reference": "INT-1"}object
Example generated
{ "narrative": "example", "client_reference": "example", "insured_name": "example", "state": "example", "lines": [ "example" ], "effective_date": "2026-04-15", "contact_email": "hello@example.com"}Responses
Section titled “Responses”A retry with the same client_reference or Idempotency-Key: the first file, with duplicate: true. Nothing new is created.
object
Valjean reference, e.g. VS-000624.
Line names, e.g. “General Liability”.
Plain-English status you can show as is.
File names on the submission.
What’s still open, each with a key. Empty once the file is closed.
object
Document, field, question, photo, or “requested” (an item your broker asked for).
“answer”, “upload a document” or “answer or upload”.
object
How to answer. “file” means upload a document instead.
For type “choice”: the allowed answers.
Quotes your broker has presented.
Anonymous counts: market names appear only on presented quotes.
object
Markets the file has been sent to.
Quotes your broker has presented to you.
One plain sentence, e.g. “With 4 markets: 3 quoted, 1 declined.”
True when client_reference (or the Idempotency-Key header) matched an existing file: that file is returned with 200 and nothing new is created.
A private status page you can share with the producer. Treat it like a password. Returned when the file is created; a duplicate doesn’t make another link.
object
Detected or given document type, e.g. acord_125, loss_runs, sov, other.
Only on /documents/complete when the upload was already recorded.
Example
{ "stage": "new", "needs": [ { "level": "required", "answer": { "type": "text" } } ]}Headers
Section titled “Headers”Example
"per-key";q=120;w=60The rate limit for this key, as an IETF RateLimit-Policy: 120 requests (q) per 60-second window (w), counted across all of Valjean’s servers. Over it, you get 429 with Retry-After.
OK
object
Valjean reference, e.g. VS-000624.
Line names, e.g. “General Liability”.
Plain-English status you can show as is.
File names on the submission.
What’s still open, each with a key. Empty once the file is closed.
object
Document, field, question, photo, or “requested” (an item your broker asked for).
“answer”, “upload a document” or “answer or upload”.
object
How to answer. “file” means upload a document instead.
For type “choice”: the allowed answers.
Quotes your broker has presented.
Anonymous counts: market names appear only on presented quotes.
object
Markets the file has been sent to.
Quotes your broker has presented to you.
One plain sentence, e.g. “With 4 markets: 3 quoted, 1 declined.”
True when client_reference (or the Idempotency-Key header) matched an existing file: that file is returned with 200 and nothing new is created.
A private status page you can share with the producer. Treat it like a password. Returned when the file is created; a duplicate doesn’t make another link.
object
Detected or given document type, e.g. acord_125, loss_runs, sov, other.
Only on /documents/complete when the upload was already recorded.
Example
{ "stage": "new", "needs": [ { "level": "required", "answer": { "type": "text" } } ]}Headers
Section titled “Headers”Example
"per-key";q=120;w=60The rate limit for this key, as an IETF RateLimit-Policy: 120 requests (q) per 60-second window (w), counted across all of Valjean’s servers. Over it, you get 429 with Retry-After.
Fix the request and send it again (invalid_request, invalid_json).
object
object
Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.
Plain-English explanation you can show a person.
Validation problems, as “field: problem” (400 invalid_request only).
Example
{ "error": { "code": "invalid_request", "message": "Check the request.", "issues": [ "insured.state: Too small: expected string to have >=2 characters" ] }}Key or token missing, wrong, expired or revoked (unauthorized). Don’t retry: get a new key or sign in again.
object
object
Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.
Plain-English explanation you can show a person.
Validation problems, as “field: problem” (400 invalid_request only).
Example
{ "error": { "code": "unauthorized", "message": "This API key isn't valid. Ask your Valjean broker for a new one." }}Not allowed: read_only (a read key tried to submit), agency_not_active (no signed broker agreement), not_offered (instant quotes are off), forbidden (API access off for the agency). Don’t retry.
object
object
Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.
Plain-English explanation you can show a person.
Validation problems, as “field: problem” (400 invalid_request only).
Example
{ "error": { "code": "read_only", "message": "This key can read only. Ask your Valjean broker for a key that can submit." }}Body or file too large (too_large): JSON bodies up to 64 KB, direct uploads 4 MB, upload links 25 MB.
object
object
Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.
Plain-English explanation you can show a person.
Validation problems, as “field: problem” (400 invalid_request only).
Example
{ "error": { "code": "too_large", "message": "Files over 4 MB need an upload link." }}File type not accepted (unsupported_type): PDF, images, Word, Excel, CSV or text.
object
object
Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.
Plain-English explanation you can show a person.
Validation problems, as “field: problem” (400 invalid_request only).
Example
{ "error": { "code": "unsupported_type", "message": "Send PDF, image, Word, Excel, CSV or text files." }}Too many requests (rate_limited): 120 a minute per key, 30 a minute per IP on public endpoints, counted across all of Valjean’s servers. Wait Retry-After seconds.
object
object
Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.
Plain-English explanation you can show a person.
Validation problems, as “field: problem” (400 invalid_request only).
Example
{ "error": { "code": "rate_limited", "message": "Too many requests. Try again in a minute." }}Headers
Section titled “Headers”Example
60Seconds to wait.
Something went wrong on Valjean’s side (server_error). Safe to retry later; creates are idempotent with client_reference or an Idempotency-Key header.
object
object
Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.
Plain-English explanation you can show a person.
Validation problems, as “field: problem” (400 invalid_request only).
Example
{ "error": { "code": "server_error", "message": "Something went wrong. Try again shortly." }}
