---
title: "Request to bind a released quote"
method: POST
path: "/broker/submissions/{submission_id}/bind-requests"
tags: ["Binding"]
---

# Request to bind a released quote

`POST /broker/submissions/{submission_id}/bind-requests`

## Request

- Base URL: `https://api.hedgespecialty.com/api/v1`
- URL: `https://api.hedgespecialty.com/api/v1/broker/submissions/{submission_id}/bind-requests`
- Auth: OAuth 2
  - Authorization code: `https://api.hedgespecialty.com/api/v1/oauth/authorize`
  - Client credentials
  - Token URL: `https://api.hedgespecialty.com/api/v1/oauth/token`

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`.

## Path parameters

- `submission_id` string, uuid, required

## Request body

- BindRequestCreate
  - `quote_id` string, uuid, required: 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` 'in_full' | 'monthly': The payment plan requested on the bind order.
  - `attest_assumptions` union: `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.
    - boolean
    - string[]
  - `producer_email` string: REQUIRED with a machine credential; the active portal user this bind is attributed to (`requested_by`). Ignored for per-user tokens.

## Response `201`

The bind request draft (or the existing draft for this quote)

- BindRequestRead
  - `bind_request_id` string, uuid, required
  - `submission_id` string, uuid, required
  - `status` 'drafted' | 'submitted' | 'sent' | 'binder_received' | 'bound' | 'bind_failed' | 'cancelled' | 'declined' | 'expired', required: `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` string, required
  - `quote_id` string, uuid, nullable
  - `payment_option` string, nullable
  - `requested_at` string, date-time, required
  - `requested_by` string, nullable: The producing broker the request is attributed to.
  - `effective_date` string, date, nullable
  - `policy_id` string, uuid, nullable
  - `unconfirmed_assumptions` BindAssumption[], required: Standing assumptions the retail agent still has to confirm. Non-empty means create/submit will answer 409 `assumptions_unconfirmed` until attested.
    - `key` string, required
    - `label` string, required
    - `value` unknown
  - `contingencies` BindContingency[], required
    - `id` string, uuid, required
    - `kind` 'question' | 'signed_form' | 'loss_runs' | 'file_upload', required
    - `label` string, required: The carrier's wording of the item.
    - `status` 'pending' | 'satisfied' | 'waived', required
    - `required` boolean, required
    - `upload_path` string, nullable: While the request is `drafted`, the path to POST a PDF for this item (multipart `file`); null afterwards.
    - `esign_status` string, nullable: 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.
  - `next_steps` string[], required: Plain-language actions for the current state, in order.

## Other responses

- `403`: broker_submit scope required
- `404`: Submission or quote not found (or not your brokerage's)
- `409`: Standing assumptions are not yet confirmed; the draft exists
- `422`: Not bindable (an indication, a superseded quote, a lane already binding), or producer_email missing/unknown for a machine credential

## Changes

- **2026-09-20** `7928528d98b2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api/changes/broker/submissions/:submission_id/bind-requests/post.md)

---

[API](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api.md) - [All operations](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api/revisions/beefa9cdc11c?raw)
