curl --request GET \
--url http://127.0.0.1:5185/v1/productsconst options = {method: 'GET'};
fetch('http://127.0.0.1:5185/v1/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "http://127.0.0.1:5185/v1/products"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_ids": {
"utah_dabs_sku": "347210"
},
"name": "<string>",
"brand": "<string>",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_slug": "<string>",
"product_family": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>",
"relationship_type": "expression"
},
"package_size": {
"milliliters": 2,
"container_count": 2,
"unit_milliliters": 2,
"total_milliliters": 2,
"display": "8 × 355 mL",
"interpretation": "single_container",
"basis": "normalized_source_size",
"normalization_state": "normalized"
},
"price": {
"amount_minor": 1,
"currency": "USD",
"display": "$19.99",
"source": "utah_dabs_workbook",
"times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
}
},
"status": {
"code": "1",
"label": "General distribution",
"lifecycle": "active",
"source_raw": "<string>"
},
"categories": [
{
"id": "<string>",
"name": "<string>"
}
],
"catalog_times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
},
"catalog_presence": {
"state": "present",
"last_seen_at": "2023-11-07T05:31:56Z"
},
"dabs_flags": {
"new_item_raw": true,
"on_spa_raw": true,
"semantics": "source_flags_unverified",
"times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
}
},
"inventory_retrieved_at": "2023-11-07T05:31:56Z",
"availability_summary": {
"scope_store_count": 1,
"reported_positive_store_count": 1,
"eligible_positive_store_count": 1,
"reported_zero_store_count": 1,
"row_absent_store_count": 1,
"unchecked_store_count": 1,
"retrieved_at_min": "2023-11-07T05:31:56Z",
"retrieved_at_max": "2023-11-07T05:31:56Z",
"retrieval_policy_id": "<string>",
"meets_retrieval_policy": true,
"upstream_age_known": false,
"last_refresh_attempt": {
"attempted_at": "2023-11-07T05:31:56Z",
"status": "succeeded"
}
},
"search_group": {
"type": "product_family",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"member_count": 3,
"representative_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"identifier_matches": [
{
"source": "utah_dabs_sku",
"value": "347210",
"relationship": "current",
"current_value": "347210"
}
],
"name_components": {
"product_name": "<string>",
"expression": "<string>",
"age_statement": "<string>",
"pack_count": 2
},
"attributes": {
"vintage_year": 1999,
"proof": 120,
"alcohol_by_volume_percent": 50,
"alcohol_by_volume_basis": "explicit_label",
"wine_varietals": [
"cabernet_sauvignon"
],
"package_form": "can",
"beverage_styles": [
"blanco"
],
"origin_country_codes": [
"AR"
],
"production_designations": [
"bottled_in_bond"
],
"certifications": [
"kosher_for_passover_mevushal"
],
"source_programs": [
"special_order"
],
"review": {
"state": "confirmed",
"rule_version": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
},
"observed_activity": {
"match": "first_observed_by_nektir",
"observed_at": "2023-11-07T05:31:56Z",
"change_types": [
"product_first_observed"
],
"semantics": "nektir_published_observation_not_source_release_time"
}
}
],
"meta": {
"page": {
"has_more": true,
"next_cursor": "<string>",
"cursor_expires_at": "2023-11-07T05:31:56Z"
},
"warnings": [
{
"code": "INVENTORY_COVERAGE_PARTIAL"
}
],
"coverage": {
"status": "complete_for_retrieval_policy",
"candidate_product_count": 1,
"checked_product_count": 1,
"unchecked_pair_count": 1,
"retrieved_at_min": "2023-11-07T05:31:56Z",
"retrieved_at_max": "2023-11-07T05:31:56Z",
"scope_store_count": 1,
"expected_pair_count": 1,
"within_policy_product_count": 1,
"reported_positive_pair_count": 1,
"reported_zero_pair_count": 1,
"row_absent_pair_count": 1
},
"facets": {
"matching_product_count": 1,
"brands": [
{
"count": 1,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>"
}
],
"categories": [
{
"count": 1,
"id": "<string>",
"name": "<string>"
}
],
"statuses": [
{
"count": 1,
"code": "<string>"
}
],
"price": {
"currency": "USD",
"minimum_amount_minor": 1,
"maximum_amount_minor": 1
},
"semantics": "counts_after_all_requested_filters_including_each_active_facet_filter"
}
},
"links": {
"self": "<string>",
"next": "<string>"
}
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}Search products and browse reported inventory
Searches the published local projection. For exact one-or-many lookup, supply either
skus or product_ids; sending one value uses the same operation as bulk lookup. The
legacy singular sku selector remains available. Exact selectors are mutually exclusive.
Inventory predicates can be scoped
to one or more stores, a radius, or the statewide reviewed consumer-store
set. store_ids, inventory_store_codes, and lat/lng are mutually exclusive scope selectors. An empty result does
not imply no stock when meta.coverage.status is partial or none.
curl --request GET \
--url http://127.0.0.1:5185/v1/productsconst options = {method: 'GET'};
fetch('http://127.0.0.1:5185/v1/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "http://127.0.0.1:5185/v1/products"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_ids": {
"utah_dabs_sku": "347210"
},
"name": "<string>",
"brand": "<string>",
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_slug": "<string>",
"product_family": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>",
"relationship_type": "expression"
},
"package_size": {
"milliliters": 2,
"container_count": 2,
"unit_milliliters": 2,
"total_milliliters": 2,
"display": "8 × 355 mL",
"interpretation": "single_container",
"basis": "normalized_source_size",
"normalization_state": "normalized"
},
"price": {
"amount_minor": 1,
"currency": "USD",
"display": "$19.99",
"source": "utah_dabs_workbook",
"times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
}
},
"status": {
"code": "1",
"label": "General distribution",
"lifecycle": "active",
"source_raw": "<string>"
},
"categories": [
{
"id": "<string>",
"name": "<string>"
}
],
"catalog_times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
},
"catalog_presence": {
"state": "present",
"last_seen_at": "2023-11-07T05:31:56Z"
},
"dabs_flags": {
"new_item_raw": true,
"on_spa_raw": true,
"semantics": "source_flags_unverified",
"times": {
"source_updated_at": "2023-11-07T05:31:56Z",
"retrieved_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z"
}
},
"inventory_retrieved_at": "2023-11-07T05:31:56Z",
"availability_summary": {
"scope_store_count": 1,
"reported_positive_store_count": 1,
"eligible_positive_store_count": 1,
"reported_zero_store_count": 1,
"row_absent_store_count": 1,
"unchecked_store_count": 1,
"retrieved_at_min": "2023-11-07T05:31:56Z",
"retrieved_at_max": "2023-11-07T05:31:56Z",
"retrieval_policy_id": "<string>",
"meets_retrieval_policy": true,
"upstream_age_known": false,
"last_refresh_attempt": {
"attempted_at": "2023-11-07T05:31:56Z",
"status": "succeeded"
}
},
"search_group": {
"type": "product_family",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"member_count": 3,
"representative_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"identifier_matches": [
{
"source": "utah_dabs_sku",
"value": "347210",
"relationship": "current",
"current_value": "347210"
}
],
"name_components": {
"product_name": "<string>",
"expression": "<string>",
"age_statement": "<string>",
"pack_count": 2
},
"attributes": {
"vintage_year": 1999,
"proof": 120,
"alcohol_by_volume_percent": 50,
"alcohol_by_volume_basis": "explicit_label",
"wine_varietals": [
"cabernet_sauvignon"
],
"package_form": "can",
"beverage_styles": [
"blanco"
],
"origin_country_codes": [
"AR"
],
"production_designations": [
"bottled_in_bond"
],
"certifications": [
"kosher_for_passover_mevushal"
],
"source_programs": [
"special_order"
],
"review": {
"state": "confirmed",
"rule_version": "<string>",
"reviewed_at": "2023-11-07T05:31:56Z"
}
},
"observed_activity": {
"match": "first_observed_by_nektir",
"observed_at": "2023-11-07T05:31:56Z",
"change_types": [
"product_first_observed"
],
"semantics": "nektir_published_observation_not_source_release_time"
}
}
],
"meta": {
"page": {
"has_more": true,
"next_cursor": "<string>",
"cursor_expires_at": "2023-11-07T05:31:56Z"
},
"warnings": [
{
"code": "INVENTORY_COVERAGE_PARTIAL"
}
],
"coverage": {
"status": "complete_for_retrieval_policy",
"candidate_product_count": 1,
"checked_product_count": 1,
"unchecked_pair_count": 1,
"retrieved_at_min": "2023-11-07T05:31:56Z",
"retrieved_at_max": "2023-11-07T05:31:56Z",
"scope_store_count": 1,
"expected_pair_count": 1,
"within_policy_product_count": 1,
"reported_positive_pair_count": 1,
"reported_zero_pair_count": 1,
"row_absent_pair_count": 1
},
"facets": {
"matching_product_count": 1,
"brands": [
{
"count": 1,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"name": "<string>"
}
],
"categories": [
{
"count": 1,
"id": "<string>",
"name": "<string>"
}
],
"statuses": [
{
"count": 1,
"code": "<string>"
}
],
"price": {
"currency": "USD",
"minimum_amount_minor": 1,
"maximum_amount_minor": 1
},
"semantics": "counts_after_all_requested_filters_including_each_active_facet_filter"
}
},
"links": {
"self": "<string>",
"next": "<string>"
}
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invalid_params": [
{
"name": "<string>",
"reason": "<string>"
}
]
}Headers
Query Parameters
SKU, product-name, and reviewed brand-alias search. Exact reviewed aliases take precedence; otherwise matching uses phrases, all tokens, and a bounded typo-tolerant fallback. Required for sort=relevance. Nonempty queries must retain at least two characters after normalization; punctuation-only queries return INVALID_PARAMETER.
2 - 200Change types used with changed_since. When omitted, product-level price, status, presentation, aggregate-inventory, and catalog-presence changes are included; high-volume store-level events and first observations are excluded.
8product_first_observed, price_changed, status_changed, product_presentation_changed, aggregate_inventory_changed, store_inventory_first_observed, store_inventory_changed, catalog_presence_changed Comma-separated normalized wine varietals; OR semantics within this filter.
10cabernet_sauvignon, cabernet_franc, chardonnay, chenin_blanc, gamay, gewurztraminer, grenache, malbec, merlot, mourvedre, muscat, nebbiolo, petite_sirah, petit_verdot, pinot_blanc, pinot_grigio, pinot_gris, pinot_noir, riesling, roussanne, sangiovese, semillon, sauvignon_blanc, syrah, viognier, zinfandel Comma-separated normalized styles; OR semantics within this filter.
10blanco, reposado, anejo, extra_anejo, cristalino, joven, single_malt, blended_scotch, rye_whiskey, irish_whiskey, canadian_whiskey, brut, blanc_de_blancs, blanc_de_noirs, rose, champagne, prosecco, cava, port, sherry, vermouth, marsala, madeira, sangria, late_harvest, pilsner, pale_ale, porter, stout, wheat_beer, hefeweizen, oktoberfest, belgian_style_ale Set to family on a text search to return one representative result per reviewed family. Ungrouped products remain individual results. Inventory-scoped predicates are intentionally incompatible; retrieve the family detail to compare member availability. Collapsed search uses sort=relevance.
none, family Comma-separated optional expansions. coverage_details adds pair-state accounting and requires an inventory scope or predicate on product search. facets adds query-dependent brand, category, status, and price counts after all requested filters have been applied.
2coverage_details, facets