Precios actuales de un producto en cada tienda
GET
https://pricto.dev/v1/products/{product_id}/pricesOne row per retailer offer matched to the product: in stock first, then by price ascending. Use as_of to get the prices that were in force on a past date.
| Créditos | MCP |
|---|---|
| 1 per retailer offer returned | get_prices |
Parámetros#
| Parámetro | En | Tipo | Descripción |
|---|---|---|---|
product_id requerido | path | string | Canonical product ID (prd_...). A GTIN is also accepted here and resolved. |
max_credits | query | number | Spend at most this many credits on this call. Results are cut to fit and meta.usage.truncated is true. |
dry_run | query | boolean | Return the quote in meta.usage with data set to null, without charging. Default: false. |
retailer | query | string | One or more retailer IDs, comma separated (e.g. cl-jumbo,cl-unimarc). |
location | query | string | Store ID (str_...), administrative area as CL:13114 (country and comuna CUT code) or a place name ("Las Condes"). Only affects retailers whose prices vary by location; the resolved value is echoed in meta.location. |
as_of | query | string (date) | Return the prices that were in force at the end of this date instead of the latest. |
include_unavailable | query | boolean | Include offers that are out of stock. Default: true. |
min_confidence | query | number | Only include offers whose match confidence is at least this value. Default 0.85: below it an offer is not grouped with the product automatically. Default: 0.85. |
match_kinds | query | string | Match kinds to include, comma separated. Default identical. Add pack for offers that are N units of the product (compare by unit price, see match.pack_ratio) and equivalent for declared substitutes (another brand or lab), which are not the same item. Default: identical. |
lang | query | string | Response language as a BCP 47 tag (es, es-CL, en, en-US...). Supported today: es, en. An unsupported language falls back to English with a warning, never an error. Falls back to Accept-Language, then to the account default. The resolved value is in meta.lang. |
currency | query | string | Add converted amounts in this ISO 4217 currency. local (default) returns source currency only. Default: local. |
Respuesta#
200 Prices by retailer.
| Campo | Tipo | Descripción |
|---|---|---|
data requerido | object | |
data.product requerido | ProductSummary | |
data.product.id requerido | string | |
data.product.name requerido | string | |
data.product.brand requerido | BrandRef | |
data.product.brand.id requerido | string | |
data.product.brand.name requerido | string | |
data.product.category requerido | CategoryRef | |
data.product.category.id requerido | string | |
data.product.category.label requerido | string | |
data.product.category.path | string[] | |
data.product.size | object | |
data.product.gtin | string[] | |
data.product.image_url | string | null | |
data.product.price_summary requerido | PriceSummary | |
data.product.price_summary.currency requerido | string | |
data.product.price_summary.min requerido | number | null | |
data.product.price_summary.max requerido | number | null | |
data.product.price_summary.median | number | null | |
data.product.price_summary.offers_count requerido | integer | |
data.product.price_summary.retailers_count requerido | integer | |
data.product.price_summary.best | object | null | |
data.product.price_summary.observed_at | string (date-time) | null | |
data.product.price_summary.converted | object | |
data.product.score | number | Relevance score, search only. |
data.prices requerido | RetailerPrice[] | |
data.prices[].currency requerido | string | |
data.prices[].price requerido | number | |
data.prices[].list_price requerido | number | |
data.prices[].sale_price | number | null | |
data.prices[].card_price | number | null | Convenience: the lowest price in conditional_prices that requires a payment method or membership. |
data.prices[].card_label | string | null | |
data.prices[].conditional_prices | ConditionalPrice[] | Every price that requires a condition other than quantity (payment method, loyalty tier, app, coupon), as published. |
data.prices[].conditional_prices[].kind requerido | string | Valores / values: payment_method, membership, app_only, coupon, other. |
data.prices[].conditional_prices[].label requerido | string | As shown by the retailer. |
data.prices[].conditional_prices[].price requerido | number | |
data.prices[].conditional_prices[].payment_method | string | null | |
data.prices[].conditional_prices[].membership_tier | string | null | |
data.prices[].conditional_prices[].installments_count | integer | null | |
data.prices[].conditional_prices[].interest_free | boolean | null | |
data.prices[].unit_price | object | null | |
data.prices[].unit_price.amount requerido | number | |
data.prices[].unit_price.per requerido | string | Valores / values: kg, l, unit, m, m2. |
data.prices[].promotions | Promotion[] | |
data.prices[].promotions[].type requerido | string | Valores / values: multi_buy, nth_unit, percent_off, amount_off, bundle, gift, other. |
data.prices[].promotions[].label requerido | string | As shown by the retailer, e.g. "2 x $2.990". |
data.prices[].promotions[].min_quantity | integer | null | |
data.prices[].promotions[].effective_unit_price | number | null | Price per item when the promotion applies. |
data.prices[].promotions[].requires_card | string | null | Payment method required, if any. |
data.prices[].promotions[].valid_until | string (date) | null | |
data.prices[].availability requerido | string | Valores / values: in_stock, out_of_stock, limited, unknown. |
data.prices[].tax_included | boolean | As shown by the retailer (observed). |
data.prices[].tax_rate | number | null | Derived. Main VAT rate for this country and category, null when not known. |
data.prices[].price_ex_tax | number | null | Derived from price and tax_rate. Null when tax_rate is null. |
data.prices[].tax_rule_id | string | null | Versioned rule used to derive tax_rate. |
data.prices[].other_taxes_included | boolean | null | True when other taxes remain in price_ex_tax (e.g. Chile IABA on sweetened drinks). |
data.prices[].installments | object | |
data.prices[].observed_at requerido | string (date-time) | |
data.prices[].observed_local_date | string (date) | Capture date in the retailer time zone. Daily series use this date. |
data.prices[].capture_method requerido | string | How the price was obtained, part of the provenance with url and observed_at. public_page: read from the retailer's public web page (HTML, JSON-LD or the page payload). public_api: an open, unauthenticated JSON endpoint of the retailer's own site. retailer_feed: delivered by the retailer under an agreement. open_data: a public dataset published by a government or third party. Valores / values: public_page, public_api, retailer_feed, open_data. |
data.prices[].quality_status | string | warning when a validation flagged the observation (price jump, zero, unusual unit). Quarantined observations are never served. Valores / values: ok, warning. |
data.prices[].quality_flags | string[] | Why the price was flagged. The price is delivered as published, never corrected. discount_over_85: more than 85% off the list price. round_price_low: a round price of CLP 1,000 or less. Both often mean a placeholder price or a store error. |
data.prices[].corrected | boolean | True when the observation was amended after capture (the original is kept). |
data.prices[].converted | Converted | |
data.prices[].converted.currency requerido | string | |
data.prices[].converted.price requerido | number | |
data.prices[].converted.list_price | number | null | |
data.prices[].converted.card_price | number | null | |
data.prices[].converted.unit_price | number | null | |
data.prices[].converted.fx_rate requerido | number | Units of target currency per unit of source currency. |
data.prices[].converted.fx_date requerido | string (date) | Publication date of the rate used (last published on or before the observation date). |
data.prices[].converted.fx_source | string | |
data.prices[].converted.fx_method | string | Valores / values: direct, cross. |
data.prices[].retailer requerido | RetailerRef | |
data.prices[].retailer.id requerido | string | |
data.prices[].retailer.name requerido | string | |
data.prices[].offer_id requerido | string | |
data.prices[].store_id | string | null | Null when the price is national/online. |
data.prices[].url requerido | string (uri) | |
data.prices[].title_original requerido | string | |
data.prices[].seller | Seller | Who sells the offer. On marketplaces it is a third party; name is null when the seller is a natural person (no personal data). |
data.prices[].seller.id requerido | string | |
data.prices[].seller.name requerido | string | null | |
data.prices[].seller.is_retailer_itself requerido | boolean | |
data.prices[].match requerido | Match | How the offer was linked to the canonical product. |
data.prices[].match.method requerido | string | singleton: the offer matched nothing else and is its own product. Valores / values: gtin, rules, model, manual, singleton. |
data.prices[].match.confidence requerido | number | |
data.prices[].match.kind requerido | string | identical: the same item. pack: the offer is N units of the product (pack_ratio), comparable by unit price. equivalent: a declared substitute of another brand or lab, not the same item. Valores / values: identical, pack, equivalent. |
data.prices[].match.pack_ratio | number | null | Units of the product in the offer, for kind pack. |
data.summary requerido | PriceSummary | |
data.summary.currency requerido | string | |
data.summary.min requerido | number | null | |
data.summary.max requerido | number | null | |
data.summary.median | number | null | |
data.summary.offers_count requerido | integer | |
data.summary.retailers_count requerido | integer | |
data.summary.best | object | null | |
data.summary.best.retailer | RetailerRef | |
data.summary.best.offer_id | string | |
data.summary.best.price | number | |
data.summary.observed_at | string (date-time) | null | |
data.summary.converted | object | |
data.summary.converted.currency | string | |
data.summary.converted.min | number | null | |
data.summary.converted.max | number | null | |
data.summary.converted.fx_rate | number | |
data.summary.converted.fx_date | string (date) | |
data.summary.converted.fx_source | string | |
data.summary.converted.fx_method | string | Valores / values: direct, cross. |
meta requerido | Meta |
meta trae el costo, la fuente para citar, el idioma, la moneda y los avisos (ver Convenciones).
Errores#
Current prices of a product at every retailer
GET
https://pricto.dev/v1/products/{product_id}/pricesOne row per retailer offer matched to the product: in stock first, then by price ascending. Use as_of to get the prices that were in force on a past date.
| Credits | MCP |
|---|---|
| 1 per retailer offer returned | get_prices |
Parameters#
| Parameter | In | Type | Description |
|---|---|---|---|
product_id required | path | string | Canonical product ID (prd_...). A GTIN is also accepted here and resolved. |
max_credits | query | number | Spend at most this many credits on this call. Results are cut to fit and meta.usage.truncated is true. |
dry_run | query | boolean | Return the quote in meta.usage with data set to null, without charging. Default: false. |
retailer | query | string | One or more retailer IDs, comma separated (e.g. cl-jumbo,cl-unimarc). |
location | query | string | Store ID (str_...), administrative area as CL:13114 (country and comuna CUT code) or a place name ("Las Condes"). Only affects retailers whose prices vary by location; the resolved value is echoed in meta.location. |
as_of | query | string (date) | Return the prices that were in force at the end of this date instead of the latest. |
include_unavailable | query | boolean | Include offers that are out of stock. Default: true. |
min_confidence | query | number | Only include offers whose match confidence is at least this value. Default 0.85: below it an offer is not grouped with the product automatically. Default: 0.85. |
match_kinds | query | string | Match kinds to include, comma separated. Default identical. Add pack for offers that are N units of the product (compare by unit price, see match.pack_ratio) and equivalent for declared substitutes (another brand or lab), which are not the same item. Default: identical. |
lang | query | string | Response language as a BCP 47 tag (es, es-CL, en, en-US...). Supported today: es, en. An unsupported language falls back to English with a warning, never an error. Falls back to Accept-Language, then to the account default. The resolved value is in meta.lang. |
currency | query | string | Add converted amounts in this ISO 4217 currency. local (default) returns source currency only. Default: local. |
Response#
200 Prices by retailer.
| Field | Type | Description |
|---|---|---|
data required | object | |
data.product required | ProductSummary | |
data.product.id required | string | |
data.product.name required | string | |
data.product.brand required | BrandRef | |
data.product.brand.id required | string | |
data.product.brand.name required | string | |
data.product.category required | CategoryRef | |
data.product.category.id required | string | |
data.product.category.label required | string | |
data.product.category.path | string[] | |
data.product.size | object | |
data.product.gtin | string[] | |
data.product.image_url | string | null | |
data.product.price_summary required | PriceSummary | |
data.product.price_summary.currency required | string | |
data.product.price_summary.min required | number | null | |
data.product.price_summary.max required | number | null | |
data.product.price_summary.median | number | null | |
data.product.price_summary.offers_count required | integer | |
data.product.price_summary.retailers_count required | integer | |
data.product.price_summary.best | object | null | |
data.product.price_summary.observed_at | string (date-time) | null | |
data.product.price_summary.converted | object | |
data.product.score | number | Relevance score, search only. |
data.prices required | RetailerPrice[] | |
data.prices[].currency required | string | |
data.prices[].price required | number | |
data.prices[].list_price required | number | |
data.prices[].sale_price | number | null | |
data.prices[].card_price | number | null | Convenience: the lowest price in conditional_prices that requires a payment method or membership. |
data.prices[].card_label | string | null | |
data.prices[].conditional_prices | ConditionalPrice[] | Every price that requires a condition other than quantity (payment method, loyalty tier, app, coupon), as published. |
data.prices[].conditional_prices[].kind required | string | Valores / values: payment_method, membership, app_only, coupon, other. |
data.prices[].conditional_prices[].label required | string | As shown by the retailer. |
data.prices[].conditional_prices[].price required | number | |
data.prices[].conditional_prices[].payment_method | string | null | |
data.prices[].conditional_prices[].membership_tier | string | null | |
data.prices[].conditional_prices[].installments_count | integer | null | |
data.prices[].conditional_prices[].interest_free | boolean | null | |
data.prices[].unit_price | object | null | |
data.prices[].unit_price.amount required | number | |
data.prices[].unit_price.per required | string | Valores / values: kg, l, unit, m, m2. |
data.prices[].promotions | Promotion[] | |
data.prices[].promotions[].type required | string | Valores / values: multi_buy, nth_unit, percent_off, amount_off, bundle, gift, other. |
data.prices[].promotions[].label required | string | As shown by the retailer, e.g. "2 x $2.990". |
data.prices[].promotions[].min_quantity | integer | null | |
data.prices[].promotions[].effective_unit_price | number | null | Price per item when the promotion applies. |
data.prices[].promotions[].requires_card | string | null | Payment method required, if any. |
data.prices[].promotions[].valid_until | string (date) | null | |
data.prices[].availability required | string | Valores / values: in_stock, out_of_stock, limited, unknown. |
data.prices[].tax_included | boolean | As shown by the retailer (observed). |
data.prices[].tax_rate | number | null | Derived. Main VAT rate for this country and category, null when not known. |
data.prices[].price_ex_tax | number | null | Derived from price and tax_rate. Null when tax_rate is null. |
data.prices[].tax_rule_id | string | null | Versioned rule used to derive tax_rate. |
data.prices[].other_taxes_included | boolean | null | True when other taxes remain in price_ex_tax (e.g. Chile IABA on sweetened drinks). |
data.prices[].installments | object | |
data.prices[].observed_at required | string (date-time) | |
data.prices[].observed_local_date | string (date) | Capture date in the retailer time zone. Daily series use this date. |
data.prices[].capture_method required | string | How the price was obtained, part of the provenance with url and observed_at. public_page: read from the retailer's public web page (HTML, JSON-LD or the page payload). public_api: an open, unauthenticated JSON endpoint of the retailer's own site. retailer_feed: delivered by the retailer under an agreement. open_data: a public dataset published by a government or third party. Valores / values: public_page, public_api, retailer_feed, open_data. |
data.prices[].quality_status | string | warning when a validation flagged the observation (price jump, zero, unusual unit). Quarantined observations are never served. Valores / values: ok, warning. |
data.prices[].quality_flags | string[] | Why the price was flagged. The price is delivered as published, never corrected. discount_over_85: more than 85% off the list price. round_price_low: a round price of CLP 1,000 or less. Both often mean a placeholder price or a store error. |
data.prices[].corrected | boolean | True when the observation was amended after capture (the original is kept). |
data.prices[].converted | Converted | |
data.prices[].converted.currency required | string | |
data.prices[].converted.price required | number | |
data.prices[].converted.list_price | number | null | |
data.prices[].converted.card_price | number | null | |
data.prices[].converted.unit_price | number | null | |
data.prices[].converted.fx_rate required | number | Units of target currency per unit of source currency. |
data.prices[].converted.fx_date required | string (date) | Publication date of the rate used (last published on or before the observation date). |
data.prices[].converted.fx_source | string | |
data.prices[].converted.fx_method | string | Valores / values: direct, cross. |
data.prices[].retailer required | RetailerRef | |
data.prices[].retailer.id required | string | |
data.prices[].retailer.name required | string | |
data.prices[].offer_id required | string | |
data.prices[].store_id | string | null | Null when the price is national/online. |
data.prices[].url required | string (uri) | |
data.prices[].title_original required | string | |
data.prices[].seller | Seller | Who sells the offer. On marketplaces it is a third party; name is null when the seller is a natural person (no personal data). |
data.prices[].seller.id required | string | |
data.prices[].seller.name required | string | null | |
data.prices[].seller.is_retailer_itself required | boolean | |
data.prices[].match required | Match | How the offer was linked to the canonical product. |
data.prices[].match.method required | string | singleton: the offer matched nothing else and is its own product. Valores / values: gtin, rules, model, manual, singleton. |
data.prices[].match.confidence required | number | |
data.prices[].match.kind required | string | identical: the same item. pack: the offer is N units of the product (pack_ratio), comparable by unit price. equivalent: a declared substitute of another brand or lab, not the same item. Valores / values: identical, pack, equivalent. |
data.prices[].match.pack_ratio | number | null | Units of the product in the offer, for kind pack. |
data.summary required | PriceSummary | |
data.summary.currency required | string | |
data.summary.min required | number | null | |
data.summary.max required | number | null | |
data.summary.median | number | null | |
data.summary.offers_count required | integer | |
data.summary.retailers_count required | integer | |
data.summary.best | object | null | |
data.summary.best.retailer | RetailerRef | |
data.summary.best.offer_id | string | |
data.summary.best.price | number | |
data.summary.observed_at | string (date-time) | null | |
data.summary.converted | object | |
data.summary.converted.currency | string | |
data.summary.converted.min | number | null | |
data.summary.converted.max | number | null | |
data.summary.converted.fx_rate | number | |
data.summary.converted.fx_date | string (date) | |
data.summary.converted.fx_source | string | |
data.summary.converted.fx_method | string | Valores / values: direct, cross. |
meta required | Meta |
meta carries the cost, the source line to quote, the language, the currency and notices (see Conventions).