Quickstart
Get a key from your agency portal (how to get access). Use a demo key (vjk_demo_…) while you build: it works against a fictional sample book (Sandbox).
export VALJEAN_KEY=vjk_demo_...curl https://api.valjeanspecialty.com/api/agent/v1/me -H "Authorization: Bearer $VALJEAN_KEY"
curl -X POST https://api.valjeanspecialty.com/api/agent/v1/appetite -H "Authorization: Bearer $VALJEAN_KEY" \ -H "content-type: application/json" \ -d '{"lines":["GL","LL"],"state":"SC","description":"seafood restaurant with a full bar"}'
curl -X POST https://api.valjeanspecialty.com/api/agent/v1/submissions -H "Authorization: Bearer $VALJEAN_KEY" \ -H "content-type: application/json" \ -d '{"client_reference":"AMS-10442", "insured":{"name":"Shem Creek Oyster Bar LLC","state":"SC","city":"Mount Pleasant"}, "lines":["GL","LL"],"effective_date":"2026-12-15", "class_description":"Bar and restaurant","annual_revenue":2100000}'const base = "https://api.valjeanspecialty.com/api/agent/v1";const headers = { Authorization: `Bearer ${process.env.VALJEAN_KEY}`, "content-type": "application/json" };
const me = await (await fetch(`${base}/me`, { headers })).json();
const fit = await (await fetch(`${base}/appetite`, { method: "POST", headers, body: JSON.stringify({ lines: ["GL", "LL"], state: "SC", description: "seafood restaurant with a full bar" }),})).json();
const file = await (await fetch(`${base}/submissions`, { method: "POST", headers, body: JSON.stringify({ client_reference: "AMS-10442", insured: { name: "Shem Creek Oyster Bar LLC", state: "SC", city: "Mount Pleasant" }, lines: ["GL", "LL"], effective_date: "2026-12-15", class_description: "Bar and restaurant", annual_revenue: 2100000, }),})).json();console.log(file.reference, file.status, file.needs);import os, requests
base = "https://api.valjeanspecialty.com/api/agent/v1"headers = {"Authorization": f"Bearer {os.environ['VALJEAN_KEY']}"}
me = requests.get(f"{base}/me", headers=headers).json()fit = requests.post(f"{base}/appetite", headers=headers, json={"lines": ["GL", "LL"], "state": "SC", "description": "seafood restaurant with a full bar"}).json()file = requests.post(f"{base}/submissions", headers=headers, json={ "client_reference": "AMS-10442", "insured": {"name": "Shem Creek Oyster Bar LLC", "state": "SC", "city": "Mount Pleasant"}, "lines": ["GL", "LL"], "effective_date": "2026-12-15", "class_description": "Bar and restaurant", "annual_revenue": 2100000,}).json()print(file["reference"], file["status"], file["needs"])The create response has the file’s id, its reference, a private status_url you can share with the insured’s producer, and needs: what Valjean still needs, each with a key.
Next: the flow, from appetite to bind.

