{
  "info": {
    "_postman_id": "943331f3-72c9-57b8-beb2-6d211c149a5a",
    "name": "Posdata API 1.0.0",
    "description": "Colección generada del contrato OpenAPI de la API pública de Posdata.\nDocumentación: https://developers.posdata.so · Contrato: https://api.posdata.so/public/v1/openapi.json\n\nCómo usarla: importa también los ambientes (Producción y Pruebas), elige uno y pon tu API key en la variable secreta api_key.\nEmpieza en Pruebas (keys pdk_test_). Cada POST recibe un Idempotency-Key nuevo del script de la colección.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_key}}",
        "type": "string"
      }
    ]
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Posdata exige Idempotency-Key en todo POST. Si la petición no trae uno activo, se agrega uno nuevo ({{$guid}}).",
          "// Para reintentar la MISMA operación, activa el header Idempotency-Key de la petición y fija su valor.",
          "if (pm.request.method === 'POST' && !pm.request.headers.has('Idempotency-Key')) {",
          "  pm.request.headers.add({ key: 'Idempotency-Key', value: pm.variables.replaceIn('{{$guid}}') });",
          "}"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "base_url",
      "value": "https://apidev.posdata.so/public/v1",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Cuenta",
      "item": [
        {
          "name": "Cuenta, API key y frescura de los datos",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/me",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "me"
              ]
            },
            "description": "Cualquier API key válida.\n\nReferencia: https://developers.posdata.so/referencia/operations/getme/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Productos",
      "item": [
        {
          "name": "Listar productos",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "active",
                  "value": "",
                  "description": "Solo activos (`true`) o inactivos (`false`).",
                  "disabled": true
                },
                {
                  "key": "category_id",
                  "value": "",
                  "description": "Productos de esa categoría.",
                  "disabled": true
                },
                {
                  "key": "sku",
                  "value": "",
                  "description": "Coincidencia exacta con el SKU del producto o de cualquiera de sus variantes.",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "",
                  "description": "Busca en el nombre (sin distinguir mayúsculas).",
                  "disabled": true
                },
                {
                  "key": "include_deleted",
                  "value": "",
                  "description": "Si es `true`, incluye los registros eliminados (con `deleted_at`).",
                  "disabled": true
                }
              ]
            },
            "description": "Productos con sus variantes, del más reciente al más antiguo.\n\nPermiso requerido: `products:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listproducts/"
          },
          "response": []
        },
        {
          "name": "Crear producto",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "disabled": true,
                "description": "Lo agrega el script de la colección con un valor nuevo. Actívalo y fija un valor solo para reintentar la misma operación."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Café molido 500 g\",\n  \"base_price\": 25900\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Crea un producto sin variantes. Con `initial_stock` registra además un movimiento de entrada en la bodega indicada. El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `products:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/createproduct/"
          },
          "response": []
        },
        {
          "name": "Obtener un producto",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":id"
              ],
              "query": [
                {
                  "key": "include_deleted",
                  "value": "",
                  "description": "Si es `true`, incluye los registros eliminados (con `deleted_at`).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `products:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getproduct/"
          },
          "response": []
        },
        {
          "name": "Editar producto",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Café molido 500 g\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Cambia nombre, precios, categoría, SKU, clase fiscal o estado. El cambio viaja a las cajas SIN stock, unidad ni tipo: cada caja conserva los suyos, así que nunca toca el inventario. Requiere que todas las cajas del negocio tengan la versión de Posdata que lo soporta; si alguna no la tiene responde 409 DEVICES_OUTDATED con la lista y no modifica nada. El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `products:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/updateproduct/"
          },
          "response": []
        },
        {
          "name": "Listar categorías",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/categories?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "include_deleted",
                  "value": "",
                  "description": "Si es `true`, incluye los registros eliminados (con `deleted_at`).",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `products:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listcategories/"
          },
          "response": []
        },
        {
          "name": "Crear categoría",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "disabled": true,
                "description": "Lo agrega el script de la colección con un valor nuevo. Actívalo y fija un valor solo para reintentar la misma operación."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Café molido 500 g\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `products:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/createcategory/"
          },
          "response": []
        },
        {
          "name": "Obtener una categoría",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/categories/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ":id"
              ],
              "query": [
                {
                  "key": "include_deleted",
                  "value": "",
                  "description": "Si es `true`, incluye los registros eliminados (con `deleted_at`).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `products:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getcategory/"
          },
          "response": []
        },
        {
          "name": "Editar categoría",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Café molido 500 g\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `products:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/updatecategory/"
          },
          "response": []
        },
        {
          "name": "Editar variante",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/products/:id/variants/:variantId",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                ":id",
                "variants",
                ":variantId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                },
                {
                  "key": "variantId",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"texto\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Cambia etiqueta, SKU, precios o estado de una variante (nunca su stock). Responde el producto completo. Misma condición de versión de las cajas que editar un producto (409 DEVICES_OUTDATED). El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `products:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/updatevariant/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Clientes",
      "item": [
        {
          "name": "Listar clientes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customers?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "",
                  "description": "Coincidencia exacta, sin distinguir mayúsculas.",
                  "disabled": true
                },
                {
                  "key": "document_number",
                  "value": "",
                  "description": "Número de documento, coincidencia exacta.",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "",
                  "description": "Busca en nombre, apellido, email, teléfono y documento.",
                  "disabled": true
                },
                {
                  "key": "include_deleted",
                  "value": "",
                  "description": "Si es `true`, incluye los registros eliminados (con `deleted_at`).",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `customers:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listcustomers/"
          },
          "response": []
        },
        {
          "name": "Crear cliente",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "disabled": true,
                "description": "Lo agrega el script de la colección con un valor nuevo. Actívalo y fija un valor solo para reintentar la misma operación."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Café molido 500 g\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `customers:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/createcustomer/"
          },
          "response": []
        },
        {
          "name": "Obtener un cliente",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/customers/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ":id"
              ],
              "query": [
                {
                  "key": "include_deleted",
                  "value": "",
                  "description": "Si es `true`, incluye los registros eliminados (con `deleted_at`).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `customers:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getcustomer/"
          },
          "response": []
        },
        {
          "name": "Editar cliente",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Café molido 500 g\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `customers:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/updatecustomer/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Inventario",
      "item": [
        {
          "name": "Listar bodegas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/warehouses?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "warehouses"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `inventory:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listwarehouses/"
          },
          "response": []
        },
        {
          "name": "Obtener una bodega",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/warehouses/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "warehouses",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `inventory:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getwarehouse/"
          },
          "response": []
        },
        {
          "name": "Listar movimientos de inventario",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/inventory/movements?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "movements"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "product_id",
                  "value": "",
                  "description": "Movimientos de ese producto.",
                  "disabled": true
                },
                {
                  "key": "warehouse_id",
                  "value": "",
                  "description": "Movimientos de esa bodega.",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "Tipo de movimiento, coincidencia exacta.",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `inventory:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/liststockmovements/"
          },
          "response": []
        },
        {
          "name": "Registrar movimiento de stock",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "disabled": true,
                "description": "Lo agrega el script de la colección con un valor nuevo. Actívalo y fija un valor solo para reintentar la misma operación."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/inventory/movements",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "movements"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"product_id\": \"3f1c2e8d-7a10-4d0b-9a57-0b6f2f0e5c1d\",\n  \"type\": \"in\",\n  \"quantity\": 5\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Suma (`in`) o resta (`out`) stock de un producto o de una de sus variantes (`variant_id`). Una salida `out` es atómica: nunca compromete las últimas unidades que el negocio reserva para sus cajas (el margen de la API, 2 por defecto, se ajusta en cuenta.posdata.so → Inventario → Configuración). Si no alcanza responde 409 INSUFFICIENT_STOCK con `available` (lo que sí puedes sacar) y no registra nada; con varias peticiones a la vez por la última unidad, solo una gana. Una entrada `in` no tiene tope y puede declarar su costo (`unit_cost`), que alimenta el costo promedio de la cuenta. Los productos que se arman con receta y los packs o combos no tienen stock propio (COMPOSITE_STOCK_UNSUPPORTED). Mientras la cuenta no haya pasado al stock en la nube (las cajas aún en una versión anterior), el stock de variantes responde 409 STOCK_MODE_LEGACY. El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).\n\nPermiso requerido: `inventory:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/createstockmovement/"
          },
          "response": []
        },
        {
          "name": "Listar el stock por bodega",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/inventory/levels?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "levels"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "product_id",
                  "value": "",
                  "description": "Niveles de ese producto.",
                  "disabled": true
                },
                {
                  "key": "variant_id",
                  "value": "",
                  "description": "Niveles de esa variante.",
                  "disabled": true
                },
                {
                  "key": "warehouse_id",
                  "value": "",
                  "description": "Niveles de esa bodega.",
                  "disabled": true
                }
              ]
            },
            "description": "Stock oficial por (bodega, producto, variante) y lo que la API puede comprometer (`available`). Solo cuando la cuenta lleva el stock en la nube (todas sus cajas con la versión nueva de Posdata); antes responde 409 STOCK_MODE_LEGACY.\n\nPermiso requerido: `inventory:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/liststocklevels/"
          },
          "response": []
        },
        {
          "name": "Obtener un movimiento de inventario",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/inventory/movements/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "movements",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `inventory:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getstockmovement/"
          },
          "response": []
        },
        {
          "name": "Registrar un conteo de inventario",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "disabled": true,
                "description": "Lo agrega el script de la colección con un valor nuevo. Actívalo y fija un valor solo para reintentar la misma operación."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/inventory/counts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "counts"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"product_id\": \"3f1c2e8d-7a10-4d0b-9a57-0b6f2f0e5c1d\",\n  \"counted_quantity\": 5\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Registra lo que hay físicamente en una bodega en un instante (`counted_at`): el stock oficial pasa a ser esa cantidad y las ventas ocurridas después del conteo se suman encima, nunca se pierden. Un conteo más viejo que el último registrado queda solo como historial (`status: historical`). Solo cuando la cuenta ya lleva el stock en la nube; si no, 409 STOCK_MODE_LEGACY. Emite el webhook `inventory.count.created`.\n\nPermiso requerido: `inventory:write`.\n\nReferencia: https://developers.posdata.so/referencia/operations/createstockcount/"
          },
          "response": []
        },
        {
          "name": "Kardex de un producto",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/inventory/kardex",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "kardex"
              ],
              "query": [
                {
                  "key": "product_id",
                  "value": "",
                  "description": "El producto (obligatorio).",
                  "disabled": true
                },
                {
                  "key": "warehouse_id",
                  "value": "",
                  "description": "Solo las filas de esa bodega (el saldo total sigue siendo el del producto).",
                  "disabled": true
                },
                {
                  "key": "variant_id",
                  "value": "",
                  "description": "Solo las filas de esa variante.",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "Desde (instante ISO 8601 con zona). Los saldos ya incluyen lo anterior.",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "Hasta (instante ISO 8601 con zona).",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "Solo ese tipo de fila.",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "",
                  "description": "Orden cronológico.",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "",
                  "description": "Página (empieza en 1).",
                  "disabled": true
                },
                {
                  "key": "page_size",
                  "value": "",
                  "description": "Filas por página (máximo 200).",
                  "disabled": true
                }
              ]
            },
            "description": "El libro de un producto con saldo corrido; con `inventory:costs` también el costo y el valor. Solo cuando la cuenta lleva el stock en la nube (todas sus cajas con la versión nueva de Posdata); antes responde 409 STOCK_MODE_LEGACY.\n\nPermiso requerido: `inventory:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getinventorykardex/"
          },
          "response": []
        },
        {
          "name": "Valor del inventario",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/inventory/valuation",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "inventory",
                "valuation"
              ],
              "query": [
                {
                  "key": "at",
                  "value": "",
                  "description": "La fecha de corte (instante ISO 8601 con zona). Por defecto, ahora.",
                  "disabled": true
                },
                {
                  "key": "warehouse_id",
                  "value": "",
                  "description": "Solo esa bodega.",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "",
                  "description": "Página (empieza en 1).",
                  "disabled": true
                },
                {
                  "key": "page_size",
                  "value": "",
                  "description": "Filas por página (máximo 200).",
                  "disabled": true
                }
              ]
            },
            "description": "El valor del inventario hoy o a una fecha pasada. Solo cuando la cuenta lleva el stock en la nube (todas sus cajas con la versión nueva de Posdata); antes responde 409 STOCK_MODE_LEGACY.\n\nPermiso requerido: `inventory:costs`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getinventoryvaluation/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Ventas",
      "item": [
        {
          "name": "Listar ventas",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/sales?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "sales"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Estado exacto, por ejemplo `completed`.",
                  "disabled": true
                },
                {
                  "key": "customer_id",
                  "value": "",
                  "description": "Ventas de ese cliente.",
                  "disabled": true
                },
                {
                  "key": "document_kind",
                  "value": "",
                  "description": "Tipo de documento pedido.",
                  "disabled": true
                },
                {
                  "key": "occurred_since",
                  "value": "",
                  "description": "Ventas registradas en la caja desde este instante (incluye). ISO 8601 con zona horaria.",
                  "disabled": true
                },
                {
                  "key": "occurred_until",
                  "value": "",
                  "description": "Ventas registradas en la caja antes de este instante (excluye).",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `sales:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listsales/"
          },
          "response": []
        },
        {
          "name": "Obtener una venta",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/sales/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "sales",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `sales:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getsale/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Facturación",
      "item": [
        {
          "name": "Listar documentos",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/invoices?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "invoices"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "sale_id",
                  "value": "",
                  "description": "Documentos de esa venta.",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Estado exacto.",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `invoices:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listinvoices/"
          },
          "response": []
        },
        {
          "name": "Obtener un documento",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/invoices/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "invoices",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `invoices:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getinvoice/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Cotizaciones",
      "item": [
        {
          "name": "Listar cotizaciones",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/quotes?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "quotes"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Estado exacto.",
                  "disabled": true
                },
                {
                  "key": "customer_id",
                  "value": "",
                  "description": "Cotizaciones de ese cliente.",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `quotes:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listquotes/"
          },
          "response": []
        },
        {
          "name": "Obtener una cotización",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/quotes/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "quotes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `quotes:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getquote/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Caja",
      "item": [
        {
          "name": "Listar turnos de caja",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/cash-sessions?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "cash-sessions"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Para sincronización incremental.",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "open, closed o suspended.",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `cash:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listcashsessions/"
          },
          "response": []
        },
        {
          "name": "Obtener un turno de caja",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/cash-sessions/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "cash-sessions",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `cash:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getcashsession/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Reportes",
      "item": [
        {
          "name": "Ventas por día",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/daily-sales",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "daily-sales"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "Primer día (YYYY-MM-DD), inclusive.",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "Último día (YYYY-MM-DD), inclusive.",
                  "disabled": true
                }
              ]
            },
            "description": "Solo ventas con estado `completed`. Rango inclusivo de hasta 92 días.\n\nPermiso requerido: `reports:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getdailysales/"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Eventos",
      "item": [
        {
          "name": "Listar eventos",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/events?limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "events"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "starting_after",
                  "value": "",
                  "description": "El `next_cursor` de la página anterior, tal cual.",
                  "disabled": true
                },
                {
                  "key": "created_since",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Incluye.",
                  "disabled": true
                },
                {
                  "key": "created_until",
                  "value": "",
                  "description": "ISO 8601 con zona horaria. Excluye.",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "Tipo exacto, por ejemplo `sale.completed`.",
                  "disabled": true
                }
              ]
            },
            "description": "Permiso requerido: `events:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/listevents/"
          },
          "response": []
        },
        {
          "name": "Obtener un evento",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/events/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "events",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "El id (uuid)."
                }
              ]
            },
            "description": "Permiso requerido: `events:read`.\n\nReferencia: https://developers.posdata.so/referencia/operations/getevent/"
          },
          "response": []
        }
      ]
    }
  ]
}
