Skip to main content
GET
List Catalog Products

Citations

Every product carries a citations object, the same shape the commission-term payload carries. It is how a user checks a commission figure against the paper it came from without leaving your product.
The citation is keyed by the payload field it cites, and it appears under every commission field the row actually states a value in. One commission line states its new and its renewal rate in the same printed passage, so the same citation legitimately appears under both keys. Look it up by the field you are rendering. An empty object means the row states no commission, and provenance still names the document.

Read grain before you draw anything

grain is required on every citation and it is the field to branch on: A product citation never reaches page grain, and its quote is always null. Both follow from what a served product row holds: it carries the address of its passage, not the passage itself, so a product that did not locate has no page to name and no text to show. Read the commission term for the same line when you need the words. Treat an unrecognized grain as document. A document-grain citation must not render like a region-grain one. The platform derives geometry from the document’s own bytes rather than asking a model for it, so a rectangle that is present was located in real page geometry and a rectangle that is absent means no match was found. There is no third state in which a box was guessed. The region rectangle is normalized 0-1 with a top-left origin. Multiply it by the rendered page box, never by a point size, so a viewer at any zoom draws the same box over the same words.

Why a product may cite only its document

A market’s products are merged from the lines of several documents, and a citation is only ever served when the platform can name the exact passage inside the exact extraction the value was read from. It declines, and keeps the document-level citation, when the line’s printed anchor is a label rather than a quoted passage, when a human correction moved the served value away from the passage the rectangle was located for, and on the single-document paths that bypass the merge. A degraded citation is deliberate: the platform will show you a document it is sure of before it will draw a box it is not.

Authorizations

Authorization
string
header
required

Send the credential as Authorization: Bearer <key>.

Scoped partner credentials use the exclusive nxsk_v1_... namespace. Each scoped key is bound at issuance to one organization, one canonical named environment, an explicit engine set, and a least-privilege capability set. A malformed, unknown, rotated, or revoked nxsk_ key fails closed and is never retried as a legacy key.

Capabilities used by this API are runs:write, runs:read, engines:read, catalog:read, webhooks:manage, runs:defensibility:read, runs:test, conversations:use, and conversations:export. Operation descriptions name the required capability. Grandfathered nx_live_... and nx_test_... keys retain their existing broad access during the compatibility window.

Query Parameters

connection_id
string<uuid>

Pin the browse to one active data connection. Optional when the org has a single active connection; required when it has more than one (an ambiguous request returns catalog_connection_ambiguous).

line
string

Line-of-business filter matched against the product's line or line_code.

state
string

Two-letter state code. Keeps products eligible in the state (not excluded).

Pattern: ^[A-Za-z]{2}$
naics
string

NAICS code to filter by. prohibited_naics and avoided_naics are product-level columns, so the filter drops individual products that prohibit the code (a multi-line market can survive on its other products) and sets avoided: true on products that list it in avoided_naics. The backing columns are populated by an in-flight extraction-quality effort; until then every product reads as non-prohibited.

Case-insensitive substring matched over the line label or market name.

min_commission_pct
number

Minimum commission in percent space (10 = 10%). Keeps a product whose new or renewal rate clears the floor.

Required range: x >= 0
page
integer
default:1

1-based page number. Defaults to 1.

Required range: x >= 1
page_size
integer
default:25

Rows per page, clamped to 100. Defaults to 25.

Required range: 1 <= x <= 100

Response

One page of flat products with facets and corpus totals.

items
object[]
required
page
integer
required
page_size
integer
required
total_matched
integer
required
total_corpus
integer
required
product_less_markets
integer | null
required

Always null here. The product-less-market disclosure is a markets-grain fact; see CatalogMarketListResponse.

product_filter_active
boolean
required

True when this request carries a filter only a product row can satisfy (line, state, naics, min_commission_pct).

facets
object
required
has_prohibited_class_data
boolean
required

True when at least one current product in the connection carries an extracted prohibited-class list (data presence, not extraction coverage). Consumer rules: an empty per-product prohibited_naics never renders as "no prohibited classes", regardless of this flag (a default-empty row and an extracted-none row are indistinguishable); while the flag is false, additionally disclose that prohibited-class data is not yet extracted for this corpus.