Get a link to upload a large file (up to 25 MB)
curl -X POST "https://api.valjeanspecialty.com/api/agent/v1/submissions/SUBMISSION_ID/documents/upload-url" \ -H "Authorization: Bearer $VALJEAN_KEY" \ -H "Content-Type: application/json" \ -d '{"file_name":"SOV.xlsx","content_type":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}'const res = await fetch("https://api.valjeanspecialty.com/api/agent/v1/submissions/SUBMISSION_ID/documents/upload-url", { method: "POST", headers: { Authorization: `Bearer ${process.env.VALJEAN_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "file_name": "SOV.xlsx", "content_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }),});console.log(await res.json());import os, requests
res = requests.post( "https://api.valjeanspecialty.com/api/agent/v1/submissions/SUBMISSION_ID/documents/upload-url", headers={"Authorization": f"Bearer {os.environ['VALJEAN_KEY']}"}, json={ "file_name": "SOV.xlsx", "content_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" },)print(res.json())A one-time link. PUT the file’s bytes to upload_url with the given Content-Type, then call /documents/complete.
Needs a read-and-submit key and an agency with a signed broker agreement.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Submission id.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Example
{ "file_name": "SOV.xlsx", "content_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}Responses
Section titled “Responses”OK
object
PUT the file’s bytes here.
object
What to call next.
Example
{ "method": "PUT"}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." }}Not found, or not your agency’s (not_found). The API never says which.
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": "not_found", "message": "Submission not found." }}The file’s state doesn’t allow it: closed, not_open, quote_expired, already_requested, not_withdrawable (the bind request already went to the market: call your broker), no_instant_market, limit, or ai_off (plain-sentence answers aren’t switched on; send answers by key). Don’t retry the same request.
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": "closed", "message": "This submission is closed." }}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." }}
