Valjean Specialty · AsyncAPI Specification

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.

View Spec View on GitHub InsuranceWholesaleBrokerageE&SInsurance TechAsyncAPIEvents

Channels

yourWebhook
The https URL you registered with POST /webhooks.

Messages

✉
submission_received
A submission was created for your agency.
✉
submission_status_changed
A submission moved to a new stage.
✉
needs_requested
Valjean asked you for more information.
✉
markets_updated
A market answered: anonymous counts, never names.
✉
quote_presented
Your broker presented a quote.
✉
bind_status_changed
A bind request moved forward.
✉
policy_bound
A policy was bound.
✉
policy_status_changed
A policy changed status (issued, cancelled, expired, renewed).
✉
document_available
A binder, policy or endorsement is ready to download.
✉
invoice_sent
An invoice was sent to your agency.
✉
invoice_paid
An invoice was marked paid.
✉
invoice_overdue
An invoice is past due.
✉
webhook_ping
Sent by POST /webhooks/{id}/test only.

AsyncAPI Specification

Raw ↑
# 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.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/valjeanspecialty-asyncapi"
All 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.