Oleada 5 · Documentación

Inventario omnicanal

Un catálogo central y un stock compartido entre tu tienda propia y tus marketplaces conectados.

Qué resuelve PushSLog

Conceptos clave

Canales soportados

PlataformaConexiónGuía
ShopifyOAuth desde el panelVer guía
WooCommercePlugin + API key pk_Ver guía
Mercado LibreOAuth o registro sellerVer guía
Tienda NubeOAuth o tokenVer guía
API CUSTOMPOST catálogo con pk_Quick Start

Flujo operativo recomendado

Integración con API key (pk_)

MétodoRutaAuthDescripción
POST/api/v1/tenant/catalog/syncpk_ o Bearer sesión (OWNER/ADMIN si es sesión)Importa catálogo desde tiendas activas (Shopify, Woo, ML, TN, CUSTOM). Body opcional { shopId }.
GET/api/v1/tenant/catalog/sync/jobs/:jobIdpk_ o Bearer sesiónEstado del job en cola catalog-sync (completed, failed, result).
GET/api/v1/tenant/shops/:shopId/sync-statuspk_ o Bearer sesiónÚltima sincronización registrada para una tienda del tenant.
GET/api/v1/woocommerce/shops/:shopId/sync-statuspk_Alias histórico Woo; preferir /tenant/shops/:shopId/sync-status.
curl -s -X POST "https://api.pushslog.com/api/v1/tenant/catalog/sync" \
  -H "x-api-key: $PUSHSLOG_API_KEY"
curl -s -X POST "https://api.pushslog.com/api/v1/tenant/catalog/sync" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $PUSHSLOG_API_KEY" \
  -d '{ "shopId": "uuid-de-tu-tienda" }'
{
  "success": true,
  "queued": true,
  "jobId": "catalog-sync:tenant-id:…",
  "message": "Sincronización de catálogo en cola; consulta el estado con GET /api/v1/tenant/catalog/sync/jobs/:jobId."
}
curl -s "https://api.pushslog.com/api/v1/tenant/catalog/sync/jobs/JOB_ID" \
  -H "x-api-key: $PUSHSLOG_API_KEY"
{
  "success": true,
  "data": {
    "jobId": "catalog-sync:…",
    "state": "completed",
    "tenantId": "…",
    "shopId": null,
    "result": {
      "shopsProcessed": 2,
      "shopsFailed": 0,
      "productsSynced": 48,
      "variantsSynced": 112,
      "hasMore": false,
      "shopResults": [
        {
          "shopId": "…",
          "shopName": "Pushopy",
          "platform": "SHOPIFY",
          "productsSynced": 24,
          "variantsSynced": 56,
          "hasMore": false,
          "lastSyncAt": "2026-06-09T18:30:00.000Z"
        },
        {
          "shopId": "…",
          "shopName": "Mi Woo",
          "platform": "WOOCOMMERCE",
          "productsSynced": 24,
          "variantsSynced": 56,
          "hasMore": false,
          "lastSyncAt": "2026-06-09T18:30:05.000Z"
        }
      ]
    }
  }
}
curl -s "https://api.pushslog.com/api/v1/tenant/shops/SHOP_ID/sync-status" \
  -H "x-api-key: $PUSHSLOG_API_KEY"

API del panel (sesión JWT)

MétodoRutaAuthDescripción
GET/api/v1/tenant/catalog/productsBearer sesión · plan inventarioListado paginado del catálogo central (search, limit, offset).
PATCH/api/v1/tenant/catalog/master-variants/:masterVariantIdBearer sesión · managerActualiza stock o metadatos del SKU maestro.
GET/api/v1/tenant/catalog/channel-mappingsBearer sesión · plan inventarioMapeos canal ↔ maestro (shopId, status, search, limit).
POST/api/v1/tenant/catalog/channel-mappingsBearer sesión · managerVincula manualmente un listing de canal con un SKU maestro.
POST/api/v1/tenant/catalog/channel-mappings/backfillBearer sesión · managerRegenera mapeos desde variantes ya importadas (body opcional { shopId }).
GET/api/v1/tenant/inventory/configBearer sesiónFuente de verdad de stock y preferencias de alertas.
PATCH/api/v1/tenant/inventory/configBearer sesión · managerDefine PUSHSLOG_CENTRAL o SHOP maestro; configura alertas.
GET/api/v1/tenant/inventory/alerts/summaryBearer sesión · plan inventarioContadores: stock 0, sin mapear, conflictos, deducciones unmapped.
GET/api/v1/tenant/inventory/stock-deductionsBearer sesión · plan inventarioAuditoría de bajas de stock por ventas en canal.
POST/api/v1/tenant/catalog/publish-bulkBearer sesión · managerPublicación masiva de stock/SKU hacia canales elegidos (cola catalog-publish).
{
  "id": "…",
  "shopId": "…",
  "shopName": "Pushopy",
  "platform": "SHOPIFY",
  "masterVariantId": "…",
  "masterSku": "CAMISETA-AZUL-M",
  "masterName": "Camiseta azul — M",
  "channelVariantId": "gid://shopify/ProductVariant/…",
  "channelSku": "CAMISETA-AZUL-M",
  "status": "linked",
  "lastSyncedAt": "2026-06-09T18:30:00.000Z"
}
{
  "inventorySourceType": "PUSHSLOG_CENTRAL",
  "inventorySourceShopId": null,
  "inventoryAlertsEnabled": true,
  "inventoryAlertWebhookUrl": "https://ops.mi-tienda.com/hooks/inventario",
  "inventoryAlertEmails": "[email protected]"
}

Ventas y stock multi-canal

Errores frecuentes

HTTPerrorCuándo
403PLAN_INVENTARIO_LOCKEDEl tenant no tiene plan con feature inventario (Basic o superior).
202Sync o publicación encolados; consulta jobId con GET …/jobs/:jobId.
400INVALID_INVENTORY_SOURCE_TYPEinventorySourceType distinto de SHOP, PUSHSLOG_CENTRAL o null.
400INVALID_MAPPING_STATUSFiltro status en channel-mappings distinto de linked, unmapped, conflict.
404JOB_NOT_FOUNDjobId inexistente o de otro tenant.
404SHOP_NOT_FOUNDshopId no pertenece al tenant.
500CATALOG_SYNC_FAILEDFallo al leer catálogo del canal (token, OAuth o red); revisa credenciales.

Límites y buenas prácticas

Documentación relacionada