---
title: "The programs Hedge would try for lines, state and NAICS"
method: POST
path: "/broker/catalog/query"
tags: ["Appetite"]
---

# The programs Hedge would try for lines, state and NAICS

`POST /broker/catalog/query`

## Request

- Base URL: `https://api.hedgespecialty.com/api/v1`
- URL: `https://api.hedgespecialty.com/api/v1/broker/catalog/query`
- 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`

Deterministic, read-only (no submission is created). Returns the
programs Hedge attaches on line of business for the request, after
your brokerage's market, program and line settings and Hedge's state
footprint: connected carrier APIs (`channel: api`) and portals Hedge
drives (`channel: portal`). Email and manual-portal markets are
listed only with `all_channels: true` (`channel: email` and
`channel: portal`), each with an `appetite` status. Programs that
only ever return a non-binding indication are never listed. A
listing is a potential route, not a quote; for API and portal
programs the carrier's own application answers appetite.

Hedge sends ONE program per market, channel and line. Every eligible
sibling is listed; exactly one per market, channel and line is the
default (`default_lines`), and the others name it in
`alternative_of`. Programs that cannot be tried are in `excluded`
with reason codes: your own Markets settings
(`broker_market_excluded`, `broker_program_excluded`,
`broker_program_line_excluded`), the program's lines and states
(`unsupported_requested_line`, `requested_coverage_mismatch`,
`package_companion_not_requested`, `program_state_excluded`,
`market_state_excluded`, `exposure_state_excluded`), Hedge's state footprint
(`brokerage_state_unavailable`), the request's facts
(`program_class_excluded`, `below_program_revenue_floor`,
`above_program_revenue_limit`), or `program_unavailable` when the
program cannot be tried right now.

## Request body

- CatalogQuery
  - `lines` string[], required: Hedge line slugs; `businessowners` expands to general liability plus property. Unknown values return 422 `unknown_line`.
  - `state` string, required: Primary risk state.
  - `exposure_states` string[]: Every location state; each must pass the market and program state checks.
  - `naics` string, nullable
  - `annual_revenue_cents` integer, nullable: Optional. Missing revenue is a warning (`revenue_unknown`)
  - `effective_date` string, date, nullable
  - `all_channels` boolean: `false` (default): connected carrier APIs and the portals Hedge drives, with one default per market, channel and line. `true`: every channel, adding manual-portal (`channel: portal`) and email (`channel: email`) programs, an `appetite` status on each row, and Hedge's pre-checks for the `hedge` group (at most 8 per line).

## Response `200`

Offered and excluded programs

- CatalogResult
  - `catalog_version` string, required
  - `generated_at` string, date-time, required
  - `scope` object, required
    - `lines` string[]
    - `state` string
    - `exposure_states` string[]
    - `naics` string, nullable
    - `brokerage_scoped` boolean
    - `all_channels` boolean
  - `programs` object[], required
    - `program_id` string, uuid
    - `program_name` string
    - `market` object
      - `id` string, uuid
      - `slug` string, nullable
      - `display_name` string
      - `logo_url` string, nullable
    - `issuing_company` object, nullable
      - `legal_name` string, nullable
      - `naic` string, nullable
      - `admitted` boolean, nullable
      - `am_best_rating` string, nullable
    - `channel` 'api' | 'portal' | 'email': `email` only with `all_channels`. `portal` covers the portals Hedge drives and, with `all_channels`, manual portals.
    - `group` 'instant' | 'hedge': `instant` for `api`; `hedge` for `portal` and `email`.
    - `route_label` 'Instant quote' | 'Hedge Binding' | 'Hedge Specialty': Small-print route name for `api`, `portal` and `email` respectively.
    - `appetite` CatalogAppetite
      - `status` 'fit' | 'review' | 'excluded', required: `fit`: Hedge would send it (API and portal programs on line of business; email programs whose published appetite matches the NAICS class). `review`: passes every line, state, class and brokerage check, and Hedge reviews appetite before sending (the usual email case). `excluded`: a check fails (rows in `excluded` only).
      - `reason` string, nullable: Plain-English reason to show when present.
    - `lines` string[]
    - `default_selected` boolean
    - `default_lines` string[]: The lines this program is the default for. Pre-select each default program with exactly these lines (one program per market, channel and line). With `all_channels`, `hedge` rows are pre-selected only when `fit` and among Hedge's top picks for the line (at most 8 per line, ranked by Hedge's market results); `instant` rows keep one default per market and line.
    - `alternative_of` string, uuid, nullable: The sibling Hedge sends instead at the same market, channel and line; null for that primary program, pre-selected or not.
    - `speed` SpeedHint: A channel-level expectation (`basis` is `channel_default`), never a per-program promise.
      - `hint` 'minutes' | 'within_day' | 'underwriter_review', required
      - `label` string, required
      - `basis` 'channel_default', required
    - `fit` 'line_match'
    - `warnings` string[]
    - `bind_path` 'hedge_portal'
  - `excluded` object[], required
    - `program_id` string, uuid
    - `program_name` string
    - `market` object
      - `id` string, uuid
      - `display_name` string
    - `channel` 'api' | 'portal' | 'email'
    - `group` 'instant' | 'hedge'
    - `route_label` 'Instant quote' | 'Hedge Binding' | 'Hedge Specialty'
    - `appetite` CatalogAppetite
      - `status` 'fit' | 'review' | 'excluded', required: `fit`: Hedge would send it (API and portal programs on line of business; email programs whose published appetite matches the NAICS class). `review`: passes every line, state, class and brokerage check, and Hedge reviews appetite before sending (the usual email case). `excluded`: a check fails (rows in `excluded` only).
      - `reason` string, nullable: Plain-English reason to show when present.
    - `lines` string[]
    - `reasons` string[]

## Other responses

- `422`: Invalid body, or `{code: unknown_line, value}` for a line Hedge does not recognize

## Changes

- **2026-09-29** `90c41460541f`: 3 warning, 8 info
  - added the new `email` enum value to the `excluded/items/channel` response property for the response status `200`
  - added the new `email` enum value to the `programs/items/channel` response property for the response status `200`
  - added the new `underwriter_review` enum value to the `programs/items/speed/hint` response property for the response status `200`
  - added the new optional request property `all_channels`
  - …7 more
- **2026-09-28** `3156f892e627`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api/changes/broker/catalog/query/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)
