Hedge Webhooks API

The Webhooks API from Hedge — 0 operation(s) for webhooks.

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/hedgespecialty-com:hedgespecialty-com-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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.

OpenAPI Specification

hedgespecialty-com-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hedgespecialty Com Webhooks API
  version: '1.0'
  description: 'Operations tagged Webhooks across 2 of this provider''s published API definitions: hedge-openapi.json, hedgespecialty-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.hedgespecialty.com/api/v1
  description: Production
- url: https://staging-api.hedgespecialty.com/api/v1
  description: Staging sandbox
security:
- brokerOAuth: []
tags:
- name: Webhooks
paths: {}
webhooks:
  submission.events:
    post:
      tags:
      - Webhooks
      operationId: receiveSubmissionEvents
      summary: New submission events, pushed to your registered endpoint
      description: 'Hedge POSTs this message to each webhook endpoint your brokerage

        has registered (broker portal → Settings → Webhooks, admins only)

        whenever a submission gains newly-visible events; the SAME event

        objects, vocabulary and visibility rules as

        `GET /broker/submissions/{submission_id}/events`, delivered

        within about a minute of becoming visible. An endpoint receives

        events from its creation onward; history is not replayed.


        **Verifying.** Every delivery is signed with your endpoint''s

        `whsec_` secret (shown exactly once at creation; rotate by

        revoking and re-creating). Headers are the standard-webhooks /

        svix scheme, verifiable with any svix SDK:


        - `svix-id`; the delivery id, STABLE across every retry and

        manual redelivery: your idempotency key.

        - `svix-timestamp`; unix seconds; reject stale timestamps

        (±5 minutes is the conventional tolerance).

        - `svix-signature`; `v1,` + base64(HMAC-SHA256(secret,

        `{id}.{timestamp}.{body}`)) over the exact bytes received.


        **Delivery semantics.** At-least-once: dedupe on `svix-id`.

        Within one submission, deliveries arrive in order; across

        submissions there is no ordering guarantee. An event''s `(id,

        type)` pair can arrive AGAIN with an upgraded `type`; e.g. a

        `status_changed` later re-delivered as `quote_received` once the

        quote is relayed to you; so treat `(id, type)` as the event

        identity; deduping webhook events by `id` alone will drop quote

        arrivals. (The polling feed has no such re-emission; this is

        push-only behavior, and it is how a relay that happens hours

        after the underlying status row is still pushed to you.)


        **Acknowledging.** Respond 2xx within 10 seconds; the body is

        ignored. Redirects are treated as failures. Anything else is

        retried with backoff for up to 8 attempts over 24 hours; the

        delivery is then parked (re-send it from the portal''s delivery

        log). Repeated exhausted deliveries auto-disable the endpoint;

        a successful test-send from the portal re-enables it and queued

        events resume.


        A `ping` message (`{"type": "ping", ...}`, same signature scheme)

        is sent by the portal''s test button; acknowledge it like any

        other delivery.


        **Filtering.** An endpoint''s optional `event_types` filter names

        the event types it wants (`market_attached`, `quote_received`,

        `status_changed`, `declined`, `withdrawn`, `blocked`, `bound`) and

        may include `message` to also receive `submission.message`

        deliveries (below). No filter = everything.'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - type
              - submission_id
              - events
              properties:
                type:
                  type: string
                  const: submission.events
                submission_id:
                  type: string
                  format: uuid
                events:
                  type: array
                  description: Newly-visible events, oldest first; the exact object shape of the polling feed's `events` array.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      type:
                        type: string
                        enum:
                        - market_attached
                        - quote_received
                        - status_changed
                        - declined
                        - withdrawn
                        - blocked
                        - bound
                      occurred_at:
                        type: string
                        format: date-time
                      market:
                        type: object
                        properties:
                          name:
                            type: string
                          lines:
                            type: array
                            items:
                              type: string
                          lane_id:
                            type: string
                            format: uuid
                            nullable: true
                          category:
                            $ref: '#/components/schemas/ProgramCategory'
                      status:
                        type: string
                      status_label:
                        type: string
                      detail:
                        type: string
                        nullable: true
      responses:
        '200':
          description: Acknowledge with any 2xx within 10 seconds; response body is ignored.
    servers:
    - url: https://api.hedgespecialty.com/api/v1
      description: Production
    - url: https://staging-api.hedgespecialty.com/api/v1
      description: Staging sandbox
  submission.message:
    post:
      tags:
      - Webhooks
      operationId: receiveSubmissionMessage
      summary: A new thread message (Hedge's or yours), pushed to your endpoint
      description: 'Hedge POSTs this message whenever a new message becomes visible

        on a submission''s thread; the SAME object, vocabulary and

        visibility rules as `GET /broker/submissions/{submission_id}/thread`

        (Hedge''s emails to your brokerage, your replies, and assistant

        chat in both directions; never carrier or insured correspondence),

        delivered within about a minute of becoming visible. One message

        per delivery; a burst arrives as consecutive deliveries in order.

        An endpoint receives messages from its creation onward (and, for

        endpoints that predate this message type, from the moment it

        shipped); history is not replayed.


        Signing, `svix-id` dedupe, at-least-once delivery, in-order

        delivery within a submission, acknowledgement and retry rules are

        exactly those of `submission.events`. Messages never re-arrive

        with a changed body; dedupe on `svix-id` (or on `message.id`).

        Delivered to endpoints whose `event_types` filter is empty or

        includes `message`.'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - type
              - submission_id
              - message
              properties:
                type:
                  type: string
                  const: submission.message
                submission_id:
                  type: string
                  format: uuid
                message:
                  $ref: '#/components/schemas/ThreadMessage'
      responses:
        '200':
          description: Acknowledge with any 2xx within 10 seconds; response body is ignored.
    servers:
    - url: https://api.hedgespecialty.com/api/v1
      description: Production
    - url: https://staging-api.hedgespecialty.com/api/v1
      description: Staging sandbox
components:
  schemas:
    ThreadMessage:
      type: object
      description: 'One broker-facing message on a submission, normalized across

        channels. `direction` is relative to Hedge: `inbound` = your

        brokerage wrote it (an email reply, or a message sent through

        `POST .../thread` or the portal assistant), `outbound` = Hedge

        wrote it. `channel` is `email` for emails Hedge exchanged with

        your brokerage and `chat` for assistant-chat rows; `from`/`to`

        are email addresses and are null/empty on chat rows.

        '
      required:
      - id
      - channel
      - direction
      - kind
      - occurred_at
      - body_text
      properties:
        id:
          type: string
          format: uuid
        channel:
          type: string
          enum:
          - email
          - chat
        direction:
          type: string
          enum:
          - inbound
          - outbound
        kind:
          type: string
          description: The email's type (e.g. initial_clearance, market_plan_update, quote_delivery, broker_reply) or `chat`.
        occurred_at:
          type: string
          format: date-time
        subject:
          type: string
          nullable: true
        body_text:
          type: string
          description: Plain text. HTML-only emails are converted server-side.
        from:
          type: string
          nullable: true
        to:
          type: array
          items:
            type: string
        attachments:
          type: array
          items:
            type: object
            required:
            - name
            properties:
              name:
                type: string
              download_path:
                type: string
                nullable: true
                description: Present when the file is a finalized document you can fetch via `GET /broker/finalized-documents/{document_id}/pdf` (relative to the base URL).
        in_reply_to:
          type: string
          nullable: true
          description: RFC 5322 Message-ID this email replied to, when known.
        delivered_via:
          type: string
          enum:
          - email
          - partner
          nullable: true
          description: How a Hedge-written message reached you. `partner` means it was delivered to a partner app's thread (for example Hedge Connector) instead of being emailed. Null for your own messages and chat rows.
    ProgramCategory:
      type: string
      enum:
      - instant_quote
      - binding
      - specialty
      description: 'The Hedge category of a market program, derived from how Hedge

        submits to it. `instant_quote` ("Hedge Instant Quote"): carrier API,

        Hedge fills gaps with favorable assumptions and quotes in minutes;

        every assumption is listed for the retail agent to confirm before

        bind. `binding` ("Hedge Binding"): carrier portal, Hedge quotes on

        your behalf. `specialty` ("Hedge Specialty"): email to an

        underwriter; completed ACORDs, program supplements and loss runs

        are needed and a human reads them, so Hedge does not assume.

        '
  securitySchemes:
    brokerOAuth:
      type: oauth2
      description: 'Broker access token. Scopes: `broker_mcp` (read), `broker_submit`

        (write). Per-user tokens come from the OAuth authorization-code +

        PKCE flow (`/oauth/authorize` → `/oauth/token`); machine tokens

        from `client_credentials`, using an API key created self-serve in

        the broker portal (Settings → API keys) or issued by Hedge ops.

        Access tokens live 60 minutes.

        '
      flows:
        authorizationCode:
          authorizationUrl: https://api.hedgespecialty.com/api/v1/oauth/authorize
          tokenUrl: https://api.hedgespecialty.com/api/v1/oauth/token
          scopes:
            broker_mcp: Read brokerage-scoped submissions, policies, payments, appetite, and requirements.
            broker_submit: Create submissions, answer Hedge's asks, and act on quotes for your brokerage.
        clientCredentials:
          tokenUrl: https://api.hedgespecialty.com/api/v1/oauth/token
          scopes:
            broker_mcp: Read brokerage-scoped submissions, policies, payments, appetite, and requirements.
            broker_submit: Create submissions, answer Hedge's asks, and act on quotes for your brokerage.
externalDocs:
  description: Hedge developer documentation
  url: https://docs.hedgespecialty.com
x-refined-from:
- hedge-openapi.json
- hedgespecialty-com-openapi.yml