Hedge Binding API

The Binding API from Hedge — 5 operation(s) for binding.

Operations 6

POST /broker/submissions/{submission_id}/bind-requests Request to bind a released quote #
GET /broker/submissions/{submission_id}/bind-requests List this submission's bind requests #
GET /broker/submissions/{submission_id}/bind-requests/{bind_request_id} Get one bind request #
POST /broker/submissions/{submission_id}/bind-requests/{bind_request_id}/contingencies/{contingency_id}/document Attach a document to a pre-bind contingency #
POST /broker/submissions/{submission_id}/bind-requests/{bind_request_id}/submit Submit the bind request to Hedge for placement #

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-binding-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-binding-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hedgespecialty Com Binding API
  version: '1.0'
  description: 'Operations tagged Binding 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: Binding
paths:
  /broker/submissions/{submission_id}/partner-bind-links:
    post:
      tags:
      - Binding
      operationId: createPartnerBindLink
      summary: Mint a one-time bind link (partner integrations only)
      description: 'For an API partner acting for your brokerage (a token carrying the

        partner claim, with `broker_submit`) on a submission that partner

        created. Returns a one-time Hedge portal sign-in URL for

        `producer_email` that opens this quote: `landing` is `bind` (the bind

        checklist), `quote` (terms still incomplete, or the quote binds on

        the carrier''s own portal) or `status` (the lane is binding or bound).

        The URL expires after about 120 seconds and works once. It is a

        credential: redirect the signed-in user to it immediately and never

        store, email or log it. The first redemption makes the partner''s

        file a normal Hedge file.


        `producer_email` must be an active portal user of your brokerage, or

        a producer on file with your brokerage (Hedge then creates their

        portal account; no email is sent). `return_url` must be https on an

        origin Hedge approved for the partner; the portal offers it as the

        way back. Any other caller, or a submission the partner did not

        create, gets 404.'
      parameters:
      - in: path
        name: submission_id
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - quote_id
              - producer_email
              - return_url
              - consent
              additionalProperties: false
              properties:
                quote_id:
                  type: string
                  format: uuid
                  description: A quote from GET .../quotes.
                producer_email:
                  type: string
                  maxLength: 255
                return_url:
                  type: string
                  maxLength: 2048
                consent:
                  type: object
                  required:
                  - statement_version
                  - accepted_at
                  additionalProperties: false
                  properties:
                    statement_version:
                      type: string
                      maxLength: 128
                    accepted_at:
                      type: string
                      format: date-time
                      description: Must carry a UTC offset.
      responses:
        '201':
          description: 'The link (the response carries `Cache-Control: no-store`)'
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                  expires_at:
                    type: string
                    format: date-time
                  landing:
                    type: string
                    enum:
                    - bind
                    - quote
                    - status
        '403':
          description: Missing broker_submit scope
          or a staff impersonation session: null
        '404':
          description: Not a partner token
          not the partner's submission: null
          or not your brokerage's: null
        '409':
          description: '`quote_not_available`, `quote_expired`, `quote_not_bindable` (with `reason`), `brokerage_portal_disabled` or `producer_email_conflict`'
        '422':
          description: '`return_url_not_allowed`, `producer_not_provisioned`, or a body validation error'
        '429':
          description: Rate limited (60 links a minute per partner
          10 an hour per quote): null
        '503':
          description: '`proposal_unavailable`: try again shortly'
    servers:
    - url: https://api.hedgespecialty.com/api/v1
      description: Production
    - url: https://staging-api.hedgespecialty.com/api/v1
      description: Staging sandbox
  /broker/submissions/{submission_id}/bind-requests:
    post:
      tags:
      - Binding
      operationId: createBindRequest
      summary: Request to bind a released quote
      description: 'The broker''s bind authority over the API. Drafts a bind request for

        the chosen quote — the same request the Hedge portal''s bind wizard

        creates — allocating one response slot per pre-bind contingency the

        carrier listed. Idempotent per carrier lane: re-posting for the same

        quote returns the existing draft (and records any new

        `attest_assumptions`).


        **Assumptions.** Instant quotes are obtained on recorded assumptions

        (values Hedge defaulted on the carrier application because the file

        did not state them). They print on the signable application, so the

        retail agent must confirm them before the order reaches the carrier.

        This is the only bind check, and it is surfaced here rather than

        holding a submitted request silently: while any remain unconfirmed

        the response is **409 `assumptions_unconfirmed`** listing them; the

        draft is kept. Re-POST with `attest_assumptions: true` (or the keys

        the agent confirmed) to record the confirmation and receive the

        draft. Nothing is sent to a carrier by this call.


        **Money.** Lanes whose bind collects card payment in the portal

        (direct-bill carriers) cannot be submitted over the API; `submit`

        answers 422 with the reason. Requires the `broker_submit` scope;

        machine credentials must name `producer_email`.'
      parameters:
      - in: path
        name: submission_id
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BindRequestCreate'
      responses:
        '201':
          description: The bind request draft (or the existing draft for this quote)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BindRequestRead'
        '403':
          description: broker_submit scope required
        '404':
          description: Submission or quote not found (or not your brokerage's)
        '409':
          description: Standing assumptions are not yet confirmed; the draft exists
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    $ref: '#/components/schemas/BindAssumptionsUnconfirmed'
        '422':
          description: Not bindable (an indication, a superseded quote, a lane already binding), or producer_email missing/unknown for a machine credential
    get:
      tags:
      - Binding
      operationId: listBindRequests
      summary: List this submission's bind requests
      description: Newest first, every status. Each row carries the same shape as the detail read.
      parameters:
      - in: path
        name: submission_id
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Bind requests
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BindRequestRead'
        '404':
          description: Submission not found (or not your brokerage's)
    servers:
    - url: https://api.hedgespecialty.com/api/v1
      description: Production
    - url: https://staging-api.hedgespecialty.com/api/v1
      description: Staging sandbox
  /broker/submissions/{submission_id}/bind-requests/{bind_request_id}:
    get:
      tags:
      - Binding
      operationId: getBindRequest
      summary: Get one bind request
      description: 'Current status, the assumptions still unconfirmed, each pre-bind

        contingency with your response state and (while drafted) its upload

        path, and plain `next_steps`. Poll this, or the submission events

        feed / webhooks for `bound`.'
      parameters:
      - in: path
        name: submission_id
        required: true
        schema:
          type: string
          format: uuid
      - in: path
        name: bind_request_id
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Bind request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BindRequestRead'
        '404':
          description: Not found (or not your brokerage's)
    servers:
    - url: https://api.hedgespecialty.com/api/v1
      description: Production
    - url: https://staging-api.hedgespecialty.com/api/v1
      description: Staging sandbox
  /broker/submissions/{submission_id}/bind-requests/{bind_request_id}/contingencies/{contingency_id}/document:
    post:
      tags:
      - Binding
      operationId: uploadBindContingencyDocument
      summary: Attach a document to a pre-bind contingency
      description: 'Multipart upload (`file`, a PDF up to 15 MB; optional `notes`, max

        2000 characters; `producer_email` for machine credentials). Each

        call appends a file to that item — the same upload the portal

        wizard performs — and marks the response satisfied. Accepted only

        while the request is `drafted` (409 otherwise) and only for a

        contingency on the request''s selected quote (404 otherwise). PDF is

        the only accepted type (415 for anything else); uploads count toward

        your brokerage''s daily document-upload limit (429 when reached).

        Signature-collected items (`signed_form` with e-sign) can also be

        satisfied by uploading the signed PDF here.'
      parameters:
      - in: path
        name: submission_id
        required: true
        schema:
          type: string
          format: uuid
      - in: path
        name: bind_request_id
        required: true
        schema:
          type: string
          format: uuid
      - in: path
        name: contingency_id
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - file
              properties:
                file:
                  type: string
                  format: binary
                  description: A PDF
                  at most 15 MB: null
                notes:
                  type: string
                  maxLength: 2000
                producer_email:
                  type: string
      responses:
        '200':
          description: The refreshed bind request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BindRequestRead'
        '400':
          description: Empty file
        '403':
          description: broker_submit scope required
        '404':
          description: Submission
          bind request: null
          or contingency not found (a contingency not on the request's selected quote is not found): null
        '409':
          description: The bind request is no longer drafted
        '413':
          description: File exceeds the 15 MB limit
        '415':
          description: Not a PDF
        '422':
          description: Wrong document for a carrier-signed application
          or producer_email missing/unknown for a machine credential: null
        '429':
          description: Daily document-upload limit reached
    servers:
    - url: https://api.hedgespecialty.com/api/v1
      description: Production
    - url: https://staging-api.hedgespecialty.com/api/v1
      description: Staging sandbox
  /broker/submissions/{submission_id}/bind-requests/{bind_request_id}/submit:
    post:
      tags:
      - Binding
      operationId: submitBindRequest
      summary: Submit the bind request to Hedge for placement
      description: 'The wizard''s own submit, same validation: the request moves from

        `drafted` to `submitted` and Hedge places the bind with the carrier

        (your brokerage''s approval settings decide whether a Hedge reviewer

        looks first). While assumptions remain unconfirmed this answers 409

        `assumptions_unconfirmed` — pass `attest_assumptions` in the body to

        confirm and submit in one call. Surplus-lines placements need a

        diligent search on file (422 says so); direct-bill card-payment lanes

        are portal-only (422). A `bound` event follows on the events feed

        and webhooks once the carrier binds.'
      parameters:
      - in: path
        name: submission_id
        required: true
        schema:
          type: string
          format: uuid
      - in: path
        name: bind_request_id
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BindRequestSubmit'
      responses:
        '200':
          description: The submitted bind request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BindRequestRead'
        '403':
          description: broker_submit scope required
        '404':
          description: Submission or bind request not found
        '409':
          description: Assumptions unconfirmed, already submitted, or the selected quote changed
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    oneOf:
                    - $ref: '#/components/schemas/BindAssumptionsUnconfirmed'
                    - type: string
        '422':
          description: Not yet submittable (effective date out of range
          diligent search owed: null
          required declaration or card payment missing: null
          producer_email missing): null
    servers:
    - url: https://api.hedgespecialty.com/api/v1
      description: Production
    - url: https://staging-api.hedgespecialty.com/api/v1
      description: Staging sandbox
components:
  schemas:
    BindRequestRead:
      type: object
      required:
      - bind_request_id
      - submission_id
      - status
      - status_label
      - requested_at
      - unconfirmed_assumptions
      - contingencies
      - next_steps
      properties:
        bind_request_id:
          type: string
          format: uuid
        submission_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
          - drafted
          - submitted
          - sent
          - binder_received
          - bound
          - bind_failed
          - cancelled
          - declined
          - expired
          description: '`drafted`: checklist open (upload documents, confirm assumptions,

            then submit). `submitted`/`sent`: Hedge is placing the bind with

            the carrier. `binder_received`: the carrier confirmed the bind;

            coverage is bound and its policy documents are pending.

            `bound`: the policy is issued (it appears under GET

            /broker/policies and a `bound` event is emitted). `bind_failed`:

            Hedge is reviewing.

            '
        status_label:
          type: string
        quote_id:
          type: string
          format: uuid
          nullable: true
        payment_option:
          type: string
          nullable: true
        requested_at:
          type: string
          format: date-time
        requested_by:
          type: string
          nullable: true
          description: The producing broker the request is attributed to.
        effective_date:
          type: string
          format: date
          nullable: true
        policy_id:
          type: string
          format: uuid
          nullable: true
        unconfirmed_assumptions:
          type: array
          items:
            $ref: '#/components/schemas/BindAssumption'
          description: Standing assumptions the retail agent still has to confirm. Non-empty means create/submit will answer 409 `assumptions_unconfirmed` until attested.
        contingencies:
          type: array
          items:
            $ref: '#/components/schemas/BindContingency'
        next_steps:
          type: array
          items:
            type: string
          description: Plain-language actions for the current state, in order.
    BindRequestCreate:
      type: object
      required:
      - quote_id
      properties:
        quote_id:
          type: string
          format: uuid
          description: 'The released firm quote to bind: the `quote_id` shown on this

            submission''s rail lanes / markets rows. Indications cannot be

            bound (422).

            '
        payment_option:
          type: string
          enum:
          - in_full
          - monthly
          default: in_full
          description: The payment plan requested on the bind order.
        attest_assumptions:
          description: '`false` (default) confirms nothing. `true` confirms EVERY

            standing assumption on the quote''s carrier application (the set

            `unconfirmed_assumptions` lists). A list of keys confirms only

            those keys; keys matching no standing assumption are ignored,

            never invented. Send `true`/keys only after the retail agent has

            reviewed each statement: the confirmation is recorded on the bind

            request''s timeline under the producing broker (the same record

            the QB writes for a broker''s written confirmation). It is a

            recorded consent, not a hold, and it is the ONLY bind check.

            '
          oneOf:
          - type: boolean
          - type: array
            items:
              type: string
          default: false
        producer_email:
          type: string
          description: REQUIRED with a machine credential; the active portal user this bind is attributed to (`requested_by`). Ignored for per-user tokens.
    BindAssumptionsUnconfirmed:
      type: object
      description: '409 body from create/submit. The bind request exists as a draft

        (`bind_request_id`); re-POST the create (idempotent for the same

        quote) or POST submit with `attest_assumptions` to confirm.

        '
      required:
      - code
      - message
      - bind_request_id
      - assumptions
      properties:
        code:
          type: string
          const: assumptions_unconfirmed
        message:
          type: string
        bind_request_id:
          type: string
          format: uuid
        assumptions:
          type: array
          items:
            $ref: '#/components/schemas/BindAssumption'
    BindRequestSubmit:
      type: object
      properties:
        attest_assumptions:
          description: Same semantics as on create; lets the caller confirm at submit time.
          oneOf:
          - type: boolean
          - type: array
            items:
              type: string
          default: false
        producer_email:
          type: string
          description: REQUIRED with a machine credential.
    BindContingency:
      type: object
      description: One pre-bind item the carrier needs, with your response state.
      required:
      - id
      - kind
      - label
      - status
      - required
      properties:
        id:
          type: string
          format: uuid
        kind:
          type: string
          enum:
          - question
          - signed_form
          - loss_runs
          - file_upload
        label:
          type: string
          description: The carrier's wording of the item.
        status:
          type: string
          enum:
          - pending
          - satisfied
          - waived
        required:
          type: boolean
        upload_path:
          type: string
          nullable: true
          description: While the request is `drafted`, the path to POST a PDF for this item (multipart `file`); null afterwards.
        esign_status:
          type: string
          nullable: true
          description: Envelope state of a signature request started for this item through the Hedge portal wizard (e.g. sent, completed, queued_for_review); null when none.
    BindAssumption:
      type: object
      description: 'One assumption Hedge made to obtain the quote (a value it defaulted

        on the carrier application because the file did not state it) that

        the retail agent has not yet confirmed. `key` is what

        `attest_assumptions` lists; `label` is the plain-language statement;

        `value` is the exact value asserted to the carrier (absent when the

        entry records none).

        '
      required:
      - key
      - label
      properties:
        key:
          type: string
        label:
          type: string
        value:
          description: The asserted value
          any JSON type; may be absent.: null
  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