/v1 base path.
These docs are hosted at
https://api.nektir.com, but that domain does not yet proxy the API runtime. Local development uses http://127.0.0.1:5185/v1; replace it with the published API base URL when the backend is deployed.Search for products
include=facets to a product query when a browse screen needs query-dependent brand, category, status, and price counts. See Search suggestions and facets.
Build brand filters
Use/v1/brands for a paginated directory and brand detail with reviewed aliases. /v1/meta retains the compact represented-brand facet for filter controls. Pass stable IDs with brand_ids; unresolved products return brand, brand_id, and brand_slug as null.
dabs_new_item and dabs_on_spa filters accept only true or false. These are unverified source flags; do not label onSpa as a sale or promotion.
Build product-intelligence filters
Usedata.product_intelligence.filters from /v1/meta for current values and human-readable labels. For example:
Display store details
Store list responses exposeregular_hours_available without repeating a full weekly schedule on every row. Store detail embeds regular_hours when the directory schedule normalized safely, plus neutral tel: and geo: links. Treat the schedule as regular weekly hours: exceptions_known is false, so holidays and temporary closures may differ.
Compare a shopping list
Submit up to 25 exact Utah DABS SKUs once to compare single-store, closest-store, and bounded multi-store plans. Useproduct_ids instead when your application already stores Nektir’s stable identifiers; the two parameters cannot be combined.
Resolve exact products and stores
Browse products observed as new or changed
Read observed changes
Use the same feed for statewide changes or one product’s retained history:Before showing availability
- Read
meta.coverage.statusand the code-onlymeta.warningswhen using inventory scope. - Display each product’s
inventory_retrieved_at. It is the last successful Nektir retrieval in the requested store/radius scope—or across its published store observations for an unscoped search—and isnullwhen unchecked. - Keep
source_updated_atunknown when the source did not provide it. - Treat reported quantity separately from
purchase_eligibility. - Do not interpret an empty result as no stock when coverage is partial or absent.
include=coverage_details only for diagnostic pair-state counts. Read the immutable revision from X-Publication-Revision; cursor expiry appears only while meta.page.next_cursor is non-null.