{"section":"tutorials","requestedLocale":"es","requestedSlug":"guia-de-integracion-consumir-informacion-del-catalogo-para-utilizar-en-un-servicio-externo","locale":"es","slug":"guia-de-integracion-consumir-informacion-del-catalogo-para-utilizar-en-un-servicio-externo","path":"docs/es/tutorials/integraciones/visión-de-conjunto-de-integraciones/guia-de-integracion-consumir-informacion-del-catalogo-para-utilizar-en-un-servicio-externo.md","branch":"main","content":"Este documento tiene como objetivo auxiliar en la integración de las informaciones existentes en el catálogo de una tienda VTEX con algún servicio externo.\n\nEntre los casos de uso más comunes para esa integración, tenemos:\n\n1. Integrar el catálogo de la tienda VTEX con marketplaces externos.\n2. Enviar los datos de catálogo para herramientas de BI.\n3. Generar informes externos utilizando la información del catálogo.\n\nSiga los pasos a continuación para realizar la integración.\n\n## Crear un afiliado\n\nEl afiliado funciona como un webhook que notificará el servicio externo sobre los cambios realizados en la información de un SKU, cambios en el inventario o cambios en los precios.\n\n1. En el menú lateral del Admin, haga clic en __Gestión de pedidos__.\n2. Haga clic en __Configuración__\n3. Haga clic en la pestaña __Afiliados__.\n4. Haga clic en el botón __Nuevo afiliado__.\n5. Rellene los campos según se describe a continuación.\n6. Haga clic en __Guardar__.\n\n### Llenar los campos del panel Nuevo Afiliado\n\n- __Nombre__: Rellene con el nombre del sistema afiliado.\n- __ID__: Código de identificación del afiliado de 3 dígitos. El ID debe contener __apenas consonantes__.\n- __Política Comercial__: ID de la política comercial que tendrá su información enviada al afiliado.\n- __E-mail de Follow Up__: Dirección de correo electrónico que recibirá información cuando el afiliado sea notificado.\n- __Endpoint de Search__: URL de la aplicación que [recibirá notificaciones](#actualizar-los-datos-de-los-skus) sobre los SKUs, sus precios y sus stocks. Esta URL debe ser desarrollada por el sistema externo para que VTEX pueda notificar los cambios en esta ruta.\n- __Versión del Endpoint de Search__: Mantenga este campo rellenado con la información __1.x.x__\n- __Usar mi medio de pago__: Si tiene sentido para su integración que el servicio externo reciba las informaciones de medios de pago de su tienda, marque esta flag.\n\n## Realizar la primera carga con los datos de los SKUs\n\nDespués de crear el endpoint que recibirá la información de los productos y haber configurado correctamente el afiliado, usted debe realizar una primera carga para obtener los datos del catálogo y guardarlos en la base de datos de su servicio externo. Para ello, siga las instrucciones que aparecen a continuación.\n\n### 1 - Obtener los datos de ID de los SKUs de su tienda\n\nHaga um `GET` en la ruta `http://{accountName}.vtexcommercestable.com.br/api/catalog_system/pvt/sku/stockkeepingunitids?page={page}&pagesize={page_size}` para obtener como respuesta un array con los IDs de los SKUs existentes en su tienda.\n\n__Parámetros de la API__:\n\n`{accountName}`: Nombre de la cuenta de su tienda en VTEX.\n\n`{page}`: En qué página se está haciendo el request. Usted debe pasar por todas las páginas hasta que la respuesta del request sea un array vacío (`[]`).\n\n`{page_size}`: La cantidad de identificadores de SKU que se devuelven por página. Recomendamos devolver un máximo de 1000 IDs por página.\n\n__Ejemplo de respuesta__:\n\n```JSON\n[\n    1\n    2\n    3\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10\n]\n```\n\n### 2 - Obtener los datos sobre las propiedades de los SKUs\n\nUtilizando los IDs de los SKUs obtenidos en el request anterior, usted debe hacer un `GET` en la ruta `http://{{accountName}}.vtexcommercestable.com.br/api/catalog_system/pvt/sku/stockkeepingunitbyid/{{skuId}}` para obtener información sobre las propiedades de los SKUs. La respuesta de este request devolverá la información que caracteriza el SKU, como __Nombre__, __Marca__, __Categoría__, __Coleciones__, __Imagen__, si el SKU está __Activo o Inactivo__ y __Políticas Comerciales__, por ejemplo. La información de precio y de stock aún no se obtiene en esta etapa.\n\n__Parámetros de la API__:\n\n`{{accountName}}`: Nombre de la cuenta de su tienda en VTEX.\n\n`{{skuId}}`: ID del SKU que se va a consultar.\n\n__Ejemplo de respuesta__:\n\n```\n{\n    \"Id\": 20,\n    \"ProductId\": 18,\n    \"NameComplete\": \"Newest Iron 220\",\n    \"ProductName\": \"Newest Iron\",\n    \"ProductDescription\": \"Newest iron\",\n    \"TaxCode\": \"\",\n    \"SkuName\": \"220\",\n    \"IsActive\": true,\n    \"IsTransported\": true,\n    \"IsInventoried\": true,\n    \"IsGiftCardRecharge\": false,\n    \"ImageUrl\": \"http://worldshopping.vteximg.com.br/arquivos/ids/155438-55-55/image-5a949c715cf84a7e9cac11cb745bfba9.jpg?v=636633199310730000\",\n    \"DetailUrl\": \"/newest-iron-18/p\",\n    \"CSCIdentification\": null,\n    \"BrandId\": \"2000000\",\n    \"BrandName\": \"Brand name\",\n    \"Dimension\": {\n        \"cubicweight\": 0.0002,\n        \"height\": 1,\n        \"length\": 1,\n        \"weight\": 1,\n        \"width\": 1\n    },\n    \"RealDimension\": {\n        \"realCubicWeight\": 0,\n        \"realHeight\": 0,\n        \"realLength\": 0,\n        \"realWeight\": 0,\n        \"realWidth\": 0\n    },\n    \"ManufacturerCode\": null,\n    \"IsKit\": false,\n    \"KitItems\": [],\n    \"Services\": [],\n    \"Categories\": [],\n    \"Attachments\": [],\n    \"Collections\": [],\n    \"SkuSellers\": [\n        {\n            \"SellerId\": \"1\",\n            \"StockKeepingUnitId\": 20,\n            \"SellerStockKeepingUnitId\": \"20\",\n            \"IsActive\": true,\n            \"FreightCommissionPercentage\": 0,\n            \"ProductCommissionPercentage\": 0\n        },\n        {\n            \"SellerId\": \"jbsusaqa\",\n            \"StockKeepingUnitId\": 20,\n            \"SellerStockKeepingUnitId\": \"888898\",\n            \"IsActive\": true,\n            \"FreightCommissionPercentage\": 0,\n            \"ProductCommissionPercentage\": 10\n        }\n    ],\n    \"SalesChannels\": [\n        1,\n        2,\n        3,\n        4,\n        5,\n        6\n    ],\n    \"Images\": [\n        {\n            \"ImageUrl\": \"http://worldshopping.vteximg.com.br/arquivos/ids/155438/image-5a949c715cf84a7e9cac11cb745bfba9.jpg?v=636633199310730000\",\n            \"ImageName\": null,\n            \"FileId\": 155438\n        }\n    ],\n    \"SkuSpecifications\": [],\n    \"ProductSpecifications\": [],\n    \"ProductClustersIds\": \"137,139\",\n    \"ProductCategoryIds\": \"/1/2/\",\n    \"ProductGlobalCategoryId\": 783,\n    \"ProductCategories\": {\n        \"1\": \"Choir & Voice\",\n        \"2\": \"For Men\"\n    },\n    \"CommercialConditionId\": 1,\n    \"RewardValue\": 0,\n    \"AlternateIds\": {\n        \"RefId\": \"888898\"\n    },\n    \"AlternateIdValues\": [\n        \"888898\"\n    ],\n    \"EstimatedDateArrival\": null,\n    \"MeasurementUnit\": \"un\",\n    \"UnitMultiplier\": 1,\n    \"InformationSource\": \"Indexer\",\n    \"ModalType\": null\n}\n```\n\n### 3 - Obtener los datos de precio y stock de los SKUs\n\nEn el caso de que se produzca un error en el sistema, se debe hacer un `POST` en la ruta `https://{accountName}.vtexcommercestable.com.br/api/fulfillment/pvt/orderForms/simulation?sc={salesChannel}&affiliateId={affiliateId}` para obtenerse los datos de __precio, stock y SLA de entrega__ de los SKUs. Esta llamada simula un carrito en el Checkout de VTEX, devolviendo la información más actualizada de precio, stock y SLA de entrega.\n\n__Parámetros de la API__:\n\n`{accountName}`: Nombre de la cuenta de su tienda en VTEX.\n\n`{salesChannel}`: Política comercial a considerar en la simulación.\n\n`{afiliadoId}`: ID del afiliado a ser considerado en el contexto de la simulación.\n\n__Ejemplo de BODY que se rellenará en el POST__:\n\n```\n{\n    \"postalCode\":\"10019\", //required field if the country field is filled\n    \"country\":\"USA\",      //required field if postalCode is filled\n    \"items\": [            //required field: must contain at least one item\n        {\n            \"id\":\"23\",    //required field (string): SKU id you want to use in the simulation\n            \"quantity\":1, //required field (int): quantity of the item you want to simulate\n            \"seller\":\"1\"  //id of the main store: always use the value 1\n        },\n        {\n            \"id\":\"25\",\n            \"quantity\":2,\n            \"seller\":\"1\"\n        }\n    ]\n}\n```\n\n__Ejemplo de respuesta__:\n\n```\n{\n    \"items\": [\n        {\n            \"id\": \"23\",\n            \"requestIndex\": 0,\n            \"quantity\": 0,\n            \"seller\": \"1\",\n            \"merchantName\": null,\n            \"priceValidUntil\": \"2019-08-17T19:40:26Z\",\n            \"price\": 13900,\n            \"listPrice\": 15900,\n            \"offerings\": [],\n            \"priceTags\": [],\n            \"measurementUnit\": \"kg\",\n            \"unitMultiplier\": 1.5,\n            \"attachmentOfferings\": []\n        }\n    ],\n    \"postalCode\": \"10019\",\n    \"geoCoordinates\": [],\n    \"country\": \"USA\",\n    \"logisticsInfo\": [\n        {\n            \"itemIndex\": 0,\n            \"addressId\": null,\n            \"selectedSla\": null,\n            \"selectedDeliveryChannel\": null,\n            \"stockBalance\": 0,\n            \"quantity\": 0,\n            \"shipsTo\": [\n                \"USA\",\n                \"ROU\",\n                \"BRA\",\n                \"GBR\"\n            ],\n            \"slas\": [],\n            \"deliveryChannels\": []\n        }\n    ],\n    \"pickupPoints\": [],\n    \"messages\": []\n}\n```\n\nCombinando los tres tipos de request mostrados arriba, usted será capaz de realizar la __primera carga__ de datos del catálogo de VTEX para grabar en la base de datos de un servicio externo.\n\n## Actualizar los datos de los SKUs\n\nEn caso de cambios en algún producto, VTEX notificará al endpoint del afiliado sobre la información de __todos los SKUs del producto modificado, incluso si uno de los SKUs no ha cambiado__, realizando un POST. A continuación se muestra un ejemplo del payload enviado por VTEX al endpoint:\n\n```json\n{\n  \"IdSku\": \"15\", // ID de SKU\n  \"An\": \"accountname\", // Account Name\n  \"IdAffiliate\": \"SPT\", // Affiliate Id\n  \"DateModified\": \"2018-08-20T15: 11: 28.1978783Z\", // Fecha de modificación\n  \"IsActive\": false, // Indica el status del SKU, si está activo o inactivo\n  \"StockModified\": false, // Indica si se ha modificado la acción del SKU\n  \"PriceModified\": false, // Indica si se ha modificado el precio del SKU\n  \"HasStockKeepingUnitModified\": true, // Indica si alguna información del SKU se ha cambiado (con excepción de precio y stock)\n  \"HasStockKeepingUnitRemovedFromAffiliate\": false // Indica si el SKU se ha eliminado del afiliado\n}\n```\n\nRecibiendo este payload, el integrador debe utilizar esta información para decidir qué llamadas debe hacer para actualizar la información de los SKU:\n\n- Si se ha producido un cambio de precio o de stock, el integrador debe llamar a la ruta `https://{accountName}.vtexcommercestable.com.br/api/fulfillment/pvt/orderForms/simulation?sc={salesChannel}&affiliateId={affiliateId}`, como se describe en la sección [Obtener los datos de precio y stock de los SKUs](#3-obtener-los-datos-de-precio-y-stock-de-los-skus).\n- Si se ha producido un cambio en el SKU que no sea de precio o de stock, el integrador debe llamar a la ruta `http://{{accountName}}.vtexcommercestable.com.br/api/catalog_system/pvt/sku/stockkeepingunitbyid/{{skuId}}`, como se describe en la sección [Obtener los datos sobre las propiedades de los SKUs](#2-obtener-los-datos-sobre-las-propiedades-de-los-skus).\n\n> ⚠️ Si se inserta un nuevo SKU en el catálogo, se le notificará en el endpoint de cada afiliado. Por tratarse de un nuevo SKU, es necesario realizar el llenado de los datos de este nuevo SKU en la base de datos del servicio externo. El integrador debe comprobar si el SKU notificado aún no existe en la base de datos del servicio externo. Si se trata de un nuevo SKU, el integrador debe seguir los mismos pasos descritos en la sección **Realizar la primera carga con los datos de SKUs**. Si es un SKU ya existente, el integrador debe seguir los pasos de la sección **Actualizar los datos de SKUs**.\n\n> ℹ️ Si desea integrar las formas de pago de un seller VTEX con un marketplace externo, [acceda a nuestra documentación](https://developers.vtex.com/vtex-rest-api/docs/external-marketplace-integration-guide)."}