# Traer un producto físico por ID Devuelve el detalle de un producto físico (ecommerce_type=retail). Requiere que el negocio tenga habilitada la solución de Productos Físicos. Endpoint: GET /products/{product_id} Version: 1.0.0 Security: ApiKeyAuth ## Path parameters: - `product_id` (integer, required) Example: 12181 ## Response 200 fields (application/json): - `status` (string, required) Example: "OK" - `data` (object, required) - `data.id` (integer, required) Example: 12181 - `data.business_id` (integer, required) Example: 265 - `data.hash` (string) Example: "WGwJyW" - `data.name` (string, required) Example: "Producto de ejemplo" - `data.short_description` (any) - `data.price` (string, required) Example: "2500" - `data.price_min` (any) - `data.price_max` (any) - `data.prices_list_key` (any) - `data.base_price` (string) Example: "2500" - `data.price_varies` (boolean) - `data.compare_at_price` (any) Example: "3000" - `data.price_visible` (boolean) Example: true - `data.currency` (string, required) Example: "ARS" - `data.sku` (any) Example: "abc123" - `data.slug` (string) Example: "producto-de-ejemplo" - `data.active` (boolean, required) Example: true - `data.rating` (integer) - `data.reviews` (integer) - `data.sales` (integer) - `data.tags` (string) - `data.weight` (number) Example: 1 - `data.length` (number) Example: 40 - `data.width` (number) Example: 40 - `data.height` (number) Example: 40 - `data.image` (any) - `data.is_variant` (boolean) - `data.has_variants` (boolean) - `data.subscription_only` (boolean) - `data.requires_shipping` (boolean) Example: true - `data.volume_pricing_enabled` (boolean) - `data.ecommerce_type` (string, required) Example: "retail" - `data.free_shipping` (boolean) - `data.require_login` (boolean) - `data.double_opt_in` (boolean) Example: true - `data.weight_unit` (string) Example: "kg" - `data.vendor` (any) - `data.stock_management` (boolean) - `data.sales_channel` (object) Mapa de canales de venta donde la clave es el ID del canal. - `data.is_buyable` (boolean) Example: true - `data.published` (boolean) Example: true - `data.categories` (array) Example: [] - `data.description` (any) Descripción HTML del producto. Example: "

Una descripcion impresionante

" - `data.images` (array) - `data.images.file_name` (string, required) Example: "WGwJyW_615605ac1da50.jpg" - `data.images.source` (string, required) Example: "http://cdn.example.com/develop/business/265/products/WGwJyW_615605ac1da50.jpg" - `data.images.order` (integer, required) Example: 1 - `data.category` (any) Puede venir null. - `data.seller` (any) - `data.variants` (any) En este ejemplo viene false, pero puede variar. - `data.related_products` (array) Example: [] - `data.stock_warehouses` (array) Example: [] - `data.default_variant` (any) - `data.metafields` (any) - `data.by_business_gateways` (any) - `data.promotional_video` (any) - `data.customers_permissions` (array) Example: [] - `data.welcome_email_message` (any) ## Response 400 fields (application/json): - `status` (string, required) Example: "ERROR" - `message` (string, required) Example: "Descripción del error" - `errors` (array, required) - `errors.code` (integer, required) Example: 4000 - `errors.extra_data` (array) Datos extra para debug/validación (puede venir vacío).