{"provider":"kalicart","schema_version":"1.1","catalog_contract_version":"0.3-global-draft","catalog_kind":"global_merchants_index","scope":{"type":"global_multi_merchant_catalog","invariant":"Federated read-only catalog pointers. Every product endpoint must include explicit merchant identity. Kalicart does not mediate checkout or payments."},"links":{"discovery":"https://global.kalicart.com/v1/global-catalog/discovery","self":"https://global.kalicart.com/v1/global-catalog/merchants?limit=50&offset=0","next":null,"meta":"https://global.kalicart.com/v1/global-catalog/meta"},"agent_engagement":{"schema_version":"1.4.0","default_integration":"agent_first_L3_resolve","catalog_language":{"primary":"it","accepted":["it","en"],"rule":"The Kalicart catalog is in Italian/English. Regardless of the user language, normalize product terms to Italian or English before building catalog queries. The agent LLM must translate product vocabulary — Kalicart does not translate. User constraints (budget, size, color) must also be in standard form (numbers, EN color names or IT equivalents). Examples: \"Badehose\" → \"boxer da mare\", \"maillot de bain\" → \"costume da bagno\", \"pantalon de sport\" → \"pantaloni sportivi\", \"Turnschuhe\" → \"scarpe da ginnastica\"."},"principle":"Kalicart is a computable catalog, not semantic search. The agent interprets language; Kalicart computes verifiable contract. Embeddings may recover — only resolved rules may constrain.","summary":"Before searching: read these rules. Classify ambiguous terms, resolve them leaf-scoped, decompose into struct fields, then call public_catalog or global search with structured filters. Never pass raw adjectives (dark, heavy, premium) as query facets.","human_playbook":"docs/AGENT_QUERY_PLAYBOOK.md","primary_surface":"GET /v1/global-catalog/search","primary_mcp_tool":null,"legacy_resolve_status":"RETIRED (2026-06-10): POST /intent/resolve, commerce-intent and MCP resolve_commerce_intent answer 410 Gone. The agent interprets the request itself. The agent-first decomposition discipline below remains valid — apply the same struct fields to GET /search filters (q = bare spine, attributes in dedicated filters).","how_to_search":["1) Bootstrap: GET /v1/global-catalog/discovery → read agent_engagement (this object). On a single shop: GET /v1/agent-bridge/{token} → read agent_engagement + public_catalog.*.","2) Classify: product-only browse vs budget vs delivery vs multi-item task.","3) Resolve ambiguous human terms (color, weight, premium, style…) leaf-scoped — see semantic_resolution — never pass raw adjectives to Kalicart.","4) Product-only browse (one shop, no budget/delivery) → public_catalog search/products on merchant bridge — fast L1.","5) Budget or availability constraints → structured search filters (price_min/price_max, availability); shipping truth → merchant_shipping_policy in discovery; multi-merchant comparison → GET /v1/global-catalog/search.","6) Decompose before searching: q = product spine only; resolved traits → dedicated filters; budget → price filters. Never stack attributes into q.","7) Read agent_guidance + commerce_outcome before replying — never invent stock, price, or delivery.","8) Product detail / checkout-ready only after offer_ready or compatible from resolve."],"semantic_boundary":{"definition":"The boundary between agent and Kalicart separates linguistic interpretation (agent-side) from verifiable computation (substrate-side).","rule":"Every ambiguous, subjective, contextual, cultural, or comparative concept must be resolved, clarified, or dropped before substrate access — never passed through raw.","manifesto":["Retrieval may suggest. Only contextual resolution may constrain.","The agent interprets language. Kalicart computes the contract.","Embeddings may recover. Only rules may compute."],"agent_freedom":["Natural language with the human user","Interpretation, negotiation, explanation","Choosing evidence vs clarification when substrate lacks a hard axis","Maintaining semantic_resolution_trace for audit"],"substrate_truth":["Deterministic constraint application on documented fields and axes","Catalog-backed facts in responses — no semantic guessing","No interpretation of raw adjectives, taste, or embedding equivalence","Degradation accounting when soft axes cannot be hard-filtered"],"accepts":["constraint","typed_evidence","verifiable_facets","resolved_provenance"],"rejects":["raw taste adjectives","implicit style without resolution","embedding equivalence as operational truth","semantic_leakage in utterance or invented JSON keys"]},"semantic_resolution":{"fundamental_rule":"No ambiguous, subjective, or contextual term may cross the semantic boundary without explicit resolution. Do not fake computability.","thesis":"Kalicart is computable commerce, not embedding retrieval. Adjectives are inputs to resolve — not query strings.","pipeline":["user_intent","term_classification","semantic_axis_assignment","leaf_policy_resolver","resolution_kind_and_status","constraint_or_evidence_builder","kalicart_query","read_agent_guidance_before_human_reply"],"resolution_kinds":{"constraint":"Verifiable deterministically by substrate (e.g. product_attributes.color dark, budget_max, size L, documented hard axis).","evidence":"Semantic hint routed in utterance or recall — useful but NOT strong computation (e.g. utterance heavyweight cotton without gsm_min).","hint":"Ranking/support signal only — never a filter; may inform agent reply post-resolve.","unresolved":"Needs clarification or must stay outside the resolve payload — do not leak into utterance."},"resolution_status":{"resolved_constraint":"Mapped to verifiable substrate field or hard axis — safe to query.","resolved_evidence":"Semantic useful routing only — agent must not claim hard filter satisfied.","ambiguous_requires_clarification":"Too vague for leaf policy — ask user before substrate.","unsupported_semantic_axis":"Concept not supported in this leaf/domain — do not invent mapping."},"semantic_axes":[{"axis_id":"thermal_weight","user_terms":["pesante","leggero","heavy","lightweight","invernale"],"means":"Weight/warmth perception — NOT a global facet.","leaf_resolvers":{"apparel.tops.tshirt":["gsm evidence","heavyweight cotton evidence","fleece construction"],"apparel.outerwear.jacket":["insulation","winter routing","wool/down material constraint when stated"],"footwear.sneakers":["chunky sole model terms","unsupported if only aggressive/heavy adjective"]},"substrate_link":"Hard only when material/size or documented axis applies; else evidence in utterance."},{"axis_id":"visual_darkness","user_terms":["scuro","dark","nero","navy"],"means":"Luminance / color bucket — leaf-scoped.","leaf_resolvers":{"apparel":["product_attributes.color dark → constraint"],"home_furniture":["dominant tone evidence or clarification"]},"substrate_link":"color dark|light buckets when apparel/swimwear active."},{"axis_id":"formality","user_terms":["elegante","formale","casual","sportivo"],"means":"Formality/silhouette — not a JSON key.","leaf_resolvers":{"apparel":["tailoring/minimalism evidence","category routing","clarify occasion"]},"substrate_link":"Soft ranking or unresolved — no formality:true facet."},{"axis_id":"technicality","user_terms":["tecnico","technical","performance"],"means":"Functional construction axis.","leaf_resolvers":{"apparel.bottoms":["stretch ripstop material evidence"],"bags.backpack":["waterproof modular evidence"],"footwear":["waterproof gore evidence when explicit"]},"substrate_link":"Material/feature constraint only when observable in catalog."},{"axis_id":"luxury_signal","user_terms":["premium","lusso","luxury","high-end"],"means":"Market position — never premium:true.","leaf_resolvers":{"any":["material tier constraint","brand constraint","clarification","unsupported if no observable signal"]},"substrate_link":"market_position soft axis when domain-active — rank not gate unless hard evidence."}],"semantic_leakage":{"rule":"No ambiguous human term may cross substrate-side without explicit resolution. Stacking unresolved adjectives in utterance is semantic leakage — masked semantic search.","wrong_utterance":"premium elegant dark luxury heavy","right_approach":"Resolve each term to constraint | evidence | drop; utterance stays product spine only.","agent_must_not":"Reintroduce fuzzy retrieval by stuffing interpretive adjectives into utterance or invented keys."},"entry_schema":{"user_term":"string — original human token or phrase","leaf":"category leaf or branch after routing (e.g. apparel.tops.tshirt)","semantic_axis":"axis_id from semantic_axes or null if operational","resolution_type":"constraint | evidence | hint | unresolved","resolution_status":"resolved_constraint | resolved_evidence | ambiguous_requires_clarification | unsupported_semantic_axis","resolved_as":"object — product_attributes | constraints_global | utterance delta | null","confidence":"number 0–1 or high|medium|low","reason":"string — leaf-scoped explanation for audit"},"optional_resolve_field":{"name":"semantic_resolution_trace","location":"retired with the legacy resolve surface (410) — kept as historical schema reference","substrate_behavior":"Kalicart does not treat trace as authority; substrate computes only struct fields. Trace is governance and future tuning.","when_to_send":"Production MCP agents SHOULD attach trace for ambiguous terms resolved in the turn."},"human_language_examples":["elegante","pesante","leggero","scuro","premium","comodo","tecnico","estivo","sportivo"],"catalog_language_examples":["product_attributes.color dark|light","product_attributes.size material fit brand","constraints_global budget_max currency","utterance spine with category-routable product terms","semantic axes when domain-active (see semanticAxisRegistry)"],"rules":[{"id":"SEMANTIC_BOUNDARY","means":"Agent interprets; substrate computes. No semantic guessing substrate-side."},{"id":"CONSTRAINT_VS_EVIDENCE","means":"Do not fake computability — utterance routing is evidence unless a verifiable field exists (color dark, size, budget, hard axis)."},{"id":"SEPARATE_HUMAN_AND_CATALOG","means":"Human language has adjectives and intent; catalog accepts only observable fields and enums."},{"id":"LEAF_SCOPED_ONLY","means":"Same word ≠ same meaning globally. Map user_term → semantic_axis → leaf policy before querying."},{"id":"NO_HALLUCINATED_FACETS","means":"Never invent JSON keys (premium: true, heavy: true). Use supported product_attributes or ask clarification."},{"id":"SEMANTIC_LEAKAGE","means":"Never stack unresolved adjectives in utterance — each term resolved, clarified, or dropped."},{"id":"MANDATORY_DECOMPOSITION","means":"Split hard constraints, soft preferences, context, exclusions, and uncertainty before resolve."},{"id":"ANTI_EMBEDDING","means":"Embeddings may suggest — they do not authorize operational equivalence or substitute constraints."},{"id":"PROVENANCE","means":"Record semantic_resolution_trace entries with resolution_type and resolution_status for audit."},{"id":"COMPUTE_DONT_DESCRIBE","means":"Do not tell the catalog what you think a word means — produce verifiable constraints or typed evidence."}],"leaf_scoped_examples":[{"user_term":"pesante","leaf":"apparel.tops.tshirt","semantic_axis":"thermal_weight","resolution_type":"evidence","resolution_status":"resolved_evidence","resolved_as":{"utterance":"heavyweight cotton"},"confidence":0.74,"reason":"T-shirt heaviness ≈ construction/gsm — no gsm_min in substrate API yet; evidence not constraint.","wrong":["heavy: true","utterance: pesante","resolution_type: constraint without gsm_min"]},{"user_term":"pesante","leaf":"apparel.outerwear.jacket","semantic_axis":"thermal_weight","resolution_type":"evidence","resolution_status":"resolved_evidence","resolved_as":{"utterance":"winter insulated jacket"},"confidence":0.8,"reason":"Outerwear heaviness ≈ insulation/winter routing.","wrong":["heavy: true"]},{"user_term":"scuro","leaf":"apparel.swimwear.two_piece","semantic_axis":"visual_darkness","resolution_type":"constraint","resolution_status":"resolved_constraint","resolved_as":{"product_attributes":{"color":"dark"}},"confidence":0.9,"reason":"Apparel color bucket dark is substrate-verifiable.","wrong":["location_hint: dark color","utterance: scuro"]},{"user_term":"premium","leaf":"apparel.tops.sweater","semantic_axis":"luxury_signal","resolution_type":"constraint","resolution_status":"resolved_constraint","resolved_as":{"product_attributes":{"material":"cashmere"}},"confidence":0.65,"reason":"Premium resolved to observable material — not premium:true.","wrong":["premium: true","constraints_global.quality: premium"]},{"user_term":"aggressive","leaf":"footwear.sneakers","semantic_axis":"formality","resolution_type":"unresolved","resolution_status":"unsupported_semantic_axis","resolved_as":null,"confidence":0.2,"reason":"No supported sneaker axis for aggressive — clarify style or model; do not leak into utterance.","wrong":["utterance: aggressive sneakers"]}],"provenance_template":{"note":"Use entry_schema — deprecated alias for semantic_resolution_trace items.","user_term":"string","leaf":"category leaf","semantic_axis":"axis_id","resolution_type":"constraint | evidence | hint | unresolved","resolution_status":"resolved_constraint | resolved_evidence | ambiguous_requires_clarification | unsupported_semantic_axis","resolved_as":"object | null","confidence":"0–1","reason":"string"},"supported_product_attributes":["color","size","material","fit","brand"],"color_buckets":{"dark":"Use product_attributes.color dark after resolving scuro/nero/navy — not location_hint or raw adjective pass-through.","light":"Use product_attributes.color light after resolving chiaro/pastel — same rule."}},"do_not":["Do not search or scrape merchant HTML when public_catalog JSON or resolve is available.","Do not use GET /search as the primary path when the user stated budget, delivery intent, or a setup task — resolve first.","Do not send only a product keyword when the user also stated delivery intent or budget — map them to struct fields.","Do not put geographic tokens from product names (Paris, Roma, Portofino, Geneva, …) into location_hint — those belong in utterance only.","Do not set location_hint unless the user expressed delivery/shipping to a place; when unsure, omit it.","Do not treat commerce_outcome browse_match or offer list as deliverable when agent_guidance.shipping.eligibility_state is not_serviced.","Do not ask the user for CAP/postcode when location_hint and country are enough for merchant region policy (SHIP-v1).","Do not infer stock, variants, shipping zones, or category from merchant HTML when public catalog JSON is available.","Do not invent delivery availability — if no destination was passed, do not claim a city is or is not served.","Do not set budget_max, budget_min, or currency on constraints_global unless the human task states a numeric budget — Kalicart human parsers are ground truth; omit budget fields when absent.","Do not put product attributes (color, size, material, style) in constraints_global — especially not location_hint (e.g. location_hint: \"dark color\" is wrong). Use product_attributes or utterance after leaf-scoped resolution.","Do not pass raw ambiguous adjectives to utterance or JSON (pesante, premium, elegante, scuro, comodo) — resolve leaf-scoped first; color → product_attributes.color dark|light when applicable.","Do not invent catalog facets (premium: true, heavy: true, elegant: true) — only supported product_attributes and documented axes.","Do not treat embedding similarity as operational equivalence (elegante ≈ premium ≈ lusso) — constraints must be explicit and auditable.","Do not use semantic search intuition as a substitute for decomposition — Kalicart resolve is contract computation, not free interpretation.","Do not stack unresolved adjectives in utterance (semantic leakage) — e.g. utterance: \"premium elegant dark luxury heavy\".","Do not label resolution_type constraint when only utterance evidence exists — that fakes computability.","Do not query substrate when resolution_status is unsupported_semantic_axis or ambiguous_requires_clarification without clarification or dropping the term."],"input":{"model":"agent_first","utterance":"Product spine for recall and routing only — NOT a bag of unresolved adjectives. Evidence terms allowed only after resolution_type evidence is declared in semantic_resolution_trace.","constraints_global":{"scope":"Global operational constraints only: budget, currency, delivery destination, delivery window, merchant_mode — NOT product color/size/material.","when_user_stated_you_must_set":["budget_max and/or budget_min → constraints_global (+ currency ISO 4217)","delivery/shipping intent to a place → constraints_global.location_hint (NOT product-name geography)","budget includes shipping → constraints_global.budget_includes_shipping: true when explicit"],"optional_fields":["budget_max","budget_min","currency","location_hint","budget_includes_shipping","delivery_max_days","delivery_postcode","merchant_mode"],"never_use_for":["color, size, material, style, or other product attributes","location_hint for non-geographic product traits (e.g. \"dark color\")"]},"product_attributes":{"means":"Structured product-level constraints extracted from the human task — not budget or shipping.","set_when":["User stated color, size, material, fit, or similar product traits","After leaf-scoped resolution of ambiguous terms (e.g. scuro → color dark)","Prefer explicit struct over overloading constraints_global or location_hint"],"optional_fields":["color","size","material","fit","brand"],"color_resolution":"Human scuro/nero/navy → agent resolves to color dark bucket before resolve — never location_hint or raw adjective.","not_a_bucket_for":["pesante","premium","elegante","comodo","tecnico","sportivo","estivo"],"or_alternative":"Include routable product terms in utterance spine (e.g. \"winter insulated jacket\") when no single attribute fits."},"destination":{"when_user_stated_you_must_set":["delivery/shipping intent to a place → destination.location_hint (mirror constraints_global.location_hint)","country → destination.country (default IT when unspecified)"],"when_omit":["Product name, model, fragrance, or collection contains a place name (Ferrari Roma, Paris Hilton, Laura Biagiotti Roma)","User did not mention delivery or shipping","Ambiguous — prefer omit over false shipping truth"],"optional_fields":["country","location_hint","postcode"]},"location_hint":{"means":"Operational delivery destination only — GEOGRAPHIC city/region. Not a generic context field.","geographic_only":true,"right":["campobasso","roma","milano"],"wrong":["dark color","premium quality","fast delivery","size L","under 80 euros"],"set_when":["Explicit delivery frame: consegna a, spedizione a/in, deliver to, shipping to","Strong implicit delivery: \"in [city]\" with budget/party/event context (e.g. dinner in Campobasso)"],"do_not_set_when":["Place name is part of product identity (Paris perfume, Ferrari Roma/Portofino, Roma EDT)","No delivery intent in the user message"],"when_unsure":"Omit location_hint. Kalicart returns product recall without shipping gate — do not guess."},"session_key":"Required on every MCP commerce call for multi-turn loops (D2 agent memory)."},"field_schema":{"design_principle":"LLMs infer values into optional string fields. Each field declares scope + WRONG examples so unprepared agents do not use location_hint as a generic context bucket.","responsibility":{"agent":"Decompose the human task into the correct field before calling MCP — wrong slot is agent error (~80%).","schema":"Must be unambiguous with explicit WRONG lists on ambiguous fields — schema gap (~20%).","kalicart":"Computes catalog truth from structured input; malformed slots are not silently reinterpreted (0% blame on compute)."},"location_hint":{"geographic_only":true,"means":"Real city/region/postal area for merchant shipping — not product vocabulary.","right":["campobasso","roma","milano","berlin"],"wrong":["dark color","premium quality","fast delivery","size L","under 80 euros","free shipping","nike","bikini bottom"],"wrong_reason":"Color, quality, speed, budget, brand, and product names are not geographic destinations."},"constraints_global":{"scope":"Operational envelope only: budget_max/min, currency, delivery_max_days, delivery_postcode, merchant_mode, location_hint (geographic).","wrong_in_location_hint":["dark color","premium quality","fast delivery"],"never":["product color","size","material","style","brand preference","quality adjectives"]},"product_attributes":{"scope":"Product traits from the human task — not budget, not shipping.","right":[{"color":"dark"},{"size":"L"},{"material":"cotton"}],"wrong_field":"constraints_global or location_hint — never overload delivery/budget slots"},"utterance":{"scope":"Short product spine for catalog recall — not the full human paragraph.","right":["bikini bottom dark","prosecco","running shoes"],"wrong":"Embedding budget, delivery city, or full narrative without decomposing into struct fields"}},"output":{"read_before_reply":["agent_guidance.shipping.eligibility_state","agent_guidance.say","commerce_outcome","commerce_state.lifecycle_state","commerce_state.offers","next_actions"],"reply_composition":["SHOW-BEFORE-CLARIFY: if commerce_state.offers contains items, you MUST list product names (and prices when present) BEFORE asking any clarifying question. Never ask \"what size/color?\" without first showing what was found.","USE-SAY-AS-BASE: when agent_guidance.say is present, it is the ground-truth reply skeleton produced by the catalog pipeline — already includes products, prices, follow-up. Use it as-is or translate to the user language. Do not paraphrase away product names or prices.","NEVER-INVENT-PRICES: prices, product names, and currencies are facts from the tool response — report them verbatim. Never substitute with vague terms like \"several options\" or \"a few items\".","NO-CLARIFY-WITHOUT-SHOW: when offers exist but variant details are missing, the correct flow is SHOW the offers, THEN ask the follow-up. Asking-first is always wrong.","ZERO-OFFERS-EXPLICIT: if commerce_state.offers is empty but candidates exist with different attributes, say explicitly what is NOT available (e.g. \"no white slips in catalog\") and list what IS available (colors, sizes from pool_summary)."],"shipping":{"not_serviced":"Destination outside merchant served regions (catalog policy). Say so first; do not present recalled offers as deliverable to that address.","quotable":"Catalog shipping economics may appear in agent_guidance when zone is served.","partial":"Some offers servicable, some not — follow agent_guidance prompts.","destination_required":"No destination signal received — do not invent delivery; agent may clarify delivery intent or omit shipping claims.","no_destination_passed":"Agent omitted location_hint — Kalicart does not assert shipping to product-name geographies; browse/recall only."}},"golden_example":{"label":"delivery_intent","human_task":"I need prosecco for a dinner party in Campobasso, budget around 95 euros free shipping","resolve_commerce_intent_args":{"utterance":"prosecco","country":"IT","constraints_global":{"budget_max":95,"currency":"EUR","location_hint":"campobasso"},"destination":{"country":"IT","location_hint":"campobasso"}},"expected_signals":["agent_guidance.shipping.eligibility_state may be not_serviced when merchant ships region-limited zones only","agent_guidance.say cites served_region_labels from catalog — not a hardcoded city list"]},"negative_example":{"label":"product_geo_not_destination","human_task":"eau de parfum spray Paris under 60 euros","resolve_commerce_intent_args":{"utterance":"eau de parfum paris","country":"IT","constraints_global":{"budget_max":60,"currency":"EUR"}},"do_not":["Do not set location_hint: paris — Paris is the product line, not delivery","Do not tell the user delivery to Paris is unavailable"]},"negative_example_product_attrs":{"label":"product_attrs_not_in_constraints_global","human_task":"women swimwear two piece dark color under 80 euros","wrong":{"utterance":"swimwear","constraints_global":{"budget_max":80,"currency":"EUR","location_hint":"dark color"}},"resolve_commerce_intent_args":{"utterance":"swimwear two piece","country":"IT","constraints_global":{"budget_max":80,"currency":"EUR"},"product_attributes":{"color":"dark"}},"do_not":["Do not set location_hint: dark color — color is a product attribute, not a delivery destination","Do not put color/size/material in constraints_global","Do not pass scuro/dark as unresolved adjective — resolve to product_attributes.color dark"]},"negative_example_ambiguous_adjective":{"label":"heavy_leaf_scoped_not_pass_through","human_task":"maglietta pesante taglia L","wrong":{"utterance":"maglietta pesante","product_attributes":{"fit":"heavy"}},"resolve_commerce_intent_args":{"utterance":"t-shirt heavyweight cotton","country":"IT","product_attributes":{"size":"L"},"semantic_resolution_trace":[{"user_term":"pesante","leaf":"apparel.tops.tshirt","semantic_axis":"thermal_weight","resolution_type":"evidence","resolution_status":"resolved_evidence","resolved_as":{"utterance":"heavyweight cotton"},"confidence":0.74,"reason":"No gsm_min substrate field — evidence not constraint"}]},"do_not":["Do not pass pesante/heavy as a catalog facet","Do not set resolution_type constraint without verifiable field","Do not invent fit: heavy or heavy: true"]},"negative_example_semantic_leakage":{"label":"semantic_leakage_stacked_adjectives","human_task":"premium elegant dark luxury heavy t-shirt","wrong":{"utterance":"premium elegant dark luxury heavy t-shirt"},"do_not":["Semantic leakage — each adjective must be resolved, clarified, or dropped","Resolve dark → product_attributes.color; premium → material or clarify; pesante → evidence per leaf","Utterance spine should be t-shirt after decomposition"]},"negative_example_premium":{"label":"premium_no_hallucinated_facet","human_task":"voglio una maglia premium","wrong":{"utterance":"maglia premium","product_attributes":{"premium":true}},"resolve_commerce_intent_args":{"utterance":"maglia","country":"IT","product_attributes":{"material":"cashmere"}},"acceptable_alternative":{"strategy":"needs_clarification","reason":"premium undefined without observable material or tier"},"do_not":["Do not send premium: true or quality: premium","Resolve to material/brand tier or ask what premium means for this product type"]},"legacy_human_first":{"when":"Human-facing intent UI or agents without struct extraction capability","how":"RETIRED — the free-text resolve endpoint answers 410 Gone; no server-side parsing surface remains. Agents extract fields themselves and use search filters.","not_default_for":["MCP agents","autonomous orchestrators","production agent loops"]}},"total":10,"limit":50,"offset":0,"next_offset":null,"merchants":[{"merchant_id":"duinshop-it","name":"Duinshop","storefront_host":"duinshop.it","product_count":1949,"categorized_product_count":1953,"federation_eligible_pct":99.8,"category_count":87,"sku_count":1962,"last_sync_at":"2026-08-14T10:52:34.827Z","catalog_sync":{"status":"complete","indexed_product_count":1949,"federated_eligible_count":1949,"categorized_product_count":1953,"merchant_sku_count":1962,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"illpumpyouup-com","name":"I&#039;ll Pump You Up","storefront_host":"illpumpyouup.com","product_count":1287,"categorized_product_count":1287,"federation_eligible_pct":100,"category_count":82,"sku_count":1287,"last_sync_at":"2026-08-14T10:48:52.048Z","catalog_sync":{"status":"complete","indexed_product_count":1287,"federated_eligible_count":1287,"categorized_product_count":1287,"merchant_sku_count":1287,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"gioielleriadogi-it","name":"Dogi Gioielli","storefront_host":"gioielleriadogi.it","product_count":759,"categorized_product_count":764,"federation_eligible_pct":99.3,"category_count":14,"sku_count":764,"last_sync_at":"2026-08-14T10:54:44.978Z","catalog_sync":{"status":"complete","indexed_product_count":759,"federated_eligible_count":759,"categorized_product_count":764,"merchant_sku_count":764,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"possedoni-it","name":"Possedoni | Esperti del riposo","storefront_host":"possedoni.it","product_count":678,"categorized_product_count":678,"federation_eligible_pct":100,"category_count":29,"sku_count":678,"last_sync_at":"2026-08-14T10:45:09.449Z","catalog_sync":{"status":"complete","indexed_product_count":678,"federated_eligible_count":678,"categorized_product_count":678,"merchant_sku_count":678,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"nosugarshop-it","name":"NoSugarShop","storefront_host":"nosugarshop.it","product_count":302,"categorized_product_count":303,"federation_eligible_pct":99.7,"category_count":34,"sku_count":303,"last_sync_at":"2026-08-14T10:53:46.506Z","catalog_sync":{"status":"complete","indexed_product_count":302,"federated_eligible_count":302,"categorized_product_count":303,"merchant_sku_count":303,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"ilpopcorn-it","name":"Il PopCorn - Vendita Caramelle","storefront_host":"ilpopcorn.it","product_count":153,"categorized_product_count":153,"federation_eligible_pct":100,"category_count":16,"sku_count":153,"last_sync_at":"2026-08-13T22:43:01.628Z","catalog_sync":{"status":"complete","indexed_product_count":153,"federated_eligible_count":153,"categorized_product_count":153,"merchant_sku_count":153,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"project2209-com","name":"Project2209","storefront_host":"project2209.com","product_count":109,"categorized_product_count":109,"federation_eligible_pct":100,"category_count":92,"sku_count":109,"last_sync_at":"2026-08-14T10:53:57.384Z","catalog_sync":{"status":"complete","indexed_product_count":109,"federated_eligible_count":109,"categorized_product_count":109,"merchant_sku_count":109,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"velocitycetrullo-it","name":"Velocity Cetrullo Bike - Noleggio bici Pescara","storefront_host":"velocitycetrullo.it","product_count":22,"categorized_product_count":22,"federation_eligible_pct":100,"category_count":4,"sku_count":22,"last_sync_at":"2026-08-14T10:52:45.181Z","catalog_sync":{"status":"complete","indexed_product_count":22,"federated_eligible_count":22,"categorized_product_count":22,"merchant_sku_count":22,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"paradisofattoria-it","name":"Fattoria Paradiso - Azienda Agricola","storefront_host":"paradisofattoria.it","product_count":11,"categorized_product_count":11,"federation_eligible_pct":100,"category_count":2,"sku_count":11,"last_sync_at":"2026-08-14T10:52:51.002Z","catalog_sync":{"status":"complete","indexed_product_count":11,"federated_eligible_count":11,"categorized_product_count":11,"merchant_sku_count":11,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}},{"merchant_id":"phytoactiva-it","name":"Phyto Activa","storefront_host":"phytoactiva.it","product_count":2,"categorized_product_count":2,"federation_eligible_pct":100,"category_count":2,"sku_count":2,"last_sync_at":"2026-08-14T10:45:13.244Z","catalog_sync":{"status":"complete","indexed_product_count":2,"federated_eligible_count":2,"categorized_product_count":2,"merchant_sku_count":2,"source_catalog_count":null,"source_catalog_capped":false},"global_visibility":{"status":"included","basis":"synchronized_catalog","can_opt_out":true},"storefront_discovery":{"status":"not_verified","verified_at":null,"last_check_at":null,"last_error":null}}]}