Skip to content

Public appetite check (no key)

POST
/api/appetite
curl -X POST "https://api.valjeanspecialty.com/api/appetite" \
-H "Content-Type: application/json" \
-d '{"lines":["General Liability"],"state":"South Carolina","description":"restaurant with a bar"}'

The same appetite answer without a key, for websites. Rate-limited to 30 requests a minute per IP; answers cache at the edge for 5 minutes. GET with the same fields as query parameters (lines comma-separated) also works.

No key needed.

Media typeapplication/json
object
lines
required
Array<string>
>= 1 items <= 6 items
state
required
string
>= 2 characters <= 40 characters
naics
string
/^[0-9]{2,6}$/
description
string
<= 300 characters
target_premium
number
<= 1000000000
tiv
number
<= 100000000000

Example

{
"lines": [
"General Liability"
],
"state": "South Carolina",
"description": "restaurant with a bar"
}

OK

Media typeapplication/json
object
fit
required

“unknown” means no appetite is on file for these lines yet: fall back to your own guidance.

string
Allowed values: good possible unlikely unknown
appetite_on_file
required
boolean
headline
required

One sentence you can show as is.

string
market_count
required

Markets on file that could write it, capped at 5. Market names are never returned.

integer
market_count_label
required

E.g. “2 markets”, “5+ markets”, “Not on file yet”.

string
lines
required
Array<object>
object
line
required

Line code.

string
fit
required
string
Allowed values: good possible unlikely
notes
required
Array<string>
needs
required

What Valjean will need for this risk, in plain words.

Array<string>
class_matched
required

The class Valjean matched the risk to, if any.

string | null
state
required

Two-letter state code.

string
unknown_lines

Lines in the request Valjean didn’t recognise.

Array<string>
how_to_send

Present whenever the fit isn’t “good”: a broker reviews every submission, including ones outside the appetite on file.

object
email
required

Where to email the risk instead.

string format: email
include
required

What to include in that email.

Array<string>
note
required
string
disclaimer
required
string

Example

{
"fit": "good",
"lines": [
{
"fit": "good"
}
]
}

Fix the request and send it again (invalid_request, invalid_json).

Media typeapplication/json
object
error
required
object
code
required

Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.

string
message
required

Plain-English explanation you can show a person.

string
issues

Validation problems, as “field: problem” (400 invalid_request only).

Array<string>

Example

{
"error": {
"code": "invalid_request",
"message": "Check the request.",
"issues": [
"insured.state: Too small: expected string to have >=2 characters"
]
}
}

Body or file too large (too_large): JSON bodies up to 64 KB, direct uploads 4 MB, upload links 25 MB.

Media typeapplication/json
object
error
required
object
code
required

Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.

string
message
required

Plain-English explanation you can show a person.

string
issues

Validation problems, as “field: problem” (400 invalid_request only).

Array<string>

Example

{
"error": {
"code": "too_large",
"message": "Files over 4 MB need an upload link."
}
}

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.

Media typeapplication/json
object
error
required
object
code
required

Machine-readable code, e.g. invalid_request, read_only, not_found, closed, rate_limited.

string
message
required

Plain-English explanation you can show a person.

string
issues

Validation problems, as “field: problem” (400 invalid_request only).

Array<string>

Example

{
"error": {
"code": "rate_limited",
"message": "Too many requests. Try again in a minute."
}
}
Retry-After
integer
Example
60

Seconds to wait.