Valjean Specialty webhooks
Version 1.0.0
Events about your agency's files, POSTed to each webhook you register (POST /webhooks in the agent API). Reply 2xx within 8 seconds. Failures retry after 1, 5, 30, 120, 360, 720 and 1440 minutes; a webhook is turned off after 50 failures in a row. Verify Valjean-Signature, and de-duplicate by event id. The same events are available by polling GET /events.
Channels
Messages
AsyncAPI Specification
# Generated by openapi/build.ts (npm run spec:build). Do not edit by hand.
asyncapi: 3.0.0
info:
title: Valjean Specialty webhooks
version: 1.0.0
description: Events about your agency's files, POSTed to each webhook you register (POST /webhooks in the agent API). Reply 2xx within 8 seconds. Failures retry after 1, 5, 30, 120, 360, 720 and 1440 minutes; a webhook is turned off after 50 failures in a row. Verify Valjean-Signature, and de-duplicate by event id. The same events are available by polling GET /events.
contact:
name: Valjean Specialty
email: submissions@valjeanspecialty.com
url: https://valjeanspecialty.com
externalDocs:
url: https://docs.valjeanspecialty.com/guides/webhooks/
defaultContentType: application/json
channels:
yourWebhook:
address: "{webhookUrl}"
title: Your webhook URL
description: The https URL you registered with POST /webhooks.
parameters:
webhookUrl:
description: Your webhook's URL.
messages:
submission_received:
$ref: "#/components/messages/submission_received"
submission_status_changed:
$ref: "#/components/messages/submission_status_changed"
needs_requested:
$ref: "#/components/messages/needs_requested"
markets_updated:
$ref: "#/components/messages/markets_updated"
quote_presented:
$ref: "#/components/messages/quote_presented"
bind_status_changed:
$ref: "#/components/messages/bind_status_changed"
policy_bound:
$ref: "#/components/messages/policy_bound"
policy_status_changed:
$ref: "#/components/messages/policy_status_changed"
document_available:
$ref: "#/components/messages/document_available"
invoice_sent:
$ref: "#/components/messages/invoice_sent"
invoice_paid:
$ref: "#/components/messages/invoice_paid"
invoice_overdue:
$ref: "#/components/messages/invoice_overdue"
webhook_ping:
$ref: "#/components/messages/webhook_ping"
operations:
receiveEvents:
action: receive
title: Receive an event
channel:
$ref: "#/channels/yourWebhook"
messages:
- $ref: "#/channels/yourWebhook/messages/submission_received"
- $ref: "#/channels/yourWebhook/messages/submission_status_changed"
- $ref: "#/channels/yourWebhook/messages/needs_requested"
- $ref: "#/channels/yourWebhook/messages/markets_updated"
- $ref: "#/channels/yourWebhook/messages/quote_presented"
- $ref: "#/channels/yourWebhook/messages/bind_status_changed"
- $ref: "#/channels/yourWebhook/messages/policy_bound"
- $ref: "#/channels/yourWebhook/messages/policy_status_changed"
- $ref: "#/channels/yourWebhook/messages/document_available"
- $ref: "#/channels/yourWebhook/messages/invoice_sent"
- $ref: "#/channels/yourWebhook/messages/invoice_paid"
- $ref: "#/channels/yourWebhook/messages/invoice_overdue"
- $ref: "#/channels/yourWebhook/messages/webhook_ping"
components:
messages:
submission_received:
name: submission.received
title: A submission was created for your agency.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: submission.received
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: submission.received
data:
type: object
properties:
status:
type: string
status_text:
type: string
required:
- status
- status_text
examples:
- payload:
id: 41
type: submission.received
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
status: new
status_text: "Received: we're reviewing it"
submission_status_changed:
name: submission.status_changed
title: A submission moved to a new stage.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: submission.status_changed
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: submission.status_changed
data:
type: object
properties:
status:
type: string
previous:
type: string
status_text:
type: string
description: The new status in plain words.
required:
- status
- previous
- status_text
examples:
- payload:
id: 41
type: submission.status_changed
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
status: marketing
previous: needs_info
status_text: With insurance markets for review
needs_requested:
name: needs.requested
title: Valjean asked you for more information.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: needs.requested
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: needs.requested
data:
type: object
properties:
info_request_id:
type: string
format: uuid
due_on:
type:
- string
- "null"
format: date
required:
- info_request_id
- due_on
examples:
- payload:
id: 41
type: needs.requested
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
info_request_id: 0b9a6c1e-3f42-4f0e-9d51-2a7f5c8e1d34
due_on: 2026-11-09
markets_updated:
name: markets.updated
title: "A market answered: anonymous counts, never names."
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: markets.updated
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: markets.updated
data:
type: object
properties:
reviewing:
type: integer
declined:
type: integer
quoted:
type: integer
no_response:
type: integer
total:
type: integer
required:
- reviewing
- declined
- quoted
- no_response
- total
examples:
- payload:
id: 41
type: markets.updated
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
reviewing: 1
declined: 1
quoted: 1
no_response: 0
total: 3
quote_presented:
name: quote.presented
title: Your broker presented a quote.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: quote.presented
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: quote.presented
data:
type: object
properties:
quote_id:
type: string
format: uuid
carrier:
type: string
lines:
type: array
items:
type: string
premium:
type: number
expires_on:
type:
- string
- "null"
format: date
required:
- quote_id
- carrier
- lines
- premium
- expires_on
examples:
- payload:
id: 41
type: quote.presented
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
quote_id: 6f1d2c3b-8a9e-4b7c-9d10-1e2f3a4b5c6d
carrier: Magnolia Underwriting Managers
lines:
- GL
- LL
premium: 17075
expires_on: 2026-12-02
bind_status_changed:
name: bind.status_changed
title: A bind request moved forward.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: bind.status_changed
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: bind.status_changed
data:
type: object
properties:
bind_request_id:
type: string
format: uuid
quote_id:
type: string
format: uuid
status:
type: string
enum:
- preparing
- requested
- binder_received
- bound
- cancelled
status_text:
type: string
required:
- bind_request_id
- quote_id
- status
- status_text
examples:
- payload:
id: 41
type: bind.status_changed
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
bind_request_id: 9c8b7a6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
quote_id: 6f1d2c3b-8a9e-4b7c-9d10-1e2f3a4b5c6d
status: preparing
status_text: "Received: your broker is preparing it"
policy_bound:
name: policy.bound
title: A policy was bound.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: policy.bound
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: policy.bound
data:
type: object
properties:
policy_id:
type: string
format: uuid
policy_number:
type:
- string
- "null"
carrier:
type: string
effective_date:
type: string
format: date
required:
- policy_id
- policy_number
- carrier
- effective_date
examples:
- payload:
id: 41
type: policy.bound
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
policy_id: 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
policy_number: MUM-GL-2026-0412
carrier: Magnolia Underwriting Managers
effective_date: 2026-12-15
policy_status_changed:
name: policy.status_changed
title: A policy changed status (issued, cancelled, expired, renewed).
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: policy.status_changed
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: policy.status_changed
data:
type: object
properties:
policy_id:
type: string
format: uuid
status:
type: string
required:
- policy_id
- status
examples:
- payload:
id: 41
type: policy.status_changed
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
policy_id: 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
status: issued
document_available:
name: document.available
title: A binder, policy or endorsement is ready to download.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: document.available
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: document.available
data:
type: object
properties:
document_id:
type: string
format: uuid
kind:
type: string
enum:
- binder
- policy
- endorsement
file_name:
type: string
required:
- document_id
- kind
- file_name
examples:
- payload:
id: 41
type: document.available
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
document_id: 2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e
kind: binder
file_name: Binder MUM-GL-2026-0412.pdf
invoice_sent:
name: invoice.sent
title: An invoice was sent to your agency.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: invoice.sent
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: invoice.sent
data:
type: object
properties:
invoice_id:
type: string
format: uuid
invoice_number:
type: integer
amount_due:
type: number
due_on:
type:
- string
- "null"
format: date
required:
- invoice_id
- invoice_number
- amount_due
- due_on
examples:
- payload:
id: 41
type: invoice.sent
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
invoice_id: 3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f
invoice_number: 1042
amount_due: 19212.5
due_on: 2027-01-14
invoice_paid:
name: invoice.paid
title: An invoice was marked paid.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: invoice.paid
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: invoice.paid
data:
type: object
properties:
invoice_id:
type: string
format: uuid
invoice_number:
type: integer
amount_due:
type: number
due_on:
type:
- string
- "null"
format: date
required:
- invoice_id
- invoice_number
- amount_due
- due_on
examples:
- payload:
id: 41
type: invoice.paid
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
invoice_id: 3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f
invoice_number: 1042
amount_due: 19212.5
due_on: 2027-01-14
invoice_overdue:
name: invoice.overdue
title: An invoice is past due.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: invoice.overdue
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: invoice.overdue
data:
type: object
properties:
invoice_id:
type: string
format: uuid
invoice_number:
type: integer
amount_due:
type: number
due_on:
type:
- string
- "null"
format: date
required:
- invoice_id
- invoice_number
- amount_due
- due_on
examples:
- payload:
id: 41
type: invoice.overdue
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
invoice_id: 3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f
invoice_number: 1042
amount_due: 19212.5
due_on: 2027-01-14
webhook_ping:
name: webhook.ping
title: Sent by POST /webhooks/{id}/test only.
contentType: application/json
headers:
type: object
required:
- Valjean-Signature
- Valjean-Event-Id
- Valjean-Event-Type
properties:
Valjean-Signature:
type: string
description: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook's signing secret>.
Valjean-Event-Id:
type: string
Valjean-Event-Type:
type: string
const: webhook.ping
payload:
allOf:
- $ref: "#/components/schemas/WebhookEnvelope"
- type: object
required:
- type
- data
properties:
type:
const: webhook.ping
data:
type: object
properties:
message:
type: string
required:
- message
examples:
- payload:
id: 41
type: webhook.ping
created_at: 2026-11-02T14:20:00Z
agency: Palmetto Coast Insurance Group
submission_id: 6f2a1c9e-4b3d-4e8a-9c21-7d4e5f6a8b90
data:
message: Test from Valjean Specialty
schemas:
WebhookEnvelope:
type: object
properties:
id:
type: integer
description: Event id (the same cursor as GET /events).
type:
type: string
created_at:
type: string
format: date-time
agency:
type: string
submission_id:
type:
- string
- "null"
format: uuid
data:
type: object
required:
- id
- type
- created_at
- agency
- submission_id
- data
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/asyncapis/valjeanspecialty-asyncapi"
curl "https://apis.io/api/v1/asyncapis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.