{
  "info": {
    "name": "RM Ecommerce API v1",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Colección de la API REST v1 de RM. Importa también el environment `rm-api` (variables `base_url` y `api_key`) y empieza por «Probar conexión». Reglas de negocio: docs/api.md."
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_key}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://retail-s.online/api/v1"
    }
  ],
  "item": [
    {
      "name": "Conexión",
      "description": "Probar la llave y ver sus permisos.",
      "item": [
        {
          "name": "Probar conexión",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/",
              "host": [
                "{{base_url}}"
              ],
              "path": [],
              "query": [],
              "variable": []
            },
            "description": "Devuelve la tienda, el nombre de la llave y sus permisos. Sirve cualquier llave válida, sin importar sus scopes."
          }
        }
      ]
    },
    {
      "name": "Catálogo",
      "description": "Productos, variantes, imágenes, categorías, marcas, colecciones, atributos, plantillas, modificadores y traducciones. Permiso `products`.",
      "item": [
        {
          "name": "Listar categories",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/categories/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear la categoría",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Playeras\",\n  \"parent\": \"ROPA\",\n  \"is_active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener la categoría",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/categories/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear o reemplazar la categoría (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Playeras\",\n  \"parent\": \"ROPA\",\n  \"is_active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de la categoría",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Playeras\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar la categoría",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/categories/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_products`."
          }
        },
        {
          "name": "Listar variant-templates",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variant-templates/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variant-templates",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear la plantilla de variantes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/variant-templates/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variant-templates",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Ropa\",\n  \"options\": [\n    {\n      \"name\": \"Talla\",\n      \"values\": [\n        \"CH\",\n        \"M\",\n        \"G\"\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener la plantilla de variantes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variant-templates/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variant-templates",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear o reemplazar la plantilla de variantes (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/variant-templates/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variant-templates",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Ropa\",\n  \"options\": [\n    {\n      \"name\": \"Talla\",\n      \"values\": [\n        \"CH\",\n        \"M\",\n        \"G\"\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de la plantilla de variantes",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/variant-templates/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variant-templates",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Ropa\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar la plantilla de variantes",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variant-templates/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variant-templates",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_products`."
          }
        },
        {
          "name": "Listar brands",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/brands/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear la marca",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/brands/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Marca Ejemplo\",\n  \"is_active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener la marca",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/brands/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear o reemplazar la marca (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/brands/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Marca Ejemplo\",\n  \"is_active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de la marca",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/brands/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Marca Ejemplo\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar la marca",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/brands/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_products`."
          }
        },
        {
          "name": "Listar collections",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/collections/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "collections",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear la colección",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/collections/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "collections",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Novedades\",\n  \"is_active\": true,\n  \"featured\": false,\n  \"products\": [\n    \"PLY-001\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener la colección",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/collections/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "collections",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear o reemplazar la colección (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/collections/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "collections",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Novedades\",\n  \"is_active\": true,\n  \"featured\": false,\n  \"products\": [\n    \"PLY-001\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de la colección",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/collections/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "collections",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Novedades\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar la colección",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/collections/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "collections",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_products`."
          }
        },
        {
          "name": "Listar modifier-groups",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/modifier-groups/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "modifier-groups",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear el grupo de modificadores",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/modifier-groups/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "modifier-groups",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Extras\",\n  \"min_select\": 0,\n  \"max_select\": 2,\n  \"modifiers\": [\n    {\n      \"code\": \"QUESO\",\n      \"name\": \"Queso\",\n      \"price\": \"0.75\"\n    },\n    {\n      \"code\": \"TOCINO\",\n      \"name\": \"Tocino\",\n      \"price\": \"1.25\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener el grupo de modificadores",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/modifier-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "modifier-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear o reemplazar el grupo de modificadores (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/modifier-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "modifier-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Extras\",\n  \"min_select\": 0,\n  \"max_select\": 2,\n  \"modifiers\": [\n    {\n      \"code\": \"QUESO\",\n      \"name\": \"Queso\",\n      \"price\": \"0.75\"\n    },\n    {\n      \"code\": \"TOCINO\",\n      \"name\": \"Tocino\",\n      \"price\": \"1.25\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de el grupo de modificadores",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/modifier-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "modifier-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Extras\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar el grupo de modificadores",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/modifier-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "modifier-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_products`."
          }
        },
        {
          "name": "Listar attributes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/attributes/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear el atributo",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/attributes/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Material\",\n  \"type\": \"option\",\n  \"scope\": \"product\",\n  \"options\": [\n    \"Algodón\",\n    \"Poliéster\"\n  ],\n  \"is_filterable\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener el atributo",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/attributes/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear o reemplazar el atributo (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/attributes/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Material\",\n  \"type\": \"option\",\n  \"scope\": \"product\",\n  \"options\": [\n    \"Algodón\",\n    \"Poliéster\"\n  ],\n  \"is_filterable\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de el atributo",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/attributes/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Material\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar el atributo",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/attributes/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_products`."
          }
        },
        {
          "name": "Listar productos",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "category",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Crear producto",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"PLY-001\",\n  \"name\": \"Playera básica\",\n  \"status\": \"active\",\n  \"category\": \"PLAYERAS\",\n  \"short_description\": \"Algodón 100 %\",\n  \"base_unit\": \"PZA\",\n  \"tax_exempt\": false,\n  \"track_inventory\": true,\n  \"options\": [\n    {\n      \"name\": \"Color\",\n      \"values\": [\n        \"Negro\",\n        \"Blanco\"\n      ]\n    },\n    {\n      \"name\": \"Talla\",\n      \"values\": [\n        \"CH\",\n        \"M\",\n        \"G\"\n      ]\n    }\n  ],\n  \"variants\": [\n    {\n      \"code\": \"NEGRO-CH\",\n      \"sku\": \"PLY-001-N-CH\",\n      \"barcode\": \"7501234567890\"\n    }\n  ],\n  \"attributes\": {\n    \"MATERIAL\": \"Algodón\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener producto",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Incluye variantes con sus opciones, existencias por ubicación y precios, imágenes y atributos. Permiso: `read_products`."
          }
        },
        {
          "name": "Crear o reemplazar producto (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201`/`200`. `options` y `attributes` son declarativos; se aplica completo o nada. Ver `variants_mode: exact` en `docs/api.md`. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Playera básica\",\n  \"status\": \"active\",\n  \"category\": \"PLAYERAS\",\n  \"short_description\": \"Algodón 100 %\",\n  \"base_unit\": \"PZA\",\n  \"tax_exempt\": false,\n  \"track_inventory\": true,\n  \"options\": [\n    {\n      \"name\": \"Color\",\n      \"values\": [\n        \"Negro\",\n        \"Blanco\"\n      ]\n    },\n    {\n      \"name\": \"Talla\",\n      \"values\": [\n        \"CH\",\n        \"M\",\n        \"G\"\n      ]\n    }\n  ],\n  \"variants\": [\n    {\n      \"code\": \"NEGRO-CH\",\n      \"sku\": \"PLY-001-N-CH\",\n      \"barcode\": \"7501234567890\"\n    }\n  ],\n  \"attributes\": {\n    \"MATERIAL\": \"Algodón\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de un producto",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"archived\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar producto",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `write_products`."
          }
        },
        {
          "name": "Duplicar producto",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/:code/duplicate/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                "duplicate",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"PLY-001-COPIA\",\n  \"name\": \"Playera básica (copia)\",\n  \"copy_images\": true,\n  \"copy_prices\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Agregar o reemplazar imagen",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/:code/images/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                "images",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`multipart/form-data` con `image`, o JSON con `url` (https, sin descargarla). Con `external_key` repetida reemplaza la imagen (`200`). Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://cdn.ejemplo.com/playera.jpg\",\n  \"external_key\": \"LS-1\",\n  \"alt_text\": \"Playera negra de frente\",\n  \"variant_skus\": [\n    \"PLY-001-N-CH\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Borrar imagen por clave externa",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/:code/images/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                "images",
                ""
              ],
              "query": [
                {
                  "key": "external_key",
                  "value": "",
                  "disabled": false
                }
              ],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `write_products`."
          }
        },
        {
          "name": "Borrar imagen por id",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/:code/images/:image_id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":code",
                "images",
                ":image_id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                },
                {
                  "key": "image_id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `write_products`."
          }
        },
        {
          "name": "Listar variantes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variants/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "product",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "barcode",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Obtener variante",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variants/:sku/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants",
                ":sku",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "sku",
                  "value": "PLY-001-N-CH"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Actualizar variante",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/variants/:sku/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants",
                ":sku",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "sku",
                  "value": "PLY-001-N-CH"
                }
              ]
            },
            "description": "Solo `sku`, `barcode`, `weight`, `is_active` y `attributes`; las combinaciones salen de las opciones del producto. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"barcode\": \"7501234567890\",\n  \"is_active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar variante",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variants/:sku/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants",
                ":sku",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "sku",
                  "value": "PLY-001-N-CH"
                }
              ]
            },
            "description": "`409` si tiene pedidos (desactívala con `is_active: false`) o si es la única del producto. Permiso: `write_products`."
          }
        },
        {
          "name": "Consultar traducciones",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/translations/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "translations",
                ""
              ],
              "query": [
                {
                  "key": "object_type",
                  "value": "",
                  "disabled": false
                },
                {
                  "key": "object_key",
                  "value": "",
                  "disabled": false
                },
                {
                  "key": "language",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Guardar traducciones",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/translations/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "translations",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El idioma debe estar activo como extra en la tienda. Un valor vacío borra la traducción. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"object_type\": \"product\",\n  \"object_key\": \"PLY-001\",\n  \"language\": \"en\",\n  \"fields\": {\n    \"name\": \"Basic T-shirt\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Catálogo masivo",
      "description": "Alta masiva e importación NDJSON de productos. Permiso `products`.",
      "item": [
        {
          "name": "Alta masiva de productos (hasta 500)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/bulk/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                "bulk",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "Upsert por código, procesado por el worker. Un producto malo no tumba a los demás. Permiso: `write_products`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"items\": [\n    {\n      \"code\": \"PLY-001\",\n      \"name\": \"Playera básica\"\n    },\n    {\n      \"code\": \"PLY-002\",\n      \"name\": \"Playera estampada\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Estado y resultado de una alta masiva",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/bulk/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                "bulk",
                ":id",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Importar catálogo NDJSON (solo crea)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/import/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                "import",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "`multipart/form-data` con `file` (NDJSON, hasta 256 MB). Pensado para primeras cargas de decenas o cientos de miles de productos. Permiso: `write_products`.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": []
                }
              ]
            }
          }
        },
        {
          "name": "Estado de una importación",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/import/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                "import",
                ":id",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `read_products`."
          }
        },
        {
          "name": "Resultado completo de una importación (NDJSON)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/import/:id/rows/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                "import",
                ":id",
                "rows",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Una fila por línea (`application/x-ndjson`), en orden y sin paginar. Permiso: `read_products`."
          }
        }
      ]
    },
    {
      "name": "Inventario",
      "description": "Existencias y ubicaciones. Permiso `inventory`.",
      "item": [
        {
          "name": "Listar locations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/locations/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "locations",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_inventory`."
          }
        },
        {
          "name": "Crear la ubicación",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/locations/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "locations",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_inventory`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Centro de distribución\",\n  \"kind\": \"warehouse\",\n  \"allows_pickup\": false,\n  \"ships_orders\": true,\n  \"hours\": [\n    {\n      \"weekday\": 0,\n      \"opens\": \"09:00\",\n      \"closes\": \"18:00\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener la ubicación",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/locations/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "locations",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_inventory`."
          }
        },
        {
          "name": "Crear o reemplazar la ubicación (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/locations/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "locations",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_inventory`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Centro de distribución\",\n  \"kind\": \"warehouse\",\n  \"allows_pickup\": false,\n  \"ships_orders\": true,\n  \"hours\": [\n    {\n      \"weekday\": 0,\n      \"opens\": \"09:00\",\n      \"closes\": \"18:00\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de la ubicación",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/locations/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "locations",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_inventory`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Centro de distribución\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar la ubicación",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/locations/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "locations",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_inventory`."
          }
        },
        {
          "name": "Consultar existencias",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/inventory/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "sku",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "location",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "product",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_inventory`."
          }
        },
        {
          "name": "Fijar existencias en bloque (absolutas)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/inventory/bulk/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "bulk",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "`on_hand` es la existencia absoluta del ERP, no un ajuste. Hasta 1000 filas. Todo o nada, salvo `partial=true`. Permiso: `write_inventory`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"items\": [\n    {\n      \"sku\": \"PLY-001-N-CH\",\n      \"location\": \"CEDIS\",\n      \"on_hand\": \"12\"\n    },\n    {\n      \"sku\": \"PLY-001-N-CH\",\n      \"location\": \"TDA-CENTRO\",\n      \"on_hand\": \"3\",\n      \"reference\": \"ERP 2026-10-14\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Precios",
      "description": "Precios y listas de precios. Permiso `prices`.",
      "item": [
        {
          "name": "Listar price-lists",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/price-lists/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "price-lists",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_prices`."
          }
        },
        {
          "name": "Crear la lista de precios",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/price-lists/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "price-lists",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_prices`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Mayoreo\",\n  \"currency\": \"USD\",\n  \"prices_include_tax\": false,\n  \"priority\": 10,\n  \"customer_groups\": [\n    \"MAYORISTAS\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener la lista de precios",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/price-lists/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "price-lists",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_prices`."
          }
        },
        {
          "name": "Crear o reemplazar la lista de precios (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/price-lists/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "price-lists",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_prices`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mayoreo\",\n  \"currency\": \"USD\",\n  \"prices_include_tax\": false,\n  \"priority\": 10,\n  \"customer_groups\": [\n    \"MAYORISTAS\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de la lista de precios",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/price-lists/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "price-lists",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_prices`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mayoreo\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar la lista de precios",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/price-lists/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "price-lists",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_prices`."
          }
        },
        {
          "name": "Consultar precios",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/prices/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "prices",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "price_list",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "sku",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "product",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_prices`."
          }
        },
        {
          "name": "Fijar precios en bloque",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/prices/bulk/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "prices",
                "bulk",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "Hasta 1000 filas; `price: null` borra la línea. Todo o nada, salvo `partial=true`. Permiso: `write_prices`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"items\": [\n    {\n      \"price_list\": \"GENERAL\",\n      \"sku\": \"PLY-001-N-CH\",\n      \"price\": \"249.00\",\n      \"compare_at_price\": \"299.00\"\n    },\n    {\n      \"price_list\": \"GENERAL\",\n      \"sku\": \"PLY-001-N-CH\",\n      \"price\": \"220.00\",\n      \"min_quantity\": \"6\"\n    },\n    {\n      \"price_list\": \"MAYOREO\",\n      \"sku\": \"PLY-001-N-M\",\n      \"price\": null\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Clientes",
      "description": "Clientes y grupos de clientes. Permiso `customers`.",
      "item": [
        {
          "name": "Listar customer-groups",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customer-groups/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customer-groups",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_customers`."
          }
        },
        {
          "name": "Crear el grupo de clientes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customer-groups/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customer-groups",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "El cuerpo lleva `code`. `409`/`400` si el código ya existe. Permiso: `write_customers`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"EJEMPLO\",\n  \"name\": \"Mayoristas\",\n  \"description\": \"Compra por caja\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener el grupo de clientes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customer-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customer-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_customers`."
          }
        },
        {
          "name": "Crear o reemplazar el grupo de clientes (upsert)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customer-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customer-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`201` si lo crea, `200` si lo reemplaza. El código de la ruta manda sobre el del cuerpo. Permiso: `write_customers`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mayoristas\",\n  \"description\": \"Compra por caja\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de el grupo de clientes",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customer-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customer-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Solo los campos enviados; `404` si no existe. Permiso: `write_customers`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mayoristas\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar el grupo de clientes",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customer-groups/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customer-groups",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "`400` si otros registros dependen de este. Permiso: `write_customers`."
          }
        },
        {
          "name": "Listar clientes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customers/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "code",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "group",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_customers`."
          }
        },
        {
          "name": "Crear cliente",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "Permiso: `write_customers`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"C-100\",\n  \"first_name\": \"Carlos\",\n  \"last_name\": \"Hernández\",\n  \"company\": \"Uniformes del Bajío\",\n  \"email\": \"compras@ejemplo.com\",\n  \"phone\": \"477 555 0101\",\n  \"group\": \"MAYORISTAS\",\n  \"accepts_marketing\": false,\n  \"addresses\": [\n    {\n      \"label\": \"Matriz\",\n      \"line1\": \"Blvd. López Mateos 3401\",\n      \"city\": \"León\",\n      \"state\": \"Guanajuato\",\n      \"postal_code\": \"37160\",\n      \"country\": \"MX\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener cliente",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customers/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ":id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `read_customers`."
          }
        },
        {
          "name": "Reemplazar cliente",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ":id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "`addresses` es declarativo: si lo envías reemplaza todas las direcciones. Permiso: `write_customers`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"C-100\",\n  \"first_name\": \"Carlos\",\n  \"last_name\": \"Hernández\",\n  \"company\": \"Uniformes del Bajío\",\n  \"email\": \"compras@ejemplo.com\",\n  \"phone\": \"477 555 0101\",\n  \"group\": \"MAYORISTAS\",\n  \"accepts_marketing\": false,\n  \"addresses\": [\n    {\n      \"label\": \"Matriz\",\n      \"line1\": \"Blvd. López Mateos 3401\",\n      \"city\": \"León\",\n      \"state\": \"Guanajuato\",\n      \"postal_code\": \"37160\",\n      \"country\": \"MX\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Actualizar campos de un cliente",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ":id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `write_customers`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"477 555 0102\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Eliminar cliente",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customers/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ":id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `write_customers`."
          }
        }
      ]
    },
    {
      "name": "Pedidos",
      "description": "Pedidos, cambios de estado, pagos, devoluciones, reembolsos, paqueterías y medios de pago. Permiso `orders`.",
      "item": [
        {
          "name": "Listar pedidos",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "2026-10-14T00:00:00Z",
                  "disabled": true
                },
                {
                  "key": "number",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "payment_status",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "fulfillment_status",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "delivery_type",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "customer",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "placed_since",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Orden de alta (no por número). Para el pull del ERP usa `updated_since` o `placed_since`. Permiso: `read_orders`."
          }
        },
        {
          "name": "Crear pedido",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "`201` la primera vez; con `Idempotency-Key` repetida y los mismos datos, `200` con el mismo pedido. Rechaza (400) sin existencia o sin precio. Permiso: `write_orders`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customer_email\": \"compras@ejemplo.com\",\n  \"lines\": [\n    {\n      \"sku\": \"PLY-001-N-CH\",\n      \"quantity\": \"6\"\n    },\n    {\n      \"sku\": \"COC-002\",\n      \"quantity\": \"1\",\n      \"unit_price\": \"14.50\"\n    }\n  ],\n  \"shipping_address\": {\n    \"line1\": \"Blvd. Los Próceres 12\",\n    \"city\": \"Antiguo Cuscatlán\",\n    \"state\": \"La Libertad\",\n    \"country\": \"SV\"\n  },\n  \"location\": \"CEDIS\",\n  \"discount\": \"0\",\n  \"shipping\": \"8.00\",\n  \"notes\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Obtener pedido",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `read_orders`."
          }
        },
        {
          "name": "Registrar pago",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders/:id/pay/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "pay",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Con `Idempotency-Key` responde `200` siempre y no registra otro pago. Permiso: `write_orders`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"method\": \"transfer\",\n  \"reference\": \"T-123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Marcar como preparado / aceptado por el ERP",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/:id/prepare/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "prepare",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Deja el sello informativo `erp_accepted_at`; no libera ni descuenta existencia. Permiso: `write_orders`."
          }
        },
        {
          "name": "Marcar como enviado (descuenta existencia)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders/:id/ship/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "ship",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Con `carrier_code` calcula `tracking_url`; con `carrier` (texto) busca primero entre las paqueterías de la tienda. Permiso: `write_orders`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"carrier_code\": \"C807\",\n  \"tracking_number\": \"ABC123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Marcar listo para recoger (descuenta existencia)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/:id/ready/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "ready",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Pedidos `pickup`. Permiso: `write_orders`."
          }
        },
        {
          "name": "Marcar como entregado",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/:id/deliver/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "deliver",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Desde `shipped` o `ready_for_pickup`. Permiso: `write_orders`."
          }
        },
        {
          "name": "Cancelar pedido",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders/:id/cancel/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "cancel",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Libera lo apartado; reembolsa por el pago si ya estaba cobrado. Permiso: `write_orders`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"El cliente lo pidió\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Archivar pedido",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/:id/archive/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "archive",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Solo cancelados, entregados o reembolsados. Permiso: `write_orders`."
          }
        },
        {
          "name": "Desarchivar pedido",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/:id/unarchive/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "unarchive",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Responde con el pedido completo, o `409` si el paso no aplica. Lo regresa a como estaba. Permiso: `write_orders`."
          }
        },
        {
          "name": "Registrar devolución",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders/:id/returns/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "returns",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "`201` y luego `200` al repetir con la misma `Idempotency-Key`. Permiso: `write_orders`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"lines\": [\n    {\n      \"line_id\": \"0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f\",\n      \"quantity\": \"1\"\n    }\n  ],\n  \"reason\": \"Talla\",\n  \"restock\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Reembolsar un pago",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "disabled": true
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders/:id/refunds/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "refunds",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Síncrono: con pasarela se pide en la misma llamada y, si falla, `409` sin rastro. `200` al repetir con la misma llave. Permiso: `write_orders`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"25.00\",\n  \"reason\": \"Producto dañado\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Listar pagos del pedido",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/orders/:id/payments/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                ":id",
                "payments",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Solo lectura; cada pago trae sus `refunds`. Permiso: `read_orders`."
          }
        },
        {
          "name": "Listar paqueterías",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/carriers/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "carriers",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Solo lectura. Incluye las desactivadas. Permiso: `read_orders`."
          }
        },
        {
          "name": "Obtener paquetería",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/carriers/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "carriers",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_orders`."
          }
        },
        {
          "name": "Listar medios de pago",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/payment-methods/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "payment-methods",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Solo lectura. Incluye los desactivados. Permiso: `read_orders`."
          }
        },
        {
          "name": "Obtener medio de pago",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/payment-methods/:code/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "payment-methods",
                ":code",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "code",
                  "value": "PLY-001"
                }
              ]
            },
            "description": "Permiso: `read_orders`."
          }
        }
      ]
    },
    {
      "name": "Integraciones",
      "description": "Conexiones, corridas de sincronización y referencias externas. Permiso `integrations`.",
      "item": [
        {
          "name": "Listar conexiones",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/connections/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "connections",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Solo lectura; las conexiones se crean en el back office. Permiso: `read_integrations`."
          }
        },
        {
          "name": "Obtener conexión",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/connections/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "connections",
                ":id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `read_integrations`."
          }
        },
        {
          "name": "Listar corridas de sincronización",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/connections/:id/sync-runs/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "connections",
                ":id",
                "sync-runs",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `read_integrations`."
          }
        },
        {
          "name": "Reportar una corrida de sincronización",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/connections/:id/sync-runs/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "connections",
                ":id",
                "sync-runs",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Actualiza `last_sync_at` de la conexión a `finished_at` (nunca lo retrocede; una corrida `failed` no lo mueve). Permiso: `write_integrations`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"inventory\",\n  \"started_at\": \"2026-10-17T10:00:00Z\",\n  \"finished_at\": \"2026-10-17T10:05:00Z\",\n  \"records\": 1200,\n  \"errors\": 3,\n  \"message\": \"3 SKU sin variante\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Buscar referencias externas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external-references/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external-references",
                ""
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true
                },
                {
                  "key": "connection",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "object_type",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "object_key",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "external_id",
                  "value": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Permiso: `read_integrations`."
          }
        },
        {
          "name": "Guardar referencia externa (upsert)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/external-references/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external-references",
                ""
              ],
              "query": [],
              "variable": []
            },
            "description": "Upsert por (conexión, registro local): `201` si crea, `200` si actualiza. Un `external_id` no puede ligarse a dos registros. Permiso: `write_integrations`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"connection\": \"0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f\",\n  \"object_type\": \"product\",\n  \"object_key\": \"PLY-001\",\n  \"external_id\": \"5c2e0000-0000-0000-0000-000000000000\",\n  \"external_code\": \"1000\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Borrar referencia externa",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/external-references/:id/",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "external-references",
                ":id",
                ""
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "0192f3a4-6b1c-7d2e-9f00-1a2b3c4d5e6f"
                }
              ]
            },
            "description": "Permiso: `write_integrations`."
          }
        }
      ]
    }
  ]
}
