{
  "info": {
    "_postman_id": "aae076ef-c647-56ae-837f-74786917a657",
    "name": "YoFacturo — API pública",
    "description": "Toda la API de YoFacturo alcanzable con un **API token** (`yf_live_*`), agrupada por dominio de negocio.\n\n### Antes de empezar\n1. Generá un API token desde el panel: **Configuración → Integraciones → API Tokens**. Se muestra UNA sola vez.\n2. Pegalo en la variable de colección `token`. La colección autentica con el header `X-API-Key: {{token}}` en todas las requests.\n3. La variable `base` ya apunta a `https://api.yo-facturo.com/api/v1`.\n4. El token sólo puede lo que sus **scopes** permiten. Cada request documenta el scope que necesita; si te falta, la API responde **403**.\n\n### Cómo está armada\n- Sólo hay endpoints que funcionan **con un API token**. Todo lo que es exclusivo de la sesión web (JWT) quedó afuera a propósito: en Postman con un token daría 401 y sólo genera ruido.\n- Un carpeta por dominio (Catálogo, Ventas, Facturación, Compras, Clientes, Operaciones, Contabilidad) y una subcarpeta por recurso.\n- Las requests de detalle usan **variables de path** (`:customer_id`, `:sale_id`, …). Corré primero el `Listar` de esa carpeta: un script de test guarda el `id` del primer resultado en la variable de colección correspondiente y las demás requests de la carpeta quedan listas.\n\n### Cosas que hay que saber sí o sí\n- **Los ids de las rutas son el `id` (UUID) del recurso, no el `_id` de Mongo.**\n- **El POST de emisión NO devuelve el CAE**: vuelve con `authorization_pending: true` y el comprobante en `pendiente`. Hay que releer el comprobante hasta que aparezca el `cae`. Si necesitás el CAE en la misma respuesta, usá el flujo de dos pasos (`autorizar: false` + `POST /bill/receipts/authorize/{id}/`), que es sincrónico.\n- **Mandá `X-Idempotency-Key`** en toda emisión: si se corta la red y reintentás, te devuelve el mismo comprobante en vez de emitir uno duplicado.\n- **Las notas de crédito/débito usan `comprobante_asociado_id`** (el UUID del comprobante), no `comprobantes_asociados`.\n- El listado general (`/list/`) devuelve `{ success, data: { items, page, per_page, total, total_pages }, _links }`.\n- Límite de frecuencia compartido por cuenta: 10/s · 100/min · 3000/h · 20000/día. Ante un **429**, esperá y reintentá.\n\nDocumentación completa: https://yo-facturo.com/dev/",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{token}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "0 · Empezá acá",
      "id": "1f3a772c-4de6-59f9-8805-6bcb6f9040bb",
      "description": "Dos llamadas para verificar que el token funciona y en qué entorno de AFIP está la cuenta antes de tocar nada más.",
      "item": [
        {
          "name": "Datos fiscales (confirmar entorno)",
          "id": "5c2c514f-8839-5741-854d-0babcecd1e4f",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base}}/bill/tax_info/taxpayer/",
              "host": [
                "{{base}}"
              ],
              "path": [
                "bill",
                "tax_info",
                "taxpayer",
                ""
              ]
            },
            "description": "Mirá `afip_environment`: `testing` es homologación (sin validez fiscal, ideal mientras integrás) y `production` es producción real.\n\n**`GET /api/v1/bill/tax_info/taxpayer/`** · **Scope requerido:** `accounting:read`"
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const d = pm.response.json().data || {};",
                  "console.log('entorno:', d.afip_environment, '| CUIT:', d.tax_id);",
                  "pm.test('el token autentica (200)', function () { pm.response.to.have.status(200); });"
                ]
              }
            }
          ]
        },
        {
          "name": "Primera llamada (listar productos)",
          "id": "9b5d0442-6d48-533b-802e-4ad89bf04f85",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base}}/products/list/?per_page=5",
              "host": [
                "{{base}}"
              ],
              "path": [
                "products",
                "list",
                ""
              ],
              "query": [
                {
                  "key": "per_page",
                  "value": "5"
                }
              ]
            },
            "description": "La llamada mínima de la documentación. Si responde 200, el token y el scope `products:read` están bien.\n\n**`GET /api/v1/products/list/`** · **Scope requerido:** `products:read`"
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                  "const d = pm.response.json().data || {};",
                  "console.log('productos en la cuenta:', d.total);"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Catálogo",
      "id": "0adccc52-5512-502a-87f4-ec1f23ae5f7c",
      "description": "Productos, servicios, alquileres, categorías, insumos y promociones: lo que vendés y con qué lo producís.",
      "item": [
        {
          "name": "Productos",
          "id": "2aef1389-20ea-5221-82fa-18c00f805003",
          "description": "`/api/v1/products` · 11 endpoints · scopes: `products:read`, `products:write`",
          "item": [
            {
              "name": "Listar productos",
              "id": "30220cec-4330-51cf-80f7-da1bbd6db530",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/products/list/`**\n\n**Scope requerido:** `products:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('product_id', items[0].id);",
                      "  console.log('product_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener producto",
              "id": "4a7093c6-0ed8-5d2b-814e-647cdaf3b2d5",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/:product_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    ":product_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "product_id",
                      "value": "{{product_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/products/{product_id}/`**\n\n**Scope requerido:** `products:read`\n\n**Variables de path:**\n- `:product_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear producto",
              "id": "5e085127-eaa8-5523-8040-4c1e1af6a9be",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    ""
                  ]
                },
                "description": "Create a new product with proper variants handling\n\n**`POST /api/v1/products/`**\n\n**Scope requerido:** `products:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Producto de prueba\",\n  \"description\": \"Creado desde Postman\",\n  \"base_price\": 1500,\n  \"status\": \"published\",\n  \"track_stock\": true,\n  \"total_stock\": 10\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar producto",
              "id": "a03ab2e8-a575-5c94-8cb5-6a306d167c6a",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/:product_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    ":product_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "product_id",
                      "value": "{{product_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/products/{product_id}/`**\n\n**Scope requerido:** `products:write`\n\n**Variables de path:**\n- `:product_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"attributes\": {},\n  \"barcode\": \"\",\n  \"base_price\": 0,\n  \"brand\": \"\",\n  \"category_id\": \"\",\n  \"cost\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar producto",
              "id": "f593bdd3-6ede-573b-8680-8d842e2734e1",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/:product_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    ":product_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "product_id",
                      "value": "{{product_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/products/{product_id}/`**\n\n**Scope requerido:** `products:write`\n\n**Variables de path:**\n- `:product_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "ebcc4a03-110c-5b98-8a42-81a2b33b6dcd",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/products/tags/`**\n\n**Scope requerido:** `products:read`"
              }
            },
            {
              "name": "export/scale/",
              "id": "c11fd95f-b591-57a2-8b49-2879bf8cbf4d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/export/scale/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "export",
                    "scale",
                    ""
                  ]
                },
                "description": "Export weighable products (sold_by_weight=True) in the format expected by\n\n**`GET /api/v1/products/export/scale/`**\n\n**Scope requerido:** `products:read`"
              }
            },
            {
              "name": "Alta masiva de productos (alias obsoleto)",
              "id": "814f3a1a-de38-57ee-82f0-9ba6f48e60af",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "batch-create",
                    ""
                  ]
                },
                "description": "Create multiple products in a single request.\n\n**`POST /api/v1/products/batch-create/`**\n\n**Scope requerido:** `products:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {\n      \"name\": \"Producto de prueba\",\n      \"description\": \"Creado desde Postman\",\n      \"base_price\": 1500,\n      \"status\": \"published\",\n      \"track_stock\": true,\n      \"total_stock\": 10\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de productos",
              "id": "71b044da-23e5-5ae7-8353-e42e86a25e7d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/products/bulk/create/`**\n\n**Scope requerido:** `products:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {\n      \"name\": \"Producto de prueba\",\n      \"description\": \"Creado desde Postman\",\n      \"base_price\": 1500,\n      \"status\": \"published\",\n      \"track_stock\": true,\n      \"total_stock\": 10\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de productos",
              "id": "c23e7c36-e7d6-57dd-8305-50bf7b394400",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/products/bulk/delete/`**\n\n**Scope requerido:** `products:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de productos",
              "id": "369ee9ad-25eb-55e1-8673-0f3e9456a54c",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/products/bulk/update/`**\n\n**Scope requerido:** `products:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Opciones de producto",
          "id": "36106289-f275-5ef9-8534-49377b661477",
          "description": "`/api/v1/products/options` · 10 endpoints · scopes: `product_options:read`, `product_options:write`",
          "item": [
            {
              "name": "Listar opciones",
              "id": "f977139e-026f-5be7-8c43-aa4b7e380e92",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/options/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/products/options/list/`**\n\n**Scope requerido:** `product_options:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('products_option_id', items[0].id);",
                      "  console.log('products_option_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener opción",
              "id": "12bb570c-b1fd-5426-8849-e42304ce4eef",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/options/:products_option_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    ":products_option_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "products_option_id",
                      "value": "{{products_option_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/products/options/{products_option_id}/`**\n\n**Scope requerido:** `product_options:read`\n\n**Variables de path:**\n- `:products_option_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear opción",
              "id": "eea61786-0ab1-5f7e-887a-b6e95db63b9e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/options/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/products/options/`**\n\n**Scope requerido:** `product_options:write`\n\n**Campos requeridos:** `name`, `option_type`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\",\n  \"option_type\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar opción",
              "id": "802b888e-5428-5697-8112-c2aff4ad9ecc",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/options/:products_option_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    ":products_option_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "products_option_id",
                      "value": "{{products_option_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/products/options/{products_option_id}/`**\n\n**Scope requerido:** `product_options:write`\n\n**Variables de path:**\n- `:products_option_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"affects_price\": false,\n  \"affects_stock\": false,\n  \"description\": \"\",\n  \"display_name\": \"\",\n  \"is_active\": false,\n  \"is_required\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar opción",
              "id": "b4c8ff39-ad4a-56ac-85b5-8cfa61759b5e",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/options/:products_option_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    ":products_option_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "products_option_id",
                      "value": "{{products_option_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/products/options/{products_option_id}/`**\n\n**Scope requerido:** `product_options:write`\n\n**Variables de path:**\n- `:products_option_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "bd910853-76f5-5483-8fd1-15ad0abf163d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/options/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/products/options/tags/`**\n\n**Scope requerido:** `product_options:read`"
              }
            },
            {
              "name": "Alta masiva de opciones (alias obsoleto)",
              "id": "33da425e-eb71-5707-8eb8-310f6975f887",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/options/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/products/options/batch-create/`**\n\n**Scope requerido:** `product_options:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de opciones",
              "id": "df751294-6577-5a5f-820b-97db6b061aea",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/options/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/products/options/bulk/create/`**\n\n**Scope requerido:** `product_options:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de opciones",
              "id": "aa3838da-db74-5aa9-8f14-d7bb6fa97b4e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/options/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/products/options/bulk/delete/`**\n\n**Scope requerido:** `product_options:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de opciones",
              "id": "9a5aa084-c6af-5701-8214-e579c690e142",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/options/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "options",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/products/options/bulk/update/`**\n\n**Scope requerido:** `product_options:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Perfiles de precio",
          "id": "f59f5a69-d9bf-524f-8a38-fa7b3ff77411",
          "description": "`/api/v1/products/pricing-profiles` · 10 endpoints · scopes: `pricing_profiles:read`, `pricing_profiles:write`",
          "item": [
            {
              "name": "Listar perfiles",
              "id": "4f557cd0-c70a-5d0f-846b-32748735b65b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/products/pricing-profiles/list/`**\n\n**Scope requerido:** `pricing_profiles:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('pricing_profile_id', items[0].id);",
                      "  console.log('pricing_profile_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener perfil",
              "id": "66d16a3c-231e-5569-8d70-e33dfca7c90a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/:pricing_profile_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    ":pricing_profile_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "pricing_profile_id",
                      "value": "{{pricing_profile_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/products/pricing-profiles/{pricing_profile_id}/`**\n\n**Scope requerido:** `pricing_profiles:read`\n\n**Variables de path:**\n- `:pricing_profile_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear perfil",
              "id": "90f00ba4-151b-528a-8538-a1789b30c33b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/products/pricing-profiles/`**\n\n**Scope requerido:** `pricing_profiles:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar perfil",
              "id": "283899de-1506-5198-8f87-717626fa9e16",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/:pricing_profile_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    ":pricing_profile_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "pricing_profile_id",
                      "value": "{{pricing_profile_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/products/pricing-profiles/{pricing_profile_id}/`**\n\n**Scope requerido:** `pricing_profiles:write`\n\n**Variables de path:**\n- `:pricing_profile_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar perfil",
              "id": "f2989304-9e1f-5a44-8114-662d77724a3e",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/:pricing_profile_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    ":pricing_profile_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "pricing_profile_id",
                      "value": "{{pricing_profile_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/products/pricing-profiles/{pricing_profile_id}/`**\n\n**Scope requerido:** `pricing_profiles:write`\n\n**Variables de path:**\n- `:pricing_profile_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "09eaa9aa-bb89-5960-82b0-18bc6efaa85a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/products/pricing-profiles/tags/`**\n\n**Scope requerido:** `pricing_profiles:read`"
              }
            },
            {
              "name": "Alta masiva de perfiles (alias obsoleto)",
              "id": "ecc6f352-f8a0-5c46-8e94-51cf1865130b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/products/pricing-profiles/batch-create/`**\n\n**Scope requerido:** `pricing_profiles:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de perfiles",
              "id": "dc58ad8e-5ca8-59fd-8c73-212b127e5361",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/products/pricing-profiles/bulk/create/`**\n\n**Scope requerido:** `pricing_profiles:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de perfiles",
              "id": "a0bf0029-858a-5934-8001-9c147b9883c6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/products/pricing-profiles/bulk/delete/`**\n\n**Scope requerido:** `pricing_profiles:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de perfiles",
              "id": "e09f7733-4df0-53ec-8d71-a0f393c4bf3e",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/products/pricing-profiles/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "products",
                    "pricing-profiles",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/products/pricing-profiles/bulk/update/`**\n\n**Scope requerido:** `pricing_profiles:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Categorías",
          "id": "b377433a-6bd5-5627-8c1d-c43aaa95f5e3",
          "description": "`/api/v1/categories` · 10 endpoints · scopes: `categories:read`, `categories:write`",
          "item": [
            {
              "name": "Listar categorías",
              "id": "f0ec5b3e-a005-5634-872b-61052ef75f0b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/categories/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/categories/list/`**\n\n**Scope requerido:** `categories:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('category_id', items[0].id);",
                      "  console.log('category_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener categoría",
              "id": "a0a3106e-3079-5faa-8368-e81c5ae7e7ad",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/categories/:category_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    ":category_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "category_id",
                      "value": "{{category_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/categories/{category_id}/`**\n\n**Scope requerido:** `categories:read`\n\n**Variables de path:**\n- `:category_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear categoría",
              "id": "818617c8-6f79-5fd0-87bf-742a44aff57d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/categories/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/categories/`**\n\n**Scope requerido:** `categories:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar categoría",
              "id": "b01d5d65-72be-51a9-8234-bdc8031575e7",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/categories/:category_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    ":category_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "category_id",
                      "value": "{{category_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/categories/{category_id}/`**\n\n**Scope requerido:** `categories:write`\n\n**Variables de path:**\n- `:category_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"description\": \"\",\n  \"icon\": \"\",\n  \"image\": \"\",\n  \"is_featured\": false,\n  \"meta_description\": \"\",\n  \"meta_keywords\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar categoría",
              "id": "45a2541a-4ad1-5da2-804c-ec723a5c4255",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/categories/:category_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    ":category_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "category_id",
                      "value": "{{category_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/categories/{category_id}/`**\n\n**Scope requerido:** `categories:write`\n\n**Variables de path:**\n- `:category_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "a4d20776-25bd-5b01-8235-b11d50de3149",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/categories/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/categories/tags/`**\n\n**Scope requerido:** `categories:read`"
              }
            },
            {
              "name": "Alta masiva de categorías (alias obsoleto)",
              "id": "40d43b0b-af20-5750-8039-14be54908aef",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/categories/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/categories/batch-create/`**\n\n**Scope requerido:** `categories:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de categorías",
              "id": "16a9677f-b67a-5f16-86e9-560822ebc4b2",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/categories/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/categories/bulk/create/`**\n\n**Scope requerido:** `categories:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de categorías",
              "id": "caa75cb0-f360-54e1-811b-eff75fa2cddf",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/categories/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/categories/bulk/delete/`**\n\n**Scope requerido:** `categories:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de categorías",
              "id": "35b70799-db02-5137-844c-d51481b56215",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/categories/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "categories",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/categories/bulk/update/`**\n\n**Scope requerido:** `categories:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Servicios",
          "id": "1c660305-33c2-5ccf-8866-9a6d02794bfb",
          "description": "`/api/v1/services` · 10 endpoints · scopes: `services:read`, `services:write`",
          "item": [
            {
              "name": "Listar servicios",
              "id": "49a476d6-9d9a-52bc-8581-9400bf93c13a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/services/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/services/list/`**\n\n**Scope requerido:** `services:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('service_id', items[0].id);",
                      "  console.log('service_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener servicio",
              "id": "8c64c7c5-5a00-52de-8ee2-311ee89df77d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/services/:service_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    ":service_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "service_id",
                      "value": "{{service_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/services/{service_id}/`**\n\n**Scope requerido:** `services:read`\n\n**Variables de path:**\n- `:service_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear servicio",
              "id": "73dc8e39-af74-5223-8d07-6156e22072c7",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/services/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/services/`**\n\n**Scope requerido:** `services:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar servicio",
              "id": "ae1e6d49-b723-59ee-8f25-e7ea70456e2b",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/services/:service_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    ":service_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "service_id",
                      "value": "{{service_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/services/{service_id}/`**\n\n**Scope requerido:** `services:write`\n\n**Variables de path:**\n- `:service_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"advance_booking_days\": 0,\n  \"availability\": {},\n  \"base_price\": 0,\n  \"booking_required\": false,\n  \"category_id\": \"\",\n  \"default_contract_template_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar servicio",
              "id": "549fb4df-2d32-5029-89db-625317118983",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/services/:service_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    ":service_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "service_id",
                      "value": "{{service_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/services/{service_id}/`**\n\n**Scope requerido:** `services:write`\n\n**Variables de path:**\n- `:service_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "b8ac3103-ff27-586d-8ac2-f2eaf1f44b48",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/services/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/services/tags/`**\n\n**Scope requerido:** `services:read`"
              }
            },
            {
              "name": "Alta masiva de servicios (alias obsoleto)",
              "id": "c220d774-d3b1-54b8-855d-70243f7c080f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/services/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/services/batch-create/`**\n\n**Scope requerido:** `services:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de servicios",
              "id": "7f08ca14-b724-593c-83da-402400dbb51e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/services/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/services/bulk/create/`**\n\n**Scope requerido:** `services:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de servicios",
              "id": "7764d665-4a6b-5905-8ef0-8fff510e6e03",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/services/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/services/bulk/delete/`**\n\n**Scope requerido:** `services:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de servicios",
              "id": "07dea314-489d-5e81-8d94-40f89a22d438",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/services/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "services",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/services/bulk/update/`**\n\n**Scope requerido:** `services:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Alquileres",
          "id": "d78dcfb1-0a42-57ad-89fd-724f92b36b74",
          "description": "`/api/v1/rentals` · 10 endpoints · scopes: `rentals:read`, `rentals:write`",
          "item": [
            {
              "name": "Listar alquileres",
              "id": "3a59bc4c-e825-52bc-8e52-54eb0553742b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/rentals/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/rentals/list/`**\n\n**Scope requerido:** `rentals:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('rental_id', items[0].id);",
                      "  console.log('rental_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener alquiler",
              "id": "5334e288-b61c-5582-8e0c-ea34737bb067",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/rentals/:rental_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    ":rental_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rental_id",
                      "value": "{{rental_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/rentals/{rental_id}/`**\n\n**Scope requerido:** `rentals:read`\n\n**Variables de path:**\n- `:rental_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear alquiler",
              "id": "3f178903-c3e4-5ed7-8892-ee258ae4b38d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rentals/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/rentals/`**\n\n**Scope requerido:** `rentals:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar alquiler",
              "id": "8552a14b-bcaa-5c84-8d57-ae91832434a4",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rentals/:rental_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    ":rental_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rental_id",
                      "value": "{{rental_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/rentals/{rental_id}/`**\n\n**Scope requerido:** `rentals:write`\n\n**Variables de path:**\n- `:rental_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"availability_status\": \"\",\n  \"base_price\": 0,\n  \"category_id\": \"\",\n  \"delivery_available\": false,\n  \"description\": \"\",\n  \"features\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar alquiler",
              "id": "59350f9c-be0f-5f53-87da-f9936f92e52c",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/rentals/:rental_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    ":rental_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rental_id",
                      "value": "{{rental_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/rentals/{rental_id}/`**\n\n**Scope requerido:** `rentals:write`\n\n**Variables de path:**\n- `:rental_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "9a1e54ba-ae90-513f-8e84-32ca021dee3f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/rentals/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/rentals/tags/`**\n\n**Scope requerido:** `rentals:read`"
              }
            },
            {
              "name": "Alta masiva de alquileres (alias obsoleto)",
              "id": "22cbf1f4-4683-5840-8417-41b2716e697d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rentals/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/rentals/batch-create/`**\n\n**Scope requerido:** `rentals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de alquileres",
              "id": "d82eeabe-d2a6-527b-8931-e97f688e86c8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rentals/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/rentals/bulk/create/`**\n\n**Scope requerido:** `rentals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de alquileres",
              "id": "5a66bf5e-f0c6-5859-88f6-311f4bb1b856",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rentals/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/rentals/bulk/delete/`**\n\n**Scope requerido:** `rentals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de alquileres",
              "id": "e7e19009-d796-5f18-8871-c9c0a5327fda",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rentals/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rentals",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/rentals/bulk/update/`**\n\n**Scope requerido:** `rentals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Insumos",
          "id": "b54601f3-ef26-50b4-8bdf-ba44af110b78",
          "description": "`/api/v1/supplies` · 10 endpoints · scopes: `supplies:read`, `supplies:write`",
          "item": [
            {
              "name": "Listar insumos",
              "id": "eec20b44-1bb8-58b3-81ad-4e769bad43ff",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/supplies/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/supplies/list/`**\n\n**Scope requerido:** `supplies:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('supply_id', items[0].id);",
                      "  console.log('supply_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener insumo",
              "id": "d1aa057e-2ef3-5980-898b-a8c6d28cbc66",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/supplies/:supply_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    ":supply_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supply_id",
                      "value": "{{supply_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/supplies/{supply_id}/`**\n\n**Scope requerido:** `supplies:read`\n\n**Variables de path:**\n- `:supply_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear insumo",
              "id": "f08fa9d8-8187-5c2d-8451-9ae54d51c426",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supplies/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/supplies/`**\n\n**Scope requerido:** `supplies:write`\n\n**Campos requeridos:** `default_amount`, `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"default_amount\": 0,\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar insumo",
              "id": "6bd84adc-281c-5c37-8288-91234d48d53d",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supplies/:supply_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    ":supply_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supply_id",
                      "value": "{{supply_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/supplies/{supply_id}/`**\n\n**Scope requerido:** `supplies:write`\n\n**Variables de path:**\n- `:supply_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"additional_barcodes\": [],\n  \"barcode\": \"\",\n  \"default_amount\": 0,\n  \"description\": \"\",\n  \"min_stock\": 0,\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar insumo",
              "id": "be21adab-814f-5a71-85f2-a7243b3ae217",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/supplies/:supply_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    ":supply_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supply_id",
                      "value": "{{supply_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/supplies/{supply_id}/`**\n\n**Scope requerido:** `supplies:write`\n\n**Variables de path:**\n- `:supply_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "ca7ee541-1e78-53b8-84d5-6cb74c841b46",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/supplies/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/supplies/tags/`**\n\n**Scope requerido:** `supplies:read`"
              }
            },
            {
              "name": "Alta masiva de insumos (alias obsoleto)",
              "id": "1095dbc6-1799-56b7-8e8f-5d8db44feee6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supplies/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/supplies/batch-create/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de insumos",
              "id": "faa8cad6-13b9-5741-8088-0d016e736f3b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supplies/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/supplies/bulk/create/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de insumos",
              "id": "8beee883-f4b4-517f-8225-dcf77f857587",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supplies/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/supplies/bulk/delete/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de insumos",
              "id": "957d2c0d-fec6-56f9-89d5-76c2acc78046",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supplies/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supplies",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/supplies/bulk/update/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Consumos de insumo",
          "id": "300bbab4-b806-5b7a-80fc-7df8edf906fd",
          "description": "`/api/v1/supply-consumptions` · 9 endpoints · scopes: `supplies:read`, `supplies:write`",
          "item": [
            {
              "name": "Listar consumos",
              "id": "4e4cd1a2-2a39-5da8-8df6-afd1a97699a0",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/supply-consumptions/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/supply-consumptions/list/`**\n\n**Scope requerido:** `supplies:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('supply_consumption_id', items[0].id);",
                      "  console.log('supply_consumption_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener consumo",
              "id": "19a8620f-b18d-51e0-86f1-1da8b3021f4b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/supply-consumptions/:supply_consumption_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    ":supply_consumption_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supply_consumption_id",
                      "value": "{{supply_consumption_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/supply-consumptions/{supply_consumption_id}/`**\n\n**Scope requerido:** `supplies:read`\n\n**Variables de path:**\n- `:supply_consumption_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear consumo",
              "id": "9b59acef-e205-5929-8391-33be4ce0673b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supply-consumptions/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/supply-consumptions/`**\n\n**Scope requerido:** `supplies:write`\n\n**Campos requeridos:** `items`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar consumo",
              "id": "49028789-a18b-5fc9-8e2b-ad6dfe03b1a9",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/supply-consumptions/:supply_consumption_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    ":supply_consumption_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supply_consumption_id",
                      "value": "{{supply_consumption_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/supply-consumptions/{supply_consumption_id}/`**\n\n**Scope requerido:** `supplies:write`\n\n**Variables de path:**\n- `:supply_consumption_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "172de285-181e-5c79-864b-307272e3d1da",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/supply-consumptions/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/supply-consumptions/tags/`**\n\n**Scope requerido:** `supplies:read`"
              }
            },
            {
              "name": "Alta masiva de consumos (alias obsoleto)",
              "id": "cc07f7f9-d477-5692-8848-de497779043b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supply-consumptions/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/supply-consumptions/batch-create/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de consumos",
              "id": "494fcd98-c00b-578e-86d5-1fae23a8cc61",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supply-consumptions/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/supply-consumptions/bulk/create/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de consumos",
              "id": "9ea4b22a-cf82-5f5a-83ab-5ea7336cd18e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supply-consumptions/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/supply-consumptions/bulk/delete/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de consumos",
              "id": "ec9aa31a-9aed-54df-84f7-c817d27de438",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/supply-consumptions/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "supply-consumptions",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/supply-consumptions/bulk/update/`**\n\n**Scope requerido:** `supplies:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Promociones",
          "id": "f03966c8-59cd-59c9-8c17-161df8ab58cc",
          "description": "`/api/v1/promotions` · 10 endpoints · scopes: `promotions:read`, `promotions:write`",
          "item": [
            {
              "name": "Listar promociones",
              "id": "5ca68867-7c77-5d19-8ae9-0d5759b229ab",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/promotions/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/promotions/list/`**\n\n**Scope requerido:** `promotions:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('promotion_id', items[0].id);",
                      "  console.log('promotion_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener promoción",
              "id": "b3336edd-d62e-54ac-8100-cc11ca2c0a12",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/promotions/:promotion_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    ":promotion_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "promotion_id",
                      "value": "{{promotion_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/promotions/{promotion_id}/`**\n\n**Scope requerido:** `promotions:read`\n\n**Variables de path:**\n- `:promotion_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear promoción",
              "id": "6c5eb102-a829-573a-8840-241ec10d2f58",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/promotions/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/promotions/`**\n\n**Scope requerido:** `promotions:write`\n\n**Campos requeridos:** `name`, `promotion_type`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\",\n  \"promotion_type\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar promoción",
              "id": "4a6c3a43-3fef-515b-8134-cd672a750afa",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/promotions/:promotion_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    ":promotion_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "promotion_id",
                      "value": "{{promotion_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/promotions/{promotion_id}/`**\n\n**Scope requerido:** `promotions:write`\n\n**Variables de path:**\n- `:promotion_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"applies_to\": \"\",\n  \"bundle_discount\": 0,\n  \"bundle_entity_ids\": [],\n  \"buy_quantity\": 0,\n  \"category_ids\": [],\n  \"description\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar promoción",
              "id": "ce6f9303-69c6-5e9f-82b6-55dd5b9fcb3b",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/promotions/:promotion_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    ":promotion_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "promotion_id",
                      "value": "{{promotion_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/promotions/{promotion_id}/`**\n\n**Scope requerido:** `promotions:write`\n\n**Variables de path:**\n- `:promotion_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "5cc8d577-9d85-5bdc-81ff-537c123e1039",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/promotions/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/promotions/tags/`**\n\n**Scope requerido:** `promotions:read`"
              }
            },
            {
              "name": "Alta masiva de promociones (alias obsoleto)",
              "id": "00bb7dc5-a246-5434-86d4-f8c6648426c6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/promotions/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/promotions/batch-create/`**\n\n**Scope requerido:** `promotions:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de promociones",
              "id": "4aaf2a20-9b79-5aed-8f35-10af0690b462",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/promotions/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/promotions/bulk/create/`**\n\n**Scope requerido:** `promotions:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de promociones",
              "id": "1fb912f4-0107-505a-8efa-d6d58b0d35b5",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/promotions/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/promotions/bulk/delete/`**\n\n**Scope requerido:** `promotions:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de promociones",
              "id": "9ff4f68a-8074-586b-8655-f79bbcf29059",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/promotions/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "promotions",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/promotions/bulk/update/`**\n\n**Scope requerido:** `promotions:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Ventas",
      "id": "77affa69-2ef2-5498-8647-59539e18a287",
      "description": "Ventas, punto de venta, presupuestos, pedidos, cajas, medios de pago, objetivos y beneficios.",
      "item": [
        {
          "name": "Ventas",
          "id": "5455b587-4ef2-5456-86d7-7ef72e485425",
          "description": "`/api/v1/sales` · 10 endpoints · scopes: `sales:read`, `sales:write`",
          "item": [
            {
              "name": "Listar ventas",
              "id": "de09a506-867b-516c-8a60-1f47e537f9a2",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/sales/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/sales/list/`**\n\n**Scope requerido:** `sales:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('sale_id', items[0].id);",
                      "  console.log('sale_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener venta",
              "id": "dfbb2b14-b2d9-5a6f-8166-c072636bd4a2",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/sales/:sale_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    ":sale_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "sale_id",
                      "value": "{{sale_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/sales/{sale_id}/`**\n\n**Scope requerido:** `sales:read`\n\n**Variables de path:**\n- `:sale_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear venta",
              "id": "f5867da4-092c-53e3-80b1-b87b720ccd56",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/sales/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/sales/`**\n\n**Scope requerido:** `sales:write`\n\n**Campos requeridos:** `items`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {\n      \"publication_id\": \"{{product_id}}\",\n      \"publication_type\": \"product\",\n      \"name\": \"Producto de prueba\",\n      \"quantity\": 1,\n      \"unit_price\": 1500\n    }\n  ],\n  \"payment_method\": \"cash\",\n  \"generate_invoice\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar venta",
              "id": "69ff036f-a5b1-5682-80a5-34d1f3764c3d",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/sales/:sale_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    ":sale_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "sale_id",
                      "value": "{{sale_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/sales/{sale_id}/`**\n\n**Scope requerido:** `sales:write`\n\n**Variables de path:**\n- `:sale_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"billing_address\": {},\n  \"contract_template_id\": \"\",\n  \"customer\": \"\",\n  \"customer_id\": \"\",\n  \"discount\": 0,\n  \"discount_percentage\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar venta",
              "id": "ee721a1d-3b78-504a-8737-2a33671eeb01",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/sales/:sale_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    ":sale_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "sale_id",
                      "value": "{{sale_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/sales/{sale_id}/`**\n\n**Scope requerido:** `sales:write`\n\n**Variables de path:**\n- `:sale_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "447202d1-e200-5c75-8544-c5ef71b887bb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/sales/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/sales/tags/`**\n\n**Scope requerido:** `sales:read`"
              }
            },
            {
              "name": "Alta masiva de ventas (alias obsoleto)",
              "id": "7d405cec-a9e1-50aa-871c-ece8ad87e21a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/sales/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/sales/batch-create/`**\n\n**Scope requerido:** `sales:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {\n      \"items\": [\n        {\n          \"publication_id\": \"{{product_id}}\",\n          \"publication_type\": \"product\",\n          \"name\": \"Producto de prueba\",\n          \"quantity\": 1,\n          \"unit_price\": 1500\n        }\n      ],\n      \"payment_method\": \"cash\",\n      \"generate_invoice\": false\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de ventas",
              "id": "c3382de8-56db-52c8-8aa8-5ec42b0a540e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/sales/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/sales/bulk/create/`**\n\n**Scope requerido:** `sales:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {\n      \"items\": [\n        {\n          \"publication_id\": \"{{product_id}}\",\n          \"publication_type\": \"product\",\n          \"name\": \"Producto de prueba\",\n          \"quantity\": 1,\n          \"unit_price\": 1500\n        }\n      ],\n      \"payment_method\": \"cash\",\n      \"generate_invoice\": false\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de ventas",
              "id": "2cca87bb-bd64-57d0-8212-6ea715ef9cfa",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/sales/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/sales/bulk/delete/`**\n\n**Scope requerido:** `sales:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de ventas",
              "id": "a2e3873b-58aa-56b5-8c11-5c3ce9ec1f94",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/sales/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "sales",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/sales/bulk/update/`**\n\n**Scope requerido:** `sales:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Puntos de venta (POS)",
          "id": "fb66315f-2e16-50ee-8b6e-cae4c1f87636",
          "description": "`/api/v1/pos` · 14 endpoints · scopes: `pos:read`, `pos:write`",
          "item": [
            {
              "name": "Listar puntos de venta",
              "id": "df143179-8b43-5869-85bb-b98c5a09cde3",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/pos/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/pos/list/`**\n\n**Scope requerido:** `pos:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('pos_id', items[0].id);",
                      "  console.log('pos_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener punto de venta",
              "id": "5422fb07-5245-5bbd-87de-786ca649466e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/pos/:pos_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    ":pos_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "pos_id",
                      "value": "{{pos_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/pos/{pos_id}/`**\n\n**Scope requerido:** `pos:read`\n\n**Variables de path:**\n- `:pos_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear punto de venta",
              "id": "b2bb3e5a-a06a-5975-850a-fb606cbab119",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/pos/`**\n\n**Scope requerido:** `pos:write`\n\n**Campos requeridos:** `sales_point_id`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sales_point_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar punto de venta",
              "id": "7a83c989-64ce-57aa-8d98-68dbc93d3b16",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/:pos_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    ":pos_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "pos_id",
                      "value": "{{pos_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/pos/{pos_id}/`**\n\n**Scope requerido:** `pos:write`\n\n**Variables de path:**\n- `:pos_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"background_image_id\": \"\",\n  \"background_image_name\": \"\",\n  \"background_image_url\": \"\",\n  \"configuration\": {},\n  \"custom_message\": \"\",\n  \"primary_color\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar punto de venta",
              "id": "5ec1f73e-4722-5bc3-887c-aa9f0c75808e",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/pos/:pos_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    ":pos_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "pos_id",
                      "value": "{{pos_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/pos/{pos_id}/`**\n\n**Scope requerido:** `pos:write`\n\n**Variables de path:**\n- `:pos_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "f13d379c-0432-5221-88a4-96a3b0a9de2e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/pos/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/pos/tags/`**\n\n**Scope requerido:** `pos:read`"
              }
            },
            {
              "name": "{pos_id}/sale/ — Crea una venta directamente desde el punto de venta (POS)",
              "id": "a7fb6bc7-7819-5de9-866c-a666a33a366a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/:pos_id/sale/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    ":pos_id",
                    "sale",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "pos_id",
                      "value": "{{pos_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Crea una venta directamente desde el punto de venta (POS)\n\n**`POST /api/v1/pos/{pos_id}/sale/`**\n\n**Scope requerido:** `pos:write`\n\n**Variables de path:**\n- `:pos_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "sessions/{sales_point_id}/active — Close (CLOSED, not deleted) the active session",
              "id": "9cec3681-32c3-539c-8ba1-2edaa6521e23",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/pos/sessions/:sales_point_id/active",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "sessions",
                    ":sales_point_id",
                    "active"
                  ],
                  "variable": [
                    {
                      "key": "sales_point_id",
                      "value": "{{sales_point_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Close (CLOSED, not deleted) the active session.\n\n**`DELETE /api/v1/pos/sessions/{sales_point_id}/active`**\n\n**Scope requerido:** `pos:write`\n\n**Variables de path:**\n- `:sales_point_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "sessions/{sales_point_id}/active — Return the ACTIVE session for this (terminal, current-user) pair",
              "id": "4275fff2-a7ae-5b32-809b-ff7c3d729720",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/pos/sessions/:sales_point_id/active",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "sessions",
                    ":sales_point_id",
                    "active"
                  ],
                  "variable": [
                    {
                      "key": "sales_point_id",
                      "value": "{{sales_point_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Return the ACTIVE session for this (terminal, current-user) pair.\n\n**`GET /api/v1/pos/sessions/{sales_point_id}/active`**\n\n**Scope requerido:** `pos:read`\n\n**Variables de path:**\n- `:sales_point_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "sessions/{sales_point_id}/active",
              "id": "7c4beb1c-83fe-5ed3-823e-ad594442f72d",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/sessions/:sales_point_id/active",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "sessions",
                    ":sales_point_id",
                    "active"
                  ],
                  "variable": [
                    {
                      "key": "sales_point_id",
                      "value": "{{sales_point_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Upsert the entire active-session payload (cart, customer, totals, notes).\n\n**`PUT /api/v1/pos/sessions/{sales_point_id}/active`**\n\n**Scope requerido:** `pos:write`\n\n**Variables de path:**\n- `:sales_point_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de puntos de venta (alias obsoleto)",
              "id": "10268b75-666f-523d-88bc-d927ae67c90e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/pos/batch-create/`**\n\n**Scope requerido:** `pos:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de puntos de venta",
              "id": "ba9ac26d-f1f6-5f38-86f9-9a222a6b2b64",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/pos/bulk/create/`**\n\n**Scope requerido:** `pos:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de puntos de venta",
              "id": "ef092c85-894a-539c-8c01-356435da0ae7",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/pos/bulk/delete/`**\n\n**Scope requerido:** `pos:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de puntos de venta",
              "id": "1b5ccb3c-33d4-575c-8eec-14ebce710846",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/pos/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "pos",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/pos/bulk/update/`**\n\n**Scope requerido:** `pos:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Presupuestos",
          "id": "61e3e8c5-5af5-50db-8e85-ca2023a99f94",
          "description": "`/api/v1/budgets` · 32 endpoints · scopes: `budgets:read`, `budgets:write`",
          "item": [
            {
              "name": "Listar presupuestos",
              "id": "12b0da1d-e329-53b0-8a68-82e45cad7e40",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List quotes with optional filters and pagination.\n\n**`GET /api/v1/budgets/list/`**\n\n**Scope requerido:** `budgets:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('quote_identifier', items[0].id);",
                      "  console.log('quote_identifier =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Índice del recurso (links HATEOAS)",
              "id": "d4a3bd1d-0928-5129-87df-487e89c24bed",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ""
                  ]
                },
                "description": "Get HATEOAS links for budget resource\n\n**`GET /api/v1/budgets/`**\n\n**Scope requerido:** `budgets:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('quote_identifier', items[0].id);",
                      "  console.log('quote_identifier =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener presupuesto",
              "id": "829c5dd5-1493-53d4-87a9-e849bc1c8c13",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/:quote_identifier/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_identifier",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_identifier",
                      "value": "{{quote_identifier}}",
                      "description": ""
                    }
                  ]
                },
                "description": "Get quote details by quote ID or quote number.\n\n**`GET /api/v1/budgets/{quote_identifier}/`**\n\n**Scope requerido:** `budgets:read`\n\n**Variables de path:**\n- `:quote_identifier`"
              }
            },
            {
              "name": "Crear presupuesto",
              "id": "2df6d5e2-6885-5ff0-8c01-2a2d5b48f11b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ""
                  ]
                },
                "description": "Create a new quote.\n\n**`POST /api/v1/budgets/`**\n\n**Scope requerido:** `budgets:write`\n\n**Campos requeridos:** `customer`, `items`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"customer\": {},\n  \"items\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar presupuesto",
              "id": "d37a4ef3-8439-591d-89e9-66e360154df4",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/:quote_identifier/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_identifier",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_identifier",
                      "value": "{{quote_identifier}}",
                      "description": ""
                    }
                  ]
                },
                "description": "Update an existing quote.\n\n**`PUT /api/v1/budgets/{quote_identifier}/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_identifier`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"custom_fields\": {},\n  \"customer\": {},\n  \"discount_rate\": 0,\n  \"item_groups\": [],\n  \"items\": [],\n  \"notes\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar presupuesto",
              "id": "707bfe0c-d42d-515e-8be7-84a5bb9b8a0c",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/:quote_identifier/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_identifier",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_identifier",
                      "value": "{{quote_identifier}}",
                      "description": ""
                    }
                  ]
                },
                "description": "Delete (mark as deleted) a quote.\n\n**`DELETE /api/v1/budgets/{quote_identifier}/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_identifier`"
              }
            },
            {
              "name": "{quote_id}/convert/ — Convert a quote to a sale using quote ID",
              "id": "6f021fba-43c2-5ed6-8fe5-d04b0bcfce57",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/:quote_id/convert/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_id",
                    "convert",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Convert a quote to a sale using quote ID.\n\n**`POST /api/v1/budgets/{quote_id}/convert/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{quote_id}/duplicate/ — Duplicate an existing quote (alternative route)",
              "id": "2083024e-1c3b-5f47-876b-23bb7fe93b09",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/:quote_id/duplicate/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_id",
                    "duplicate",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Duplicate an existing quote (alternative route).\n\n**`POST /api/v1/budgets/{quote_id}/duplicate/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{quote_id}/sale/ — Get the sale related to a converted quote",
              "id": "baaadc95-9a1a-5d0d-8a4c-1794ca201111",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/:quote_id/sale/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_id",
                    "sale",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get the sale related to a converted quote.\n\n**`GET /api/v1/budgets/{quote_id}/sale/`**\n\n**Scope requerido:** `budgets:read`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{quote_id}/send/ — Mark quote as sent and optionally send by email",
              "id": "ad308c26-0c6e-5738-88d4-43b26f973eca",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/:quote_id/send/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_id",
                    "send",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Mark quote as sent and optionally send by email.\n\n**`POST /api/v1/budgets/{quote_id}/send/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email_body\": \"cliente@ejemplo.com\",\n  \"email_subject\": \"cliente@ejemplo.com\",\n  \"email_to\": \"cliente@ejemplo.com\",\n  \"send_email\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{quote_id}/share/ — Deshabilita el link público del presupuesto",
              "id": "1f74b467-2632-5f32-80a7-15f7222e66b9",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/:quote_id/share/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_id",
                    "share",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Deshabilita el link público del presupuesto.\n\n**`DELETE /api/v1/budgets/{quote_id}/share/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{quote_id}/share/",
              "id": "8f3f67dc-770c-53fc-87ee-78056c13cc9e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/:quote_id/share/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_id",
                    "share",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Habilita un link público de solo-lectura para el presupuesto (plan completo).\n\n**`POST /api/v1/budgets/{quote_id}/share/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{quote_id}/status/ — Update quote status",
              "id": "a50b4706-ac71-5566-8514-615687c15b9b",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/:quote_id/status/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_id",
                    "status",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update quote status.\n\n**`PUT /api/v1/budgets/{quote_id}/status/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `status`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{quote_identifier}/convert/ — Convert a quote to a sale",
              "id": "71799e5c-5c76-5266-8679-16c13907e6d4",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/:quote_identifier/convert/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    ":quote_identifier",
                    "convert",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_identifier",
                      "value": "{{quote_identifier}}",
                      "description": ""
                    }
                  ]
                },
                "description": "Convert a quote to a sale.\n\n**`POST /api/v1/budgets/{quote_identifier}/convert/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_identifier`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "batch-delete/ — Batch delete quotes",
              "id": "a552ab72-210c-5951-85bf-661c4e39be3c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/batch-delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "batch-delete",
                    ""
                  ]
                },
                "description": "Batch delete quotes.\n\n**`POST /api/v1/budgets/batch-delete/`**\n\n**Scope requerido:** `budgets:write`\n\n**Campos requeridos:** `quote_ids`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_ids\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "batch-duplicate/ — Duplicate multiple budgets in a single request",
              "id": "17decca2-1373-50e9-877e-c8d6f075c04c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/batch-duplicate/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "batch-duplicate",
                    ""
                  ]
                },
                "description": "Duplicate multiple budgets in a single request\n\n**`POST /api/v1/budgets/batch-duplicate/`**\n\n**Scope requerido:** `budgets:write`\n\n**Campos requeridos:** `budget_ids`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"budget_ids\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "batch-update-status/ — Batch update quote status",
              "id": "d05b2331-2d61-51fe-80c8-f0fe2eb3794e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/batch-update-status/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "batch-update-status",
                    ""
                  ]
                },
                "description": "Batch update quote status.\n\n**`POST /api/v1/budgets/batch-update-status/`**\n\n**Scope requerido:** `budgets:write`\n\n**Campos requeridos:** `quote_ids`, `status`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_ids\": [],\n  \"status\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "check_publication/ — Check availability of a publication for quotes",
              "id": "d25392c7-394f-55bc-8499-26c42c15db05",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/check_publication/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "check_publication",
                    ""
                  ]
                },
                "description": "Check availability of a publication for quotes.\n\n**`POST /api/v1/budgets/check_publication/`**\n\n**Scope requerido:** `budgets:write`\n\n**Campos requeridos:** `publication_id`, `publication_type`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"publication_id\": \"\",\n  \"publication_type\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "customer/{customer_id}/ — Get all quotes for a specific customer",
              "id": "78b2047d-bf93-5a20-806a-b64efddd9aae",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/customer/:customer_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "customer",
                    ":customer_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "customer_id",
                      "value": "{{customer_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get all quotes for a specific customer.\n\n**`GET /api/v1/budgets/customer/{customer_id}/`**\n\n**Scope requerido:** `budgets:read`\n\n**Variables de path:**\n- `:customer_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "dashboard/ — Get quotes dashboard data",
              "id": "9f113688-6c97-5b91-841d-51e685aa626b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/dashboard/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "dashboard",
                    ""
                  ]
                },
                "description": "Get quotes dashboard data.\n\n**`GET /api/v1/budgets/dashboard/`**\n\n**Scope requerido:** `budgets:read`"
              }
            },
            {
              "name": "duplicate/{quote_id}/ — Duplicate an existing quote",
              "id": "b70ded6b-acb3-5fa7-8a50-9ac3217fd267",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/duplicate/:quote_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "duplicate",
                    ":quote_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "quote_id",
                      "value": "{{quote_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Duplicate an existing quote.\n\n**`POST /api/v1/budgets/duplicate/{quote_id}/`**\n\n**Scope requerido:** `budgets:write`\n\n**Variables de path:**\n- `:quote_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "expiring/ — Get quotes expiring soon",
              "id": "44f9071d-01a1-5555-8aff-f2d42eb2f275",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/expiring/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "expiring",
                    ""
                  ]
                },
                "description": "Get quotes expiring soon.\n\n**`GET /api/v1/budgets/expiring/`**\n\n**Scope requerido:** `budgets:read`"
              }
            },
            {
              "name": "export/ — Export quotes to CSV or Excel",
              "id": "b77c12b5-7671-5099-8be9-23df6147693e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/export/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "export",
                    ""
                  ]
                },
                "description": "Export quotes to CSV or Excel.\n\n**`GET /api/v1/budgets/export/`**\n\n**Scope requerido:** `budgets:write`"
              }
            },
            {
              "name": "export/ — Export quotes to CSV or Excel",
              "id": "bcbc25f5-d087-5fb5-8142-d322d5a079ba",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/export/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "export",
                    ""
                  ]
                },
                "description": "Export quotes to CSV or Excel.\n\n**`POST /api/v1/budgets/export/`**\n\n**Scope requerido:** `budgets:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "import/template/ — Get import template for quotes",
              "id": "e38e682a-5dbb-53a7-8f31-f363949893fb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/import/template/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "import",
                    "template",
                    ""
                  ]
                },
                "description": "Get import template for quotes.\n\n**`GET /api/v1/budgets/import/template/`**\n\n**Scope requerido:** `budgets:read`"
              }
            },
            {
              "name": "search/ — Search quotes by term",
              "id": "7b7e67a2-b8f2-5e5c-88de-cccfe80b47f4",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/search/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "search",
                    ""
                  ]
                },
                "description": "Search quotes by term.\n\n**`GET /api/v1/budgets/search/`**\n\n**Scope requerido:** `budgets:read`"
              }
            },
            {
              "name": "stats/ — Get general quote statistics",
              "id": "d0782435-deac-5c42-88b7-c47114cab712",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/stats/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "stats",
                    ""
                  ]
                },
                "description": "Get general quote statistics.\n\n**`GET /api/v1/budgets/stats/`**\n\n**Scope requerido:** `budgets:read`"
              }
            },
            {
              "name": "status-counts — Get quote counts by status",
              "id": "7b464832-7e8d-58a2-8cb5-fa9c7792ba50",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/status-counts",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "status-counts"
                  ]
                },
                "description": "Get quote counts by status.\n\n**`GET /api/v1/budgets/status-counts`**\n\n**Scope requerido:** `budgets:read`"
              }
            },
            {
              "name": "summary/ — Get quotes summary data",
              "id": "b0321f82-862b-5526-8441-efab0b1a5b8f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/budgets/summary/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "summary",
                    ""
                  ]
                },
                "description": "Get quotes summary data.\n\n**`GET /api/v1/budgets/summary/`**\n\n**Scope requerido:** `budgets:read`"
              }
            },
            {
              "name": "Alta masiva de presupuestos",
              "id": "61ae13f8-781a-5401-8149-f8e902d1b19c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create budgets.\n\n**`POST /api/v1/budgets/bulk/create/`**\n\n**Scope requerido:** `budgets:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de presupuestos",
              "id": "3e351fba-643f-55f3-8bd9-ca17b8276baf",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete budgets.\n\n**`POST /api/v1/budgets/bulk/delete/`**\n\n**Scope requerido:** `budgets:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de presupuestos",
              "id": "e3d7cccc-ec36-5c39-8ad5-8cf3a6a9c0ce",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/budgets/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "budgets",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update budgets.\n\n**`PUT /api/v1/budgets/bulk/update/`**\n\n**Scope requerido:** `budgets:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Pedidos",
          "id": "ecdac228-3e30-55d7-83be-85fab037f6d7",
          "description": "`/api/v1/orders` · 10 endpoints · scopes: `orders:read`, `orders:write`",
          "item": [
            {
              "name": "Listar pedidos",
              "id": "64ba1e21-3fb8-54e7-8225-e918966d5c1c",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/orders/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/orders/list/`**\n\n**Scope requerido:** `orders:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('order_id', items[0].id);",
                      "  console.log('order_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener pedido",
              "id": "fe032326-e53b-54ac-860b-4927b4f264a9",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/orders/:order_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    ":order_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "order_id",
                      "value": "{{order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/orders/{order_id}/`**\n\n**Scope requerido:** `orders:read`\n\n**Variables de path:**\n- `:order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear pedido",
              "id": "b296cfa6-cc5e-5bab-8493-53aa5a4e3c12",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/orders/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/orders/`**\n\n**Scope requerido:** `orders:write`\n\n**Campos requeridos:** `items`, `supplier_id`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [],\n  \"supplier_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar pedido",
              "id": "a244a77e-c20d-5662-84a5-528b80f57b29",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/orders/:order_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    ":order_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "order_id",
                      "value": "{{order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/orders/{order_id}/`**\n\n**Scope requerido:** `orders:write`\n\n**Variables de path:**\n- `:order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"actual_delivery_date\": \"2026-01-31\",\n  \"expected_delivery_date\": \"2026-01-31\",\n  \"internal_notes\": \"\",\n  \"items\": [],\n  \"notes\": \"\",\n  \"payment\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar pedido",
              "id": "8801a327-b2ce-5b7c-8e1b-5da1a1008ef8",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/orders/:order_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    ":order_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "order_id",
                      "value": "{{order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/orders/{order_id}/`**\n\n**Scope requerido:** `orders:write`\n\n**Variables de path:**\n- `:order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "3e93636d-7f84-57db-8f1b-4a38503ce5c4",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/orders/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/orders/tags/`**\n\n**Scope requerido:** `orders:read`"
              }
            },
            {
              "name": "Alta masiva de pedidos (alias obsoleto)",
              "id": "2a2693d5-fca9-5e22-8832-74969f5d58fd",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/orders/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/orders/batch-create/`**\n\n**Scope requerido:** `orders:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de pedidos",
              "id": "f1ceafaa-de26-5a48-8d3b-19eeb3735ea8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/orders/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/orders/bulk/create/`**\n\n**Scope requerido:** `orders:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de pedidos",
              "id": "e80b387c-7d29-5412-8365-faf989d077a2",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/orders/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/orders/bulk/delete/`**\n\n**Scope requerido:** `orders:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de pedidos",
              "id": "adee8739-ec23-5988-8df3-4d20c02ab891",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/orders/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "orders",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/orders/bulk/update/`**\n\n**Scope requerido:** `orders:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Cajas",
          "id": "4a155026-d6de-5584-8c07-e2095c1a0e27",
          "description": "`/api/v1/cash_register` · 10 endpoints · scopes: `cash_register:read`, `cash_register:write`",
          "item": [
            {
              "name": "Listar cajas",
              "id": "7f7594c9-d5a7-5fea-8301-71a42b4cd92e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/cash_register/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/cash_register/list/`**\n\n**Scope requerido:** `cash_register:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('cash_register_id', items[0].id);",
                      "  console.log('cash_register_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener caja",
              "id": "2c489b04-2e6e-5b0c-8519-0bf2d75a7394",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/cash_register/:cash_register_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    ":cash_register_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "cash_register_id",
                      "value": "{{cash_register_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/cash_register/{cash_register_id}/`**\n\n**Scope requerido:** `cash_register:read`\n\n**Variables de path:**\n- `:cash_register_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear caja",
              "id": "ea8b9687-c38a-5bc5-8847-26d482a61187",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/cash_register/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/cash_register/`**\n\n**Scope requerido:** `cash_register:write`\n\n**Campos requeridos:** `initial_amount`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"initial_amount\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar caja",
              "id": "0c39d962-7dc7-5fb4-828b-cb2be72bd3fb",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/cash_register/:cash_register_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    ":cash_register_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "cash_register_id",
                      "value": "{{cash_register_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/cash_register/{cash_register_id}/`**\n\n**Scope requerido:** `cash_register:write`\n\n**Variables de path:**\n- `:cash_register_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"metadata\": {},\n  \"notes\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar caja",
              "id": "c344d90c-238e-52cc-8cd9-48f8404ef992",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/cash_register/:cash_register_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    ":cash_register_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "cash_register_id",
                      "value": "{{cash_register_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/cash_register/{cash_register_id}/`**\n\n**Scope requerido:** `cash_register:write`\n\n**Variables de path:**\n- `:cash_register_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "33ada8ca-09cb-59cd-8dd4-f73835120ec8",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/cash_register/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/cash_register/tags/`**\n\n**Scope requerido:** `cash_register:read`"
              }
            },
            {
              "name": "Alta masiva de cajas (alias obsoleto)",
              "id": "175a092e-dd83-5649-89e6-c251132e65a0",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/cash_register/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/cash_register/batch-create/`**\n\n**Scope requerido:** `cash_register:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de cajas",
              "id": "295fde64-1ef2-5788-811d-2283c49c71ad",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/cash_register/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/cash_register/bulk/create/`**\n\n**Scope requerido:** `cash_register:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de cajas",
              "id": "3ee8d958-40d3-5675-8e29-780c0c0702ef",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/cash_register/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/cash_register/bulk/delete/`**\n\n**Scope requerido:** `cash_register:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de cajas",
              "id": "fcc14bfe-53f0-5a16-8096-589f40f46f2d",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/cash_register/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "cash_register",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/cash_register/bulk/update/`**\n\n**Scope requerido:** `cash_register:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Medios de pago",
          "id": "88f79033-1a25-58d6-8fee-11aeda59d98c",
          "description": "`/api/v1/payment_methods` · 13 endpoints · scopes: `payment_methods:read`, `payment_methods:write`",
          "item": [
            {
              "name": "Listar medios de pago",
              "id": "f2fc5c26-7310-522c-85fd-7607c00eb3f1",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List all payment methods for the tenant\n\n**`GET /api/v1/payment_methods/list/`**\n\n**Scope requerido:** `payment_methods:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('payment_method_id', items[0].id);",
                      "  console.log('payment_method_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Índice del recurso (links HATEOAS)",
              "id": "22dc6c35-b50b-5ac1-8574-b530d0e0514a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ""
                  ]
                },
                "description": "HATEOAS Entry point - returns available links only\n\n**`GET /api/v1/payment_methods/`**\n\n**Scope requerido:** `payment_methods:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('payment_method_id', items[0].id);",
                      "  console.log('payment_method_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener medio de pago",
              "id": "0831d2ce-969b-58c7-8d0b-b622f7d0df78",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/:payment_method_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ":payment_method_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "payment_method_id",
                      "value": "{{payment_method_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get payment method by ID\n\n**`GET /api/v1/payment_methods/{payment_method_id}/`**\n\n**Scope requerido:** `payment_methods:read`\n\n**Variables de path:**\n- `:payment_method_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear medio de pago",
              "id": "68a9a129-b914-50ce-8d29-a9d02055c50c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/payment_methods/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ""
                  ]
                },
                "description": "Create a new payment method\n\n**`POST /api/v1/payment_methods/`**\n\n**Scope requerido:** `payment_methods:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar medio de pago",
              "id": "df283fb0-4a51-5e2a-8300-dcd45a683b49",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/payment_methods/:payment_method_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ":payment_method_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "payment_method_id",
                      "value": "{{payment_method_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update payment method\n\n**`PUT /api/v1/payment_methods/{payment_method_id}/`**\n\n**Scope requerido:** `payment_methods:write`\n\n**Variables de path:**\n- `:payment_method_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar medio de pago",
              "id": "404ced40-1b75-5aa3-8fd4-623adf2a6da0",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/:payment_method_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ":payment_method_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "payment_method_id",
                      "value": "{{payment_method_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete payment method\n\n**`DELETE /api/v1/payment_methods/{payment_method_id}/`**\n\n**Scope requerido:** `payment_methods:write`\n\n**Variables de path:**\n- `:payment_method_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{payment_method_id}/children/ — Get payment method with its children",
              "id": "ae7e531b-02d9-5d8e-8cfc-dd935d9ec6e7",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/:payment_method_id/children/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ":payment_method_id",
                    "children",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "payment_method_id",
                      "value": "{{payment_method_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get payment method with its children\n\n**`GET /api/v1/payment_methods/{payment_method_id}/children/`**\n\n**Scope requerido:** `payment_methods:read`\n\n**Variables de path:**\n- `:payment_method_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{payment_method_id}/impact/ — Get effective impact of a payment method",
              "id": "79d0cecf-a55d-5b61-8d4e-3cbdb077a0d2",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/:payment_method_id/impact/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ":payment_method_id",
                    "impact",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "payment_method_id",
                      "value": "{{payment_method_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get effective impact of a payment method\n\n**`GET /api/v1/payment_methods/{payment_method_id}/impact/`**\n\n**Scope requerido:** `payment_methods:read`\n\n**Variables de path:**\n- `:payment_method_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{payment_method_id}/toggle-status/ — Toggle payment method active/inactive status",
              "id": "ef4363d8-b770-54a3-860b-6346cdd9025f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/payment_methods/:payment_method_id/toggle-status/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    ":payment_method_id",
                    "toggle-status",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "payment_method_id",
                      "value": "{{payment_method_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Toggle payment method active/inactive status\n\n**`POST /api/v1/payment_methods/{payment_method_id}/toggle-status/`**\n\n**Scope requerido:** `payment_methods:write`\n\n**Variables de path:**\n- `:payment_method_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "active/ — Get only active payment methods (for selectors/dropdowns)",
              "id": "ee7074ca-8cda-5c82-8cdd-375e6427c851",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/active/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    "active",
                    ""
                  ]
                },
                "description": "Get only active payment methods (for selectors/dropdowns)\n\n**`GET /api/v1/payment_methods/active/`**\n\n**Scope requerido:** `payment_methods:read`"
              }
            },
            {
              "name": "hierarchy/ — Get payment methods as hierarchical tree",
              "id": "267ac6a5-0212-5648-8022-01ee6afea940",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/payment_methods/hierarchy/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    "hierarchy",
                    ""
                  ]
                },
                "description": "Get payment methods as hierarchical tree\n\n**`GET /api/v1/payment_methods/hierarchy/`**\n\n**Scope requerido:** `payment_methods:read`"
              }
            },
            {
              "name": "initialize/ — Initialize default payment methods for tenant",
              "id": "6badcb5e-f6e9-5298-81d8-0498e59a286f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/payment_methods/initialize/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    "initialize",
                    ""
                  ]
                },
                "description": "Initialize default payment methods for tenant\n\n**`POST /api/v1/payment_methods/initialize/`**\n\n**Scope requerido:** `payment_methods:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "reorder/ — Reorder payment methods",
              "id": "747cb5ea-12bc-577b-87df-a99c1e91f264",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/payment_methods/reorder/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "payment_methods",
                    "reorder",
                    ""
                  ]
                },
                "description": "Reorder payment methods\n\n**`POST /api/v1/payment_methods/reorder/`**\n\n**Scope requerido:** `payment_methods:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Objetivos de venta",
          "id": "7518d795-ecb8-5273-8e07-f22e8c1ade09",
          "description": "`/api/v1/goals` · 10 endpoints · scopes: `sales_goals:read`, `sales_goals:write`",
          "item": [
            {
              "name": "Listar objetivos",
              "id": "f10112ca-df76-5850-8a7e-7f3762cd0580",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/goals/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/goals/list/`**\n\n**Scope requerido:** `sales_goals:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('goals_id', items[0].id);",
                      "  console.log('goals_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener objetivo",
              "id": "72f51a37-f638-5134-8ffc-6db9471686c3",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/goals/:goals_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    ":goals_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "goals_id",
                      "value": "{{goals_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/goals/{goals_id}/`**\n\n**Scope requerido:** `sales_goals:read`\n\n**Variables de path:**\n- `:goals_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear objetivo",
              "id": "907b5ee2-6a6d-5fdd-824b-3a6fd086acd5",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/goals/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/goals/`**\n\n**Scope requerido:** `sales_goals:write`\n\n**Campos requeridos:** `end_date`, `goal_type`, `name`, `period`, `start_date`, `target_value`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"end_date\": \"2026-01-31\",\n  \"goal_type\": \"\",\n  \"name\": \"\",\n  \"period\": \"\",\n  \"start_date\": \"2026-01-31\",\n  \"target_value\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar objetivo",
              "id": "afb7f0c8-5965-5407-874b-6538d6ff8533",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/goals/:goals_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    ":goals_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "goals_id",
                      "value": "{{goals_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/goals/{goals_id}/`**\n\n**Scope requerido:** `sales_goals:write`\n\n**Variables de path:**\n- `:goals_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"description\": \"\",\n  \"end_date\": \"2026-01-31\",\n  \"milestones\": [],\n  \"name\": \"\",\n  \"notifications_enabled\": false,\n  \"status\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar objetivo",
              "id": "fb071bb0-fa89-5e81-80fb-90c012c10791",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/goals/:goals_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    ":goals_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "goals_id",
                      "value": "{{goals_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/goals/{goals_id}/`**\n\n**Scope requerido:** `sales_goals:write`\n\n**Variables de path:**\n- `:goals_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "830db21b-ee76-57f8-8ed8-249fa3a5ce7b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/goals/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/goals/tags/`**\n\n**Scope requerido:** `sales_goals:read`"
              }
            },
            {
              "name": "Alta masiva de objetivos (alias obsoleto)",
              "id": "19342f3a-6cb1-51d3-834e-28fa040e22a0",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/goals/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/goals/batch-create/`**\n\n**Scope requerido:** `sales_goals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de objetivos",
              "id": "42e2af25-343a-58c9-88dc-6982060c73d7",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/goals/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/goals/bulk/create/`**\n\n**Scope requerido:** `sales_goals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de objetivos",
              "id": "63f07168-398e-5df5-8400-13073311ec48",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/goals/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/goals/bulk/delete/`**\n\n**Scope requerido:** `sales_goals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de objetivos",
              "id": "2309395d-869f-5e72-8b48-f03750ba2d8c",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/goals/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "goals",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/goals/bulk/update/`**\n\n**Scope requerido:** `sales_goals:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Beneficios y recompensas",
          "id": "194fe6e3-78d1-53f1-8f2f-9e3c0c03f793",
          "description": "`/api/v1/rewards` · 10 endpoints · scopes: `benefits:read`, `benefits:write`",
          "item": [
            {
              "name": "Listar beneficios",
              "id": "6f43ac28-9586-5d3a-8e5d-f65eae68c1b6",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/rewards/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/rewards/list/`**\n\n**Scope requerido:** `benefits:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('rewards_id', items[0].id);",
                      "  console.log('rewards_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener beneficio",
              "id": "7ebbd91e-3a99-5153-82bb-4c10ba17042d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/rewards/:rewards_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    ":rewards_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rewards_id",
                      "value": "{{rewards_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/rewards/{rewards_id}/`**\n\n**Scope requerido:** `benefits:read`\n\n**Variables de path:**\n- `:rewards_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear beneficio",
              "id": "a43da908-b2a7-5c1c-827d-adfb368c3b1d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rewards/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/rewards/`**\n\n**Scope requerido:** `benefits:write`\n\n**Campos requeridos:** `name`, `points_cost`, `reward_type`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\",\n  \"points_cost\": 0,\n  \"reward_type\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar beneficio",
              "id": "c418cf23-d450-5849-836b-c5d9c8dcde6a",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rewards/:rewards_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    ":rewards_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rewards_id",
                      "value": "{{rewards_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/rewards/{rewards_id}/`**\n\n**Scope requerido:** `benefits:write`\n\n**Variables de path:**\n- `:rewards_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"active\": false,\n  \"category\": \"\",\n  \"description\": \"\",\n  \"featured\": false,\n  \"image_url\": \"\",\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar beneficio",
              "id": "c4d77239-1897-5f7e-8fda-eb5d37084ad2",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/rewards/:rewards_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    ":rewards_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rewards_id",
                      "value": "{{rewards_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/rewards/{rewards_id}/`**\n\n**Scope requerido:** `benefits:write`\n\n**Variables de path:**\n- `:rewards_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "88f1ddf0-1e41-5121-8616-6148a762df34",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/rewards/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/rewards/tags/`**\n\n**Scope requerido:** `benefits:read`"
              }
            },
            {
              "name": "Alta masiva de beneficios (alias obsoleto)",
              "id": "b803ed9f-5e03-5959-8b80-0ff25968827e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rewards/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/rewards/batch-create/`**\n\n**Scope requerido:** `benefits:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de beneficios",
              "id": "0072e845-cabc-5f3f-81c8-e45feea83c54",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rewards/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/rewards/bulk/create/`**\n\n**Scope requerido:** `benefits:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de beneficios",
              "id": "5846ae67-0420-5631-8843-508e495c54dd",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rewards/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/rewards/bulk/delete/`**\n\n**Scope requerido:** `benefits:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de beneficios",
              "id": "ba854e50-2852-525c-8db4-4c664a1d30ca",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/rewards/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "rewards",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/rewards/bulk/update/`**\n\n**Scope requerido:** `benefits:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Facturación",
      "id": "4143084a-9012-5091-82be-00ebe0522a3c",
      "description": "Emisión de comprobantes electrónicos AFIP/ARCA, notas, CAEA, FCE MiPyME y la configuración fiscal del contribuyente.",
      "item": [
        {
          "name": "Comprobantes AFIP",
          "id": "9ab77eb8-aa03-5831-8f49-8cedc5dad0b6",
          "description": "`/api/v1/bill/receipts` · 26 endpoints · scopes: `invoices:read`, `invoices:write`",
          "item": [
            {
              "name": "Listar comprobantes",
              "id": "026d3dad-4138-5d4e-80af-468daf606a93",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "status",
                      "value": "completed",
                      "disabled": true,
                      "description": "completed | pending | rejected | cancelled (vocabulario propio de este listado)"
                    },
                    {
                      "key": "tipo_comprobante",
                      "value": "6",
                      "disabled": true,
                      "description": "Código AFIP del tipo de comprobante"
                    },
                    {
                      "key": "fecha_desde",
                      "value": "2026-01-01",
                      "disabled": true
                    },
                    {
                      "key": "fecha_hasta",
                      "value": "2026-12-31",
                      "disabled": true
                    },
                    {
                      "key": "documento_cliente",
                      "value": "",
                      "disabled": true
                    }
                  ]
                },
                "description": "Lists receipts with optional filtering and pagination.\n\n**`GET /api/v1/bill/receipts/list/`**\n\n**Scope requerido:** `invoices:read`\n\nFiltros soportados: `status`, `tipo_comprobante`, `documento_cliente`, `fecha_desde`, `fecha_hasta`, `sort`, `sort_dir`, más `page`/`per_page` (o `limit`/`skip`).\n\n⚠️ `status` usa un **vocabulario propio** que no es el estado interno del comprobante: `completed` (aprobado), `pending` (pendiente), `rejected` (rechazado), `cancelled` (anulado).\n\n⚠️ `search` y `fields` **no están implementados** en este listado (a diferencia del `/list/` genérico del resto de los recursos): mandarlos no filtra ni proyecta nada."
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('comprobante_id', items[0].id);",
                      "  console.log('comprobante_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Emitir factura",
              "id": "48cecb5a-bf0d-56e4-8cb4-094dc0febb02",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Idempotency-Key",
                    "value": "postman-{{$timestamp}}",
                    "description": "Evita duplicados al reintentar una emisión."
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/invoice/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "invoice",
                    ""
                  ]
                },
                "description": "Creates an electronic invoice.\n\n**`POST /api/v1/bill/receipts/invoice/`**\n\n**Scope requerido:** `invoices:write`\n\n⚠️ **Esta respuesta NO trae el CAE.** Vuelve con `authorization_pending: true` y el comprobante en estado `pendiente`: la autorización ante AFIP se resuelve en segundo plano. Para obtener el CAE hay que **releer el comprobante** (`GET /bill/receipts/{id}/`) hasta que el campo `cae` aparezca.\n\nSi necesitás el CAE en la misma respuesta, usá el flujo de dos pasos: mandá `\"autorizar\": false` acá (crea el borrador) y después `POST /bill/receipts/authorize/{comprobante_id}/`, que **sí es sincrónico** y devuelve el CAE — o el motivo de rechazo de AFIP en el acto.\n\nMandá siempre el header `X-Idempotency-Key`: si se corta la red y reintentás, te devuelve el mismo comprobante en vez de emitir uno duplicado.\n\n⚠️ Un borrador sin autorizar **rompe la numeración** de las emisiones siguientes (AFIP exige numeración consecutiva): autorizalo o borralo. Si te pasa, `POST /bill/receipts/doctor/` resincroniza.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tipo_comprobante\": 6,\n  \"punto_venta\": 1,\n  \"concepto\": 1,\n  \"tipo_documento\": 99,\n  \"numero_documento\": \"0\",\n  \"condicion_iva_receptor_id\": 5,\n  \"razon_social\": \"CONSUMIDOR FINAL\",\n  \"autorizar\": true,\n  \"items\": [\n    {\n      \"descripcion\": \"Servicio de prueba\",\n      \"cantidad\": 1,\n      \"precio_unitario\": 1000,\n      \"IvaId\": 5\n    }\n  ],\n  \"iva_items\": [\n    {\n      \"Id\": 5,\n      \"BaseImp\": 1000,\n      \"Importe\": 210\n    }\n  ],\n  \"importe_total\": 1210,\n  \"importe_neto_gravado\": 1000,\n  \"importe_iva\": 210\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const d = (pm.response.json() || {}).data || {};",
                      "if (d.id) { pm.collectionVariables.set('comprobante_id', d.id); console.log('comprobante_id =', d.id); }",
                      "pm.test('creado (200)', function () { pm.response.to.have.status(200); });",
                      "pm.test('el CAE NO viene en esta respuesta', function () {",
                      "  pm.expect(!d.cae || d.authorization_pending === true).to.be.true;",
                      "});"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Autorizar borrador (devuelve el CAE)",
              "id": "5a9ceb36-489c-550d-8bda-6cf91c027465",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Idempotency-Key",
                    "value": "postman-{{$timestamp}}",
                    "description": "Evita duplicados al reintentar una emisión."
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/authorize/:comprobante_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "authorize",
                    ":comprobante_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Authorizes an electronic receipt with AFIP.\n\n**`POST /api/v1/bill/receipts/authorize/{comprobante_id}/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\nSegundo paso del flujo sincrónico. **Devuelve el CAE en la misma respuesta** (o el rechazo de AFIP con su motivo). Es el camino recomendado si tu integración necesita saber el resultado en el momento.",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Obtener comprobante (releer hasta el CAE)",
              "id": "cdbe7d71-b490-5f64-87ac-de92884b47ee",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Gets a receipt by its ID.\n\n**`GET /api/v1/bill/receipts/{comprobante_id}/`**\n\n**Scope requerido:** `invoices:read`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\nReleé el comprobante acá hasta que aparezca el `cae` (después de un POST de emisión con `autorizar: true`). El id de la ruta es el **`id` (UUID)** del comprobante, no su `_id` de Mongo."
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const d = (pm.response.json() || {}).data || {};",
                      "console.log('estado:', d.estado, '| CAE:', d.cae, '| nro:', d.numero_comprobante);",
                      "pm.test('tiene CAE (reintentá si sigue pendiente)', function () {",
                      "  pm.expect(d.cae).to.be.a('string').and.not.empty;",
                      "});"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Emitir nota de crédito",
              "id": "c2188354-dc57-5330-8ad6-baf77d228a9d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Idempotency-Key",
                    "value": "postman-{{$timestamp}}",
                    "description": "Evita duplicados al reintentar una emisión."
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/credit-note/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "credit-note",
                    ""
                  ]
                },
                "description": "Creates an electronic credit note.\n\n**`POST /api/v1/bill/receipts/credit-note/`**\n\n**Scope requerido:** `invoices:write`\n\nEl comprobante que se anula/ajusta se referencia con **`comprobante_asociado_id`** — el `id` (UUID) del comprobante. **No** existe el campo `comprobantes_asociados`.\n\nVale el mismo flujo asincrónico que la emisión: si mandás `\"autorizar\": true`, la respuesta puede volver `authorization_pending` y hay que releer la nota hasta que tenga `cae`.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"comprobante_asociado_id\": \"{{comprobante_id}}\",\n  \"punto_venta\": 1,\n  \"concepto\": 1,\n  \"autorizar\": true,\n  \"motivo\": \"Devolución de mercadería\",\n  \"items\": [\n    {\n      \"descripcion\": \"Servicio de prueba\",\n      \"cantidad\": 1,\n      \"precio_unitario\": 1000,\n      \"IvaId\": 5\n    }\n  ],\n  \"iva_items\": [\n    {\n      \"Id\": 5,\n      \"BaseImp\": 1000,\n      \"Importe\": 210\n    }\n  ],\n  \"importe_total\": 1210,\n  \"importe_neto_gravado\": 1000,\n  \"importe_iva\": 210\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const d = (pm.response.json() || {}).data || {};",
                      "if (d.id) { pm.collectionVariables.set('comprobante_id', d.id); console.log('comprobante_id =', d.id); }",
                      "pm.test('creado (200)', function () { pm.response.to.have.status(200); });",
                      "pm.test('el CAE NO viene en esta respuesta', function () {",
                      "  pm.expect(!d.cae || d.authorization_pending === true).to.be.true;",
                      "});"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Emitir nota de débito",
              "id": "eda50f0b-b785-5401-8b8b-ddcef35684d5",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Idempotency-Key",
                    "value": "postman-{{$timestamp}}",
                    "description": "Evita duplicados al reintentar una emisión."
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/debit-note/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "debit-note",
                    ""
                  ]
                },
                "description": "Creates an electronic debit note.\n\n**`POST /api/v1/bill/receipts/debit-note/`**\n\n**Scope requerido:** `invoices:write`\n\nEl comprobante asociado se referencia con **`comprobante_asociado_id`** (el UUID del comprobante), no con `comprobantes_asociados`.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"comprobante_asociado_id\": \"{{comprobante_id}}\",\n  \"punto_venta\": 1,\n  \"concepto\": 1,\n  \"autorizar\": true,\n  \"motivo\": \"Intereses por mora\",\n  \"items\": [\n    {\n      \"descripcion\": \"Interés por pago fuera de término\",\n      \"cantidad\": 1,\n      \"precio_unitario\": 500,\n      \"IvaId\": 5\n    }\n  ],\n  \"iva_items\": [\n    {\n      \"Id\": 5,\n      \"BaseImp\": 500,\n      \"Importe\": 105\n    }\n  ],\n  \"importe_total\": 605,\n  \"importe_neto_gravado\": 500,\n  \"importe_iva\": 105\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const d = (pm.response.json() || {}).data || {};",
                      "if (d.id) { pm.collectionVariables.set('comprobante_id', d.id); console.log('comprobante_id =', d.id); }",
                      "pm.test('creado (200)', function () { pm.response.to.have.status(200); });",
                      "pm.test('el CAE NO viene en esta respuesta', function () {",
                      "  pm.expect(!d.cae || d.authorization_pending === true).to.be.true;",
                      "});"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Anular comprobante",
              "id": "08aed03a-2d93-576e-8ebb-564b3bc04222",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/cancel/:comprobante_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "cancel",
                    ":comprobante_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Cancels a receipt by generating a credit note for the total amount.\n\n**`POST /api/v1/bill/receipts/cancel/{comprobante_id}/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"motivo\": \"Anulación por error de carga\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Emitir factura a un cliente de la cuenta",
              "id": "d828996b-ff6b-5ae3-8dfa-3fd0bac89850",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "X-Idempotency-Key",
                    "value": "postman-{{$timestamp}}",
                    "description": "Evita duplicados al reintentar una emisión."
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/invoice/customer/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "invoice",
                    "customer",
                    ""
                  ]
                },
                "description": "Creates an invoice for a specific customer using their tax information.\n\n**`POST /api/v1/bill/receipts/invoice/customer/`**\n\n**Scope requerido:** `invoices:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "PDF del comprobante",
              "id": "fde9f7f7-d149-5dff-8347-3f51ece61c7e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/pdf/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    "pdf",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/bill/receipts/{comprobante_id}/pdf/`**\n\n**Scope requerido:** `invoices:read`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "HTML imprimible",
              "id": "246de9e5-03de-5d9c-8bb2-d86b797703c3",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/print/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    "print",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/bill/receipts/{comprobante_id}/print/`**\n\n**Scope requerido:** `invoices:read`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Link público compartible",
              "id": "71fb7dbd-7152-5120-8129-dae457d0b7f2",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/public-link/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    "public-link",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`POST /api/v1/bill/receipts/{comprobante_id}/public-link/`**\n\n**Scope requerido:** `invoices:read`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Enviar por email",
              "id": "82997e3b-2780-5a40-89f6-826a1e699902",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/send-email/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    "send-email",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Envía la factura PDF por email al cliente.\n\n**`POST /api/v1/bill/receipts/{comprobante_id}/send-email/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Tipos de comprobante",
              "id": "6e083930-66c3-5251-837a-8e2793548189",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/types/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "types",
                    ""
                  ]
                },
                "description": "Gets the supported receipt types.\n\n**`GET /api/v1/bill/receipts/types/`**\n\n**Scope requerido:** `invoices:read`"
              }
            },
            {
              "name": "Tipos habilitados para el contribuyente",
              "id": "63e68514-119f-5843-8511-bfe3bf21f842",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/supported-types/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "supported-types",
                    ""
                  ]
                },
                "description": "Gets the list of supported receipt types.\n\n**`GET /api/v1/bill/receipts/supported-types/`**\n\n**Scope requerido:** `invoices:read`"
              }
            },
            {
              "name": "Doctor — diagnosticar/resincronizar numeración",
              "id": "7ea66217-dba7-5e0c-82db-dcf0f8ce579b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/doctor/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "doctor",
                    ""
                  ]
                },
                "description": "Diagnostica y repara la numeración de comprobantes contra AFIP.\n\n**`POST /api/v1/bill/receipts/doctor/`**\n\n**Scope requerido:** `invoices:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"punto_venta\": 1,\n  \"tipo_comprobante\": 6\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Probar conexión con AFIP",
              "id": "c7a0467c-9a3f-5a6e-8dcc-851990c911fa",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/test-environment/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "test-environment",
                    ""
                  ]
                },
                "description": "Endpoint to test the connection with AFIP in different environments.\n\n**`POST /api/v1/bill/receipts/test-environment/`**\n\n**Scope requerido:** `invoices:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{comprobante_id}/pdf/cache/",
              "id": "582c4d98-547e-589d-8be4-8dfbcf15faa1",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/pdf/cache/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    "pdf",
                    "cache",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`DELETE /api/v1/bill/receipts/{comprobante_id}/pdf/cache/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "notes/calculate-amounts/",
              "id": "1cd72e52-b919-5d33-8cdf-bb2d88e3c16d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/notes/calculate-amounts/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "notes",
                    "calculate-amounts",
                    ""
                  ]
                },
                "description": "Automatically calculates the amounts of a note based on the original receipt.\n\n**`POST /api/v1/bill/receipts/notes/calculate-amounts/`**\n\n**Scope requerido:** `invoices:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "notes/reasons/{tipo_nota}/ — Gets the available reasons/motives for credit/debit notes",
              "id": "ac675807-60a9-58f6-855b-a82890ac7b92",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/notes/reasons/:tipo_nota/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "notes",
                    "reasons",
                    ":tipo_nota",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "tipo_nota",
                      "value": "{{tipo_nota}}",
                      "description": "credito | debito"
                    }
                  ]
                },
                "description": "Gets the available reasons/motives for credit/debit notes.\n\n**`GET /api/v1/bill/receipts/notes/reasons/{tipo_nota}/`**\n\n**Scope requerido:** `invoices:read`\n\n**Variables de path:**\n- `:tipo_nota` — credito | debito"
              }
            },
            {
              "name": "notes/validate-amounts/",
              "id": "adcaa904-338e-58cb-8c78-0bee5dc13896",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/notes/validate-amounts/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "notes",
                    "validate-amounts",
                    ""
                  ]
                },
                "description": "Validates that the amounts of a note are consistent with the original receipt.\n\n**`POST /api/v1/bill/receipts/notes/validate-amounts/`**\n\n**Scope requerido:** `invoices:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "preview-type/",
              "id": "6a691046-5a50-5e5f-8646-c138c9bc433b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/preview-type/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "preview-type",
                    ""
                  ]
                },
                "description": "Previews what type of receipt would be generated with the provided data.\n\n**`POST /api/v1/bill/receipts/preview-type/`**\n\n**Scope requerido:** `invoices:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "validate-type/{tipo_comprobante}/ — Specifically validates an invoice for a given receipt type",
              "id": "7284fd9b-01ff-5998-8ef5-6c77c926b2b2",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/validate-type/:tipo_comprobante/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "validate-type",
                    ":tipo_comprobante",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "tipo_comprobante",
                      "value": "{{tipo_comprobante}}",
                      "description": "Código AFIP del tipo de comprobante (1=Factura A, 6=Factura B, 11=Factura C…)."
                    }
                  ]
                },
                "description": "Specifically validates an invoice for a given receipt type.\n\n**`POST /api/v1/bill/receipts/validate-type/{tipo_comprobante}/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:tipo_comprobante` — Código AFIP del tipo de comprobante (1=Factura A, 6=Factura B, 11=Factura C…).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "wsmtxca/diagnose/",
              "id": "574fa545-1b80-5ffe-8711-e850d4919772",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/wsmtxca/diagnose/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    "wsmtxca",
                    "diagnose",
                    ""
                  ]
                },
                "description": "Diagnóstico aislado de WSMTXCA — ejecuta dummy + auth + (opcional) dry-run\n\n**`POST /api/v1/bill/receipts/wsmtxca/diagnose/`**\n\n**Scope requerido:** `invoices:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar borrador",
              "id": "8bf2bac5-8475-5940-82ba-b252964383b9",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Updates a comprobante's status.\n\n**`PUT /api/v1/bill/receipts/{comprobante_id}/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar borrador (parcial)",
              "id": "d7e129a5-f1a0-5880-8029-1321da9739de",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Full edit of a pending comprobante (draft bill).\n\n**`PATCH /api/v1/bill/receipts/{comprobante_id}/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar borrador",
              "id": "485e46a4-f69c-5f85-8d90-c147aabf4790",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/receipts/:comprobante_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "receipts",
                    ":comprobante_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "comprobante_id",
                      "value": "{{comprobante_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Deletes an electronic receipt.\n\n**`DELETE /api/v1/bill/receipts/{comprobante_id}/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:comprobante_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            }
          ]
        },
        {
          "name": "CAEA (contingencia)",
          "id": "a8bfc6ce-3df3-53d6-841c-08f85b52b6d8",
          "description": "`/api/v1/bill/caea` · 6 endpoints · scopes: `invoices:read`, `invoices:write`",
          "item": [
            {
              "name": "Listar CAEA",
              "id": "56511333-0fb6-5050-8e16-092e042ad6ac",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/caea/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "caea",
                    ""
                  ]
                },
                "description": "List all CAEA codes for this tenant.\n\n**`GET /api/v1/bill/caea/`**\n\n**Scope requerido:** `invoices:read`"
              }
            },
            {
              "name": "Solicitar CAEA",
              "id": "802a7569-4b9d-5cb7-83b5-44a0c38da730",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/caea/solicitar/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "caea",
                    "solicitar",
                    ""
                  ]
                },
                "description": "Manually request a CAEA. Usually automatic, but available for manual trigger.\n\n**`POST /api/v1/bill/caea/solicitar/`**\n\n**Scope requerido:** `invoices:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "CAEA vigente",
              "id": "ac64612c-bcf5-5dbe-8c38-2ba368ae8f56",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/caea/vigente/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "caea",
                    "vigente",
                    ""
                  ]
                },
                "description": "Get the currently active CAEA code.\n\n**`GET /api/v1/bill/caea/vigente/`**\n\n**Scope requerido:** `invoices:read`"
              }
            },
            {
              "name": "{caea_id}/informar/ — Manually trigger reporting for a specific CAEA",
              "id": "b526a88d-bb91-5a2e-88ac-ceb569b5f644",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/caea/:caea_id/informar/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "caea",
                    ":caea_id",
                    "informar",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "caea_id",
                      "value": "{{caea_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Manually trigger reporting for a specific CAEA.\n\n**`POST /api/v1/bill/caea/{caea_id}/informar/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:caea_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "pending-count/ — Get the count of CAEA codes pending reporting",
              "id": "3092c750-42f3-52d3-86b9-ebd482e849f3",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/caea/pending-count/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "caea",
                    "pending-count",
                    ""
                  ]
                },
                "description": "Get the count of CAEA codes pending reporting.\n\n**`GET /api/v1/bill/caea/pending-count/`**\n\n**Scope requerido:** `invoices:read`"
              }
            },
            {
              "name": "status/ — Get CAEA system status for this tenant",
              "id": "c7166afc-5a3d-5a65-8639-2b3bf300a43d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/caea/status/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "caea",
                    "status",
                    ""
                  ]
                },
                "description": "Get CAEA system status for this tenant.\n\n**`GET /api/v1/bill/caea/status/`**\n\n**Scope requerido:** `invoices:read`"
              }
            }
          ]
        },
        {
          "name": "FCE MiPyME",
          "id": "62db3472-7a93-5fef-87ef-652e556ed4ef",
          "description": "`/api/v1/fce` · 6 endpoints · scopes: `invoices:read`, `invoices:write`",
          "item": [
            {
              "name": "eligibility/",
              "id": "82c29ebf-c640-5fbf-8c30-7e20728a9588",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/fce/eligibility/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fce",
                    "eligibility",
                    ""
                  ]
                },
                "description": "**`POST /api/v1/fce/eligibility/`**\n\n**Scope requerido:** `invoices:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"condicion_iva\": \"\",\n  \"fecha_comprobante\": \"2026-01-31\",\n  \"fecha_vencimiento_pago\": \"2026-01-31\",\n  \"importe_total\": 0,\n  \"metadata\": {},\n  \"tipo_comprobante\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "events/{fce_invoice_id}/",
              "id": "215cf75e-9ae5-5c5e-8c6f-4b774f9e526b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fce/events/:fce_invoice_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fce",
                    "events",
                    ":fce_invoice_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "fce_invoice_id",
                      "value": "{{fce_invoice_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/fce/events/{fce_invoice_id}/`**\n\n**Scope requerido:** `invoices:read`\n\n**Variables de path:**\n- `:fce_invoice_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "events/{fce_invoice_id}/",
              "id": "8545c1f9-b26b-50f0-8b91-13ee24fcfc3e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/fce/events/:fce_invoice_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fce",
                    "events",
                    ":fce_invoice_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "fce_invoice_id",
                      "value": "{{fce_invoice_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`POST /api/v1/fce/events/{fce_invoice_id}/`**\n\n**Scope requerido:** `invoices:write`\n\n**Variables de path:**\n- `:fce_invoice_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `event_type`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "issued/",
              "id": "6db6fdd7-16d2-51a9-8c0f-cd02b97e7cdb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fce/issued/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fce",
                    "issued",
                    ""
                  ]
                },
                "description": "List invoices that were issued as FCE MiPyME with their current lifecycle\n\n**`GET /api/v1/fce/issued/`**\n\n**Scope requerido:** `invoices:read`"
              }
            },
            {
              "name": "threshold/",
              "id": "97a28fa9-f607-52e4-8b7c-f221219546e0",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fce/threshold/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fce",
                    "threshold",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/fce/threshold/`**\n\n**Scope requerido:** `invoices:read`"
              }
            },
            {
              "name": "threshold/",
              "id": "b89f33d0-7a94-5bcc-854d-c5dba436d30c",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/fce/threshold/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fce",
                    "threshold",
                    ""
                  ]
                },
                "description": "**`PUT /api/v1/fce/threshold/`**\n\n**Scope requerido:** `invoices:write`\n\n**Campos requeridos:** `value`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"value\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Configuración fiscal",
          "id": "549a2897-a828-5bec-87db-a44af42ee0c4",
          "description": "`/api/v1/bill/tax_info` · 25 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "Datos fiscales del contribuyente",
              "id": "105cb101-30f0-5610-807c-e3971c6a95c6",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    ""
                  ]
                },
                "description": "Obtiene la información fiscal del sistema activo.\n\n**`GET /api/v1/bill/tax_info/taxpayer/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "Sistemas de facturación configurados",
              "id": "f678662c-ccc4-5f86-8947-2ca168658357",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/systems/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    "systems",
                    ""
                  ]
                },
                "description": "Lista todos los sistemas de facturación disponibles y configurados.\n\n**`GET /api/v1/bill/tax_info/taxpayer/systems/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "afip-activities/ — List the tenant's AFIP activities",
              "id": "9faf3afc-2611-5914-8627-6c81c2a76054",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/afip-activities/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "afip-activities",
                    ""
                  ]
                },
                "description": "List the tenant's AFIP activities.\n\n**`GET /api/v1/bill/tax_info/afip-activities/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "afip-activities/",
              "id": "a5a5a3de-a3c6-56fb-8c51-84df6d07b737",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/afip-activities/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "afip-activities",
                    ""
                  ]
                },
                "description": "**`POST /api/v1/bill/tax_info/afip-activities/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "afip-activities/{activity_id}/",
              "id": "6848c04b-5fee-5074-8b46-191532ded4f5",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/afip-activities/:activity_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "afip-activities",
                    ":activity_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "activity_id",
                      "value": "{{activity_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`DELETE /api/v1/bill/tax_info/afip-activities/{activity_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:activity_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "afip-activities/{activity_id}/",
              "id": "120cc4d6-023a-5735-867d-16eafb62f86a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/afip-activities/:activity_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "afip-activities",
                    ":activity_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "activity_id",
                      "value": "{{activity_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/bill/tax_info/afip-activities/{activity_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:activity_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "afip-activities/{activity_id}/",
              "id": "64389006-91c8-5417-881e-bfe0dacb7b5a",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/afip-activities/:activity_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "afip-activities",
                    ":activity_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "activity_id",
                      "value": "{{activity_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`PUT /api/v1/bill/tax_info/afip-activities/{activity_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:activity_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "afip-activities/import-from-afip/ — Query the tenant's OWN CUIT in the padrón (A13, which carries the CAES",
              "id": "f881d880-b353-5bba-8777-e98ab7a7526d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/afip-activities/import-from-afip/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "afip-activities",
                    "import-from-afip",
                    ""
                  ]
                },
                "description": "Query the tenant's OWN CUIT in the padrón (A13, which carries the CAES\n\n**`POST /api/v1/bill/tax_info/afip-activities/import-from-afip/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "afip-environment/ — Cambia el entorno AFIP del tenant (producción / homologación)",
              "id": "31b218a6-aaac-5270-829f-940e55a0e435",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/afip-environment/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "afip-environment",
                    ""
                  ]
                },
                "description": "Cambia el entorno AFIP del tenant (producción / homologación).\n\n**`POST /api/v1/bill/tax_info/afip-environment/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "tax-rules/ — List all tax rules for the tenant",
              "id": "e5810222-12eb-5e05-8c14-93c4b163d140",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/tax-rules/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "tax-rules",
                    ""
                  ]
                },
                "description": "List all tax rules for the tenant.\n\n**`GET /api/v1/bill/tax_info/tax-rules/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "tax-rules/ — Create a new tax rule",
              "id": "33f70bf7-b898-5926-8cda-cdda105d3ca9",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/tax-rules/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "tax-rules",
                    ""
                  ]
                },
                "description": "Create a new tax rule.\n\n**`POST /api/v1/bill/tax_info/tax-rules/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "tax-rules/{rule_id}/ — Soft-delete a tax rule (deactivate)",
              "id": "67877879-4abb-58b5-8e49-45318cd4db14",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/tax-rules/:rule_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "tax-rules",
                    ":rule_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rule_id",
                      "value": "{{rule_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Soft-delete a tax rule (deactivate).\n\n**`DELETE /api/v1/bill/tax_info/tax-rules/{rule_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:rule_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "tax-rules/{rule_id}/ — Get a single tax rule",
              "id": "18e11d34-8b3c-55af-8026-49ff22980545",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/tax-rules/:rule_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "tax-rules",
                    ":rule_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rule_id",
                      "value": "{{rule_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get a single tax rule.\n\n**`GET /api/v1/bill/tax_info/tax-rules/{rule_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:rule_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "tax-rules/{rule_id}/ — Update an existing tax rule",
              "id": "f15cd6bc-2f16-5598-8520-fbd9b647a78b",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/tax-rules/:rule_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "tax-rules",
                    ":rule_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "rule_id",
                      "value": "{{rule_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update an existing tax rule.\n\n**`PUT /api/v1/bill/tax_info/tax-rules/{rule_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:rule_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "tax-rules/by-country/{country}/ — Get all active tax rules for a specific country",
              "id": "d5b843e2-e71f-5d63-8912-f97d9b8eeb41",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/tax-rules/by-country/:country/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "tax-rules",
                    "by-country",
                    ":country",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "country",
                      "value": "{{country}}",
                      "description": "Código ISO del país (AR, UY, BR, BO…)."
                    }
                  ]
                },
                "description": "Get all active tax rules for a specific country.\n\n**`GET /api/v1/bill/tax_info/tax-rules/by-country/{country}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:country` — Código ISO del país (AR, UY, BR, BO…)."
              }
            },
            {
              "name": "tax-rules/seed/{country}/ — Seed default tax rules for a country (IVA alícuotas)",
              "id": "359fe8bb-3fe7-53ec-8636-fbe0232c4d1e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/tax-rules/seed/:country/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "tax-rules",
                    "seed",
                    ":country",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "country",
                      "value": "{{country}}",
                      "description": "Código ISO del país (AR, UY, BR, BO…)."
                    }
                  ]
                },
                "description": "Seed default tax rules for a country (IVA alícuotas).\n\n**`POST /api/v1/bill/tax_info/tax-rules/seed/{country}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:country` — Código ISO del país (AR, UY, BR, BO…).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "taxpayer/{billing_system}/ — Elimina la configuración de un sistema de facturación",
              "id": "fca1f920-a704-574b-8892-de6c78646beb",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/:billing_system/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    ":billing_system",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "billing_system",
                      "value": "{{billing_system}}",
                      "description": "Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
                    }
                  ]
                },
                "description": "Elimina la configuración de un sistema de facturación.\n\n**`DELETE /api/v1/bill/tax_info/taxpayer/{billing_system}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:billing_system` — Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
              }
            },
            {
              "name": "taxpayer/{billing_system}/ — Obtiene la información fiscal de un sistema específico",
              "id": "af0aee0c-4932-54be-8b85-d811f7f85315",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/:billing_system/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    ":billing_system",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "billing_system",
                      "value": "{{billing_system}}",
                      "description": "Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
                    }
                  ]
                },
                "description": "Obtiene la información fiscal de un sistema específico.\n\n**`GET /api/v1/bill/tax_info/taxpayer/{billing_system}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:billing_system` — Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
              }
            },
            {
              "name": "taxpayer/{billing_system}/ — Crea o actualiza la información fiscal de un sistema específico",
              "id": "937188ea-f832-5d09-86d2-02dd4915a35e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/:billing_system/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    ":billing_system",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "billing_system",
                      "value": "{{billing_system}}",
                      "description": "Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
                    }
                  ]
                },
                "description": "Crea o actualiza la información fiscal de un sistema específico.\n\n**`POST /api/v1/bill/tax_info/taxpayer/{billing_system}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:billing_system` — Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "taxpayer/{billing_system}/ — Crea o actualiza la información fiscal de un sistema específico",
              "id": "78a96615-5c4b-589c-8591-60ae71c8ecf8",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/:billing_system/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    ":billing_system",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "billing_system",
                      "value": "{{billing_system}}",
                      "description": "Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
                    }
                  ]
                },
                "description": "Crea o actualiza la información fiscal de un sistema específico.\n\n**`PUT /api/v1/bill/tax_info/taxpayer/{billing_system}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:billing_system` — Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "taxpayer/{billing_system}/authorization-mode/ — Actualiza el modo de autorización para un sistema específico",
              "id": "78b23988-5864-5e4f-8c03-afa93bfc6956",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/:billing_system/authorization-mode/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    ":billing_system",
                    "authorization-mode",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "billing_system",
                      "value": "{{billing_system}}",
                      "description": "Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
                    }
                  ]
                },
                "description": "Actualiza el modo de autorización para un sistema específico.\n\n**`PATCH /api/v1/bill/tax_info/taxpayer/{billing_system}/authorization-mode/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:billing_system` — Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "taxpayer/{billing_system}/certificate/ — Sube un certificado digital para un sistema específico",
              "id": "466bd78e-c082-5341-8f66-83670c1dd8c3",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/:billing_system/certificate/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    ":billing_system",
                    "certificate",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "billing_system",
                      "value": "{{billing_system}}",
                      "description": "Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
                    }
                  ]
                },
                "description": "Sube un certificado digital para un sistema específico.\n\n**`POST /api/v1/bill/tax_info/taxpayer/{billing_system}/certificate/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:billing_system` — Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "taxpayer/active-system/ — Establece el sistema de facturación activo",
              "id": "6538c17c-3897-5164-8c1f-fdef6accba48",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/taxpayer/active-system/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "taxpayer",
                    "active-system",
                    ""
                  ]
                },
                "description": "Establece el sistema de facturación activo.\n\n**`PATCH /api/v1/bill/tax_info/taxpayer/active-system/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "verify-delegation/",
              "id": "f4108525-d982-5f7a-89a5-7d9c42c1882d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/verify-delegation/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "verify-delegation",
                    ""
                  ]
                },
                "description": "Verifica que el CUIT del cliente haya delegado WSFE al CUIT de YoFacturo.\n\n**`POST /api/v1/bill/tax_info/verify-delegation/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "verify-punto-venta/",
              "id": "f999943a-461f-5ed1-8dea-03b9b09d0f60",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/bill/tax_info/verify-punto-venta/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "bill",
                    "tax_info",
                    "verify-punto-venta",
                    ""
                  ]
                },
                "description": "Verifica que un punto de venta exista y esté habilitado en AFIP para el CUIT del cliente.\n\n**`POST /api/v1/bill/tax_info/verify-punto-venta/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Compras",
      "id": "c25a1156-16f4-5419-8a60-4ab3c062e371",
      "description": "Proveedores, gastos y comprobantes recibidos.",
      "item": [
        {
          "name": "Proveedores",
          "id": "72fa0088-cc82-5c35-83a9-7e43f7aa1a0d",
          "description": "`/api/v1/suppliers` · 10 endpoints · scopes: `suppliers:read`, `suppliers:write`",
          "item": [
            {
              "name": "Listar proveedores",
              "id": "517045c1-e534-5743-83e7-25a29e6b6ae1",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/suppliers/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/suppliers/list/`**\n\n**Scope requerido:** `suppliers:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('supplier_id', items[0].id);",
                      "  console.log('supplier_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener proveedor",
              "id": "5a4215ba-4119-55cb-8491-0b5e4b93c586",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/suppliers/:supplier_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    ":supplier_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supplier_id",
                      "value": "{{supplier_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/suppliers/{supplier_id}/`**\n\n**Scope requerido:** `suppliers:read`\n\n**Variables de path:**\n- `:supplier_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear proveedor",
              "id": "0adc8cb1-aa9a-5fec-8a55-d4a4714a0b77",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/suppliers/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/suppliers/`**\n\n**Scope requerido:** `suppliers:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar proveedor",
              "id": "c87e1f51-62a7-5007-8b96-8c6e78180052",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/suppliers/:supplier_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    ":supplier_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supplier_id",
                      "value": "{{supplier_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/suppliers/{supplier_id}/`**\n\n**Scope requerido:** `suppliers:write`\n\n**Variables de path:**\n- `:supplier_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"\",\n  \"category\": \"\",\n  \"contact_name\": \"\",\n  \"email\": \"cliente@ejemplo.com\",\n  \"fiscal_info\": {},\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar proveedor",
              "id": "654f759a-bd90-510d-88c9-750ce1072a91",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/suppliers/:supplier_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    ":supplier_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "supplier_id",
                      "value": "{{supplier_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/suppliers/{supplier_id}/`**\n\n**Scope requerido:** `suppliers:write`\n\n**Variables de path:**\n- `:supplier_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "9eb8bba9-ef1f-5c69-8a9f-75edc043ac60",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/suppliers/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/suppliers/tags/`**\n\n**Scope requerido:** `suppliers:read`"
              }
            },
            {
              "name": "Alta masiva de proveedores (alias obsoleto)",
              "id": "2c610377-df5b-585f-884f-449989d282b6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/suppliers/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/suppliers/batch-create/`**\n\n**Scope requerido:** `suppliers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de proveedores",
              "id": "f4e8040d-1d82-5e7d-8c3a-a99c03368609",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/suppliers/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/suppliers/bulk/create/`**\n\n**Scope requerido:** `suppliers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de proveedores",
              "id": "d1f9bf9b-a89f-5d01-8d8a-21dd482cc0d9",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/suppliers/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/suppliers/bulk/delete/`**\n\n**Scope requerido:** `suppliers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de proveedores",
              "id": "baf68765-0ac8-5a56-8780-25915c8623f4",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/suppliers/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "suppliers",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/suppliers/bulk/update/`**\n\n**Scope requerido:** `suppliers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Gastos",
          "id": "5018dce3-c537-56a1-8171-d46f27f2c462",
          "description": "`/api/v1/expenses` · 10 endpoints · scopes: `expenses:read`, `expenses:write`",
          "item": [
            {
              "name": "Listar gastos",
              "id": "b8d44447-447d-5751-8314-078088d31fc4",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/expenses/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/expenses/list/`**\n\n**Scope requerido:** `expenses:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('expense_id', items[0].id);",
                      "  console.log('expense_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener gasto",
              "id": "34328a68-19ac-5f85-8358-829f0545bc91",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/expenses/:expense_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    ":expense_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "expense_id",
                      "value": "{{expense_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/expenses/{expense_id}/`**\n\n**Scope requerido:** `expenses:read`\n\n**Variables de path:**\n- `:expense_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear gasto",
              "id": "440c13d6-ee8a-5d04-82ce-fc1b627cf76c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/expenses/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/expenses/`**\n\n**Scope requerido:** `expenses:write`\n\n**Campos requeridos:** `amount`, `description`, `tax_rate`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 0,\n  \"description\": \"\",\n  \"tax_rate\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar gasto",
              "id": "efa88df1-a798-5ace-8667-3f792e63b700",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/expenses/:expense_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    ":expense_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "expense_id",
                      "value": "{{expense_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/expenses/{expense_id}/`**\n\n**Scope requerido:** `expenses:write`\n\n**Variables de path:**\n- `:expense_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 0,\n  \"category\": \"\",\n  \"cotizacion\": 0,\n  \"date\": \"2026-01-31\",\n  \"description\": \"\",\n  \"iva_items\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar gasto",
              "id": "5339adba-ae09-5b51-81d3-811a792c0308",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/expenses/:expense_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    ":expense_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "expense_id",
                      "value": "{{expense_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/expenses/{expense_id}/`**\n\n**Scope requerido:** `expenses:write`\n\n**Variables de path:**\n- `:expense_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "c8c2f59a-de17-5c03-841b-c9f9706ef7b7",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/expenses/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/expenses/tags/`**\n\n**Scope requerido:** `expenses:read`"
              }
            },
            {
              "name": "Alta masiva de gastos (alias obsoleto)",
              "id": "cd4f0a70-ca72-5d90-8b02-10ccf4c3563d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/expenses/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/expenses/batch-create/`**\n\n**Scope requerido:** `expenses:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de gastos",
              "id": "fa1120b7-f3dd-55e1-88b4-519b8d28688f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/expenses/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/expenses/bulk/create/`**\n\n**Scope requerido:** `expenses:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de gastos",
              "id": "3ab25c2b-e72c-52c4-8e02-23971336264f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/expenses/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/expenses/bulk/delete/`**\n\n**Scope requerido:** `expenses:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de gastos",
              "id": "1f1f572a-39a5-5421-845a-c1076d7a56ef",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/expenses/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "expenses",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/expenses/bulk/update/`**\n\n**Scope requerido:** `expenses:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Comprobantes recibidos",
          "id": "971808fc-35a9-5fd8-82e1-4cfc7ef08516",
          "description": "`/api/v1/received_invoices` · 10 endpoints · scopes: `received_invoices:read`, `received_invoices:write`",
          "item": [
            {
              "name": "Listar comprobantes recibidos",
              "id": "98e00d8a-96a2-590d-8f76-c85ad6edb323",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/received_invoices/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/received_invoices/list/`**\n\n**Scope requerido:** `received_invoices:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('received_invoice_id', items[0].id);",
                      "  console.log('received_invoice_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener comprobante recibido",
              "id": "1c8ed0e4-0547-5a27-81fc-6fc8fad73464",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/received_invoices/:received_invoice_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    ":received_invoice_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "received_invoice_id",
                      "value": "{{received_invoice_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/received_invoices/{received_invoice_id}/`**\n\n**Scope requerido:** `received_invoices:read`\n\n**Variables de path:**\n- `:received_invoice_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear comprobante recibido",
              "id": "6e4fb24a-8dde-53c4-8c5a-ade0b2b0e8d1",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/received_invoices/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/received_invoices/`**\n\n**Scope requerido:** `received_invoices:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar comprobante recibido",
              "id": "d6082c04-48a2-59c5-88b2-1829c64d0a38",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/received_invoices/:received_invoice_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    ":received_invoice_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "received_invoice_id",
                      "value": "{{received_invoice_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/received_invoices/{received_invoice_id}/`**\n\n**Scope requerido:** `received_invoices:write`\n\n**Variables de path:**\n- `:received_invoice_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar comprobante recibido",
              "id": "26b14b77-aad6-594b-88ff-db54db4c3b5c",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/received_invoices/:received_invoice_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    ":received_invoice_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "received_invoice_id",
                      "value": "{{received_invoice_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/received_invoices/{received_invoice_id}/`**\n\n**Scope requerido:** `received_invoices:write`\n\n**Variables de path:**\n- `:received_invoice_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "71d4dc01-5493-5950-8dd5-b98fbe5b9b36",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/received_invoices/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/received_invoices/tags/`**\n\n**Scope requerido:** `received_invoices:read`"
              }
            },
            {
              "name": "Alta masiva de comprobantes recibidos (alias obsoleto)",
              "id": "6e61c82a-3e91-5874-8cfe-47f19f275d3e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/received_invoices/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/received_invoices/batch-create/`**\n\n**Scope requerido:** `received_invoices:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de comprobantes recibidos",
              "id": "83c714ca-ce7e-5454-8c1d-412d7212f335",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/received_invoices/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/received_invoices/bulk/create/`**\n\n**Scope requerido:** `received_invoices:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de comprobantes recibidos",
              "id": "937a48e5-6ec8-5170-86d6-2ad01dc98ca8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/received_invoices/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/received_invoices/bulk/delete/`**\n\n**Scope requerido:** `received_invoices:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de comprobantes recibidos",
              "id": "6466eef3-e19e-5321-8c6e-0416a48c1a4f",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/received_invoices/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "received_invoices",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/received_invoices/bulk/update/`**\n\n**Scope requerido:** `received_invoices:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Clientes",
      "id": "be321c4a-9c38-52d1-8a6b-acd4c91dbf28",
      "description": "Clientes, cuentas corrientes, CRM, turnos y contratos.",
      "item": [
        {
          "name": "Clientes",
          "id": "acdb3cb4-9f3e-506b-8d19-6a6cb9c445c3",
          "description": "`/api/v1/customers` · 10 endpoints · scopes: `customers:read`, `customers:write`",
          "item": [
            {
              "name": "Listar clientes",
              "id": "5c9f41c9-b9f4-5d3b-85a6-73e400815dfc",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/customers/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/customers/list/`**\n\n**Scope requerido:** `customers:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('customer_id', items[0].id);",
                      "  console.log('customer_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener cliente",
              "id": "4eb51e30-5cb5-5bd8-8fe4-c45a0f4d2a02",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/customers/:customer_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    ":customer_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "customer_id",
                      "value": "{{customer_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/customers/{customer_id}/`**\n\n**Scope requerido:** `customers:read`\n\n**Variables de path:**\n- `:customer_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear cliente",
              "id": "c2fcb5bc-a7e2-5d6f-808c-cecba54f5931",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/customers/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/customers/`**\n\n**Scope requerido:** `customers:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Cliente de prueba SRL\",\n  \"document_type\": \"cuit\",\n  \"document_number\": \"30709653543\",\n  \"email\": \"contacto@cliente-de-prueba.com\",\n  \"phone\": \"+5493415551234\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar cliente",
              "id": "51305556-2551-5ca7-83a8-e9b6803200da",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/customers/:customer_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    ":customer_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "customer_id",
                      "value": "{{customer_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/customers/{customer_id}/`**\n\n**Scope requerido:** `customers:write`\n\n**Variables de path:**\n- `:customer_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"\",\n  \"credit_blocked\": false,\n  \"credit_limit\": 0,\n  \"custom_fields\": {},\n  \"customer_email\": \"cliente@ejemplo.com\",\n  \"document_number\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar cliente",
              "id": "1613cbf1-6b35-5d6a-80e0-683d60b6862b",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/customers/:customer_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    ":customer_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "customer_id",
                      "value": "{{customer_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/customers/{customer_id}/`**\n\n**Scope requerido:** `customers:write`\n\n**Variables de path:**\n- `:customer_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "c3aa2abd-cd13-5025-8ed7-9836b7e2adcb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/customers/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/customers/tags/`**\n\n**Scope requerido:** `customers:read`"
              }
            },
            {
              "name": "Alta masiva de clientes (alias obsoleto)",
              "id": "382a1178-796c-5093-87a1-560358a6ec20",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/customers/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/customers/batch-create/`**\n\n**Scope requerido:** `customers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {\n      \"name\": \"Cliente de prueba SRL\",\n      \"document_type\": \"cuit\",\n      \"document_number\": \"30709653543\",\n      \"email\": \"contacto@cliente-de-prueba.com\",\n      \"phone\": \"+5493415551234\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de clientes",
              "id": "4834ce63-e293-5ab2-8a9f-d34d2a1af021",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/customers/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/customers/bulk/create/`**\n\n**Scope requerido:** `customers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {\n      \"name\": \"Cliente de prueba SRL\",\n      \"document_type\": \"cuit\",\n      \"document_number\": \"30709653543\",\n      \"email\": \"contacto@cliente-de-prueba.com\",\n      \"phone\": \"+5493415551234\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de clientes",
              "id": "ba5c6c83-259e-5196-896e-fc80153ded42",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/customers/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/customers/bulk/delete/`**\n\n**Scope requerido:** `customers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de clientes",
              "id": "c6f6bc2a-f40b-5cc9-840c-3d817ebda2b6",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/customers/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "customers",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/customers/bulk/update/`**\n\n**Scope requerido:** `customers:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Cuentas corrientes",
          "id": "7dee4d4b-e27a-5606-84e0-c521aabf184a",
          "description": "`/api/v1/current-accounts` · 24 endpoints · scopes: `current_accounts:read`, `current_accounts:write`",
          "item": [
            {
              "name": "Listar cuentas corrientes",
              "id": "63fe2208-0c16-57e5-8440-5a0367d02d36",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ""
                  ]
                },
                "description": "List all current accounts with optional filters\n\n**`GET /api/v1/current-accounts/`**\n\n**Scope requerido:** `current_accounts:read`"
              }
            },
            {
              "name": "Obtener cuenta corriente",
              "id": "c0a23964-6224-5c62-8662-200f86cf8543",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get current account by ID\n\n**`GET /api/v1/current-accounts/{account_id}/`**\n\n**Scope requerido:** `current_accounts:read`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear cuenta corriente",
              "id": "6126ab79-4e9d-5a53-8625-bbc58274e44f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ""
                  ]
                },
                "description": "Create new current account\n\n**`POST /api/v1/current-accounts/`**\n\n**Scope requerido:** `current_accounts:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar cuenta corriente",
              "id": "beb32a00-5637-5fde-87da-897654c33f10",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update current account configuration\n\n**`PUT /api/v1/current-accounts/{account_id}/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar cuenta corriente",
              "id": "2a22b143-a2e9-5eea-8be9-f680fe7ff393",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Soft-delete current account, preserving movements and applications for audit.\n\n**`DELETE /api/v1/current-accounts/{account_id}/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{account_id}/adjust/ — Adjust account balance manually",
              "id": "629df2ba-4e10-5fb7-8dd3-5dbbd4273354",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/adjust/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "adjust",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Adjust account balance manually\n\n**`POST /api/v1/current-accounts/{account_id}/adjust/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{account_id}/credit-limit/ — Check credit limit status",
              "id": "e696158b-2b98-5206-8a7b-69f635830974",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/credit-limit/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "credit-limit",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Check credit limit status\n\n**`GET /api/v1/current-accounts/{account_id}/credit-limit/`**\n\n**Scope requerido:** `current_accounts:read`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{account_id}/interest/apply/ — Apply interest to overdue movements",
              "id": "bd4280b3-4df6-5bfa-80a7-e0447b4d43d1",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/interest/apply/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "interest",
                    "apply",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Apply interest to overdue movements\n\n**`POST /api/v1/current-accounts/{account_id}/interest/apply/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{account_id}/interest/preview/ — Preview interest calculation without applying",
              "id": "e571064f-8ac2-5aa3-8106-dfd331ebe2e4",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/interest/preview/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "interest",
                    "preview",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Preview interest calculation without applying\n\n**`GET /api/v1/current-accounts/{account_id}/interest/preview/`**\n\n**Scope requerido:** `current_accounts:read`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{account_id}/invoices/ — Register an invoice as a DEBIT movement in the current account",
              "id": "3d8b55f8-1a13-5315-83e6-caf4f7e6dd48",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/invoices/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "invoices",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Register an invoice as a DEBIT movement in the current account.\n\n**`POST /api/v1/current-accounts/{account_id}/invoices/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{account_id}/movements/ — Get account movements",
              "id": "d9aeb0f0-4f8a-523b-85b8-69905b473651",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/movements/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "movements",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get account movements\n\n**`GET /api/v1/current-accounts/{account_id}/movements/`**\n\n**Scope requerido:** `current_accounts:read`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{account_id}/movements/{movement_id}/ — Delete a payment movement and reverse all its applications",
              "id": "aab6838b-a971-52fa-87eb-79f979c166bc",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/movements/:movement_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "movements",
                    ":movement_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    },
                    {
                      "key": "movement_id",
                      "value": "{{movement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete a payment movement and reverse all its applications.\n\n**`DELETE /api/v1/current-accounts/{account_id}/movements/{movement_id}/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n- `:movement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{account_id}/payments/ — Register payment",
              "id": "5f04fd71-f0ef-5f04-8a39-e9eaed5f6291",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/payments/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "payments",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Register payment\n\n**`POST /api/v1/current-accounts/{account_id}/payments/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{account_id}/payments/apply-fifo/",
              "id": "3edd8204-ddd6-5122-8923-3d5e04ee8d32",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/payments/apply-fifo/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "payments",
                    "apply-fifo",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Apply a payment automatically using FIFO against oldest outstanding invoices.\n\n**`POST /api/v1/current-accounts/{account_id}/payments/apply-fifo/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{account_id}/payments/apply/ — Apply payment to specific invoices",
              "id": "29bf6d39-aab2-58dc-8480-ed81bf443b94",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/payments/apply/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "payments",
                    "apply",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Apply payment to specific invoices\n\n**`POST /api/v1/current-accounts/{account_id}/payments/apply/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{account_id}/reconcilable-invoices/",
              "id": "7e75dee0-780a-52d2-824e-cbdd013bb494",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/reconcilable-invoices/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "reconcilable-invoices",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "FIX Issue N°1: Dedicated endpoint for invoices eligible for reconciliation.\n\n**`GET /api/v1/current-accounts/{account_id}/reconcilable-invoices/`**\n\n**Scope requerido:** `current_accounts:read`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{account_id}/restore/",
              "id": "ddc9bf05-20d3-5a0b-87b0-d504ad4fb1af",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/restore/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "restore",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Restore a soft-deleted current account (status=deleted → status=active).\n\n**`POST /api/v1/current-accounts/{account_id}/restore/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{account_id}/statement/ — Get account statement",
              "id": "40839fc4-487f-5d28-80da-593638f0f8eb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:account_id/statement/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":account_id",
                    "statement",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get account statement\n\n**`GET /api/v1/current-accounts/{account_id}/statement/`**\n\n**Scope requerido:** `current_accounts:read`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{entity_type}/{entity_id}/ — Get current account by entity (customer/supplier)",
              "id": "cc593d23-0b76-55f1-8015-2a0f2266b892",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/:entity_type/:entity_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    ":entity_type",
                    ":entity_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "entity_type",
                      "value": "{{entity_type}}",
                      "description": "customer | supplier"
                    },
                    {
                      "key": "entity_id",
                      "value": "{{entity_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get current account by entity (customer/supplier)\n\n**`GET /api/v1/current-accounts/{entity_type}/{entity_id}/`**\n\n**Scope requerido:** `current_accounts:read`\n\n**Variables de path:**\n- `:entity_type` — customer | supplier\n- `:entity_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "aging/ — Get aging report",
              "id": "7efdea4b-685d-53c7-8ac1-09aa55d668cd",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/aging/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    "aging",
                    ""
                  ]
                },
                "description": "Get aging report\n\n**`GET /api/v1/current-accounts/aging/`**\n\n**Scope requerido:** `current_accounts:read`"
              }
            },
            {
              "name": "export/ — Export current accounts to CSV file",
              "id": "7f317f03-a04e-5c34-8c89-d770fe0fc647",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/export/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    "export",
                    ""
                  ]
                },
                "description": "Export current accounts to CSV file\n\n**`GET /api/v1/current-accounts/export/`**\n\n**Scope requerido:** `current_accounts:write`"
              }
            },
            {
              "name": "export/ — Export current accounts to CSV file",
              "id": "39f0e4ae-ee83-5962-8e83-bdd9c547e2e8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/export/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    "export",
                    ""
                  ]
                },
                "description": "Export current accounts to CSV file\n\n**`POST /api/v1/current-accounts/export/`**\n\n**Scope requerido:** `current_accounts:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "pay-sale/{sale_id}/ — Register payment against a specific sale",
              "id": "045f7e7f-01eb-5177-8e67-a6219ea4738c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/current-accounts/pay-sale/:sale_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    "pay-sale",
                    ":sale_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "sale_id",
                      "value": "{{sale_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Register payment against a specific sale.\n\n**`POST /api/v1/current-accounts/pay-sale/{sale_id}/`**\n\n**Scope requerido:** `current_accounts:write`\n\n**Variables de path:**\n- `:sale_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "stats/",
              "id": "9979bfbb-7e10-58d0-80b5-802ac9668669",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/current-accounts/stats/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "current-accounts",
                    "stats",
                    ""
                  ]
                },
                "description": "Tenant-wide aggregate stats across all current accounts — backs the summary\n\n**`GET /api/v1/current-accounts/stats/`**\n\n**Scope requerido:** `current_accounts:read`"
              }
            }
          ]
        },
        {
          "name": "CRM · Oportunidades",
          "id": "ed882868-549b-59fa-80e5-c9673ba5c269",
          "description": "`/api/v1/crm-opportunities` · 10 endpoints · scopes: `crm:read`, `crm:write`",
          "item": [
            {
              "name": "Listar oportunidades",
              "id": "5811c363-f27b-52ff-84b5-f08f0410aa42",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-opportunities/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/crm-opportunities/list/`**\n\n**Scope requerido:** `crm:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('crm_opportunity_id', items[0].id);",
                      "  console.log('crm_opportunity_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener oportunidad",
              "id": "405f7fca-bb98-5d1e-8767-10471ed25725",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-opportunities/:crm_opportunity_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    ":crm_opportunity_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_opportunity_id",
                      "value": "{{crm_opportunity_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/crm-opportunities/{crm_opportunity_id}/`**\n\n**Scope requerido:** `crm:read`\n\n**Variables de path:**\n- `:crm_opportunity_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear oportunidad",
              "id": "62de14a3-a814-5998-8a75-9108ad66f7eb",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-opportunities/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/crm-opportunities/`**\n\n**Scope requerido:** `crm:write`\n\n**Campos requeridos:** `pipeline_id`, `stage_id`, `title`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pipeline_id\": \"\",\n  \"stage_id\": \"\",\n  \"title\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar oportunidad",
              "id": "ca251d58-d23b-55b3-818b-b07ab0d6159e",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-opportunities/:crm_opportunity_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    ":crm_opportunity_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_opportunity_id",
                      "value": "{{crm_opportunity_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/crm-opportunities/{crm_opportunity_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_opportunity_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 0,\n  \"currency\": \"\",\n  \"customer_id\": \"\",\n  \"expected_close_date\": \"2026-01-31\",\n  \"lost_reason\": \"\",\n  \"metadata\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar oportunidad",
              "id": "946b6d96-c6f6-53a3-8193-87e3598b018d",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-opportunities/:crm_opportunity_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    ":crm_opportunity_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_opportunity_id",
                      "value": "{{crm_opportunity_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/crm-opportunities/{crm_opportunity_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_opportunity_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "3f3f1b9d-1ef2-581e-8d4a-7455c2badfc4",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-opportunities/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/crm-opportunities/tags/`**\n\n**Scope requerido:** `crm:read`"
              }
            },
            {
              "name": "Alta masiva de oportunidades (alias obsoleto)",
              "id": "1cc167f1-b0e9-5560-8802-471a892c6a86",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-opportunities/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/crm-opportunities/batch-create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de oportunidades",
              "id": "d6bc77ff-c310-5bfb-8e65-74f07a2aec20",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-opportunities/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/crm-opportunities/bulk/create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de oportunidades",
              "id": "f53e9401-1867-50cc-850d-a4b236f7d6f3",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-opportunities/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/crm-opportunities/bulk/delete/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de oportunidades",
              "id": "7063bb00-73d6-5b7c-8e1f-be16b3a79340",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-opportunities/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-opportunities",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/crm-opportunities/bulk/update/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "CRM · Pipelines",
          "id": "564a9355-b932-5197-8b97-6c035779b9e4",
          "description": "`/api/v1/crm-pipelines` · 10 endpoints · scopes: `crm:read`, `crm:write`",
          "item": [
            {
              "name": "Listar pipelines",
              "id": "af17a70d-295a-5695-863d-be91c84a054d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-pipelines/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/crm-pipelines/list/`**\n\n**Scope requerido:** `crm:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('crm_pipeline_id', items[0].id);",
                      "  console.log('crm_pipeline_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener pipeline",
              "id": "e0be8ff9-4b0e-5688-87ab-28877f7e188f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-pipelines/:crm_pipeline_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    ":crm_pipeline_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_pipeline_id",
                      "value": "{{crm_pipeline_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/crm-pipelines/{crm_pipeline_id}/`**\n\n**Scope requerido:** `crm:read`\n\n**Variables de path:**\n- `:crm_pipeline_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear pipeline",
              "id": "a4e36096-78d7-5749-858d-2320cc7591c7",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-pipelines/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/crm-pipelines/`**\n\n**Scope requerido:** `crm:write`\n\n**Campos requeridos:** `name`, `stages`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\",\n  \"stages\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar pipeline",
              "id": "ee00bf49-2cbd-574b-824c-35805ac83184",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-pipelines/:crm_pipeline_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    ":crm_pipeline_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_pipeline_id",
                      "value": "{{crm_pipeline_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/crm-pipelines/{crm_pipeline_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_pipeline_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"description\": \"\",\n  \"is_default\": false,\n  \"metadata\": {},\n  \"name\": \"\",\n  \"stages\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar pipeline",
              "id": "eea704fd-40ba-5156-8de4-6fc343849179",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-pipelines/:crm_pipeline_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    ":crm_pipeline_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_pipeline_id",
                      "value": "{{crm_pipeline_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/crm-pipelines/{crm_pipeline_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_pipeline_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "71c011d2-2207-5001-895f-7004983a94d7",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-pipelines/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/crm-pipelines/tags/`**\n\n**Scope requerido:** `crm:read`"
              }
            },
            {
              "name": "Alta masiva de pipelines (alias obsoleto)",
              "id": "6fd34a9f-969a-5d50-8912-77ced3dd1313",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-pipelines/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/crm-pipelines/batch-create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de pipelines",
              "id": "4bb5987a-2109-5bea-80fb-11a51a167161",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-pipelines/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/crm-pipelines/bulk/create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de pipelines",
              "id": "d7f19f3a-59b0-593e-8244-d6d377a816f9",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-pipelines/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/crm-pipelines/bulk/delete/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de pipelines",
              "id": "712afbd1-7003-5724-8dd5-1c457bab2f36",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-pipelines/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-pipelines",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/crm-pipelines/bulk/update/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "CRM · Tareas",
          "id": "b4ad69a3-0bbb-5e6f-8996-fd2b4899c479",
          "description": "`/api/v1/crm-tasks` · 10 endpoints · scopes: `crm:read`, `crm:write`",
          "item": [
            {
              "name": "Listar tareas",
              "id": "7035a7bf-0c9b-53f0-8a50-e0529e948a80",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-tasks/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/crm-tasks/list/`**\n\n**Scope requerido:** `crm:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('crm_task_id', items[0].id);",
                      "  console.log('crm_task_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener tarea",
              "id": "63f82799-6320-57d9-89a0-fe4bd77276aa",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-tasks/:crm_task_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    ":crm_task_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_task_id",
                      "value": "{{crm_task_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/crm-tasks/{crm_task_id}/`**\n\n**Scope requerido:** `crm:read`\n\n**Variables de path:**\n- `:crm_task_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear tarea",
              "id": "d2d82f24-5090-5ff7-830e-26561e1e542d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-tasks/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/crm-tasks/`**\n\n**Scope requerido:** `crm:write`\n\n**Campos requeridos:** `title`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar tarea",
              "id": "f07ee58a-abee-58f0-861b-586735fd457c",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-tasks/:crm_task_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    ":crm_task_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_task_id",
                      "value": "{{crm_task_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/crm-tasks/{crm_task_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_task_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"assigned_to_email\": \"cliente@ejemplo.com\",\n  \"assigned_to_user_id\": \"\",\n  \"customer_id\": \"\",\n  \"description\": \"\",\n  \"due_date\": \"2026-01-31\",\n  \"metadata\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar tarea",
              "id": "9268d939-bab6-5d2c-803c-dce7db49a931",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-tasks/:crm_task_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    ":crm_task_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_task_id",
                      "value": "{{crm_task_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/crm-tasks/{crm_task_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_task_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "9bd7e7ae-b4b9-5dd0-8381-ddb9c755b97d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-tasks/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/crm-tasks/tags/`**\n\n**Scope requerido:** `crm:read`"
              }
            },
            {
              "name": "Alta masiva de tareas (alias obsoleto)",
              "id": "a7ae5d5d-ba05-5370-8462-96c9d9aa59e7",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-tasks/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/crm-tasks/batch-create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de tareas",
              "id": "5648e459-5986-544c-87a4-5024649592f6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-tasks/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/crm-tasks/bulk/create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de tareas",
              "id": "6e45080a-a8b6-5d9a-8f01-eb3961c7d54e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-tasks/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/crm-tasks/bulk/delete/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de tareas",
              "id": "fed19e61-0f03-5876-83fb-9251a9bb9f50",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-tasks/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-tasks",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/crm-tasks/bulk/update/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "CRM · Recordatorios",
          "id": "aab97bd9-406b-5789-8b2d-0b406780d5af",
          "description": "`/api/v1/crm-reminders` · 10 endpoints · scopes: `crm:read`, `crm:write`",
          "item": [
            {
              "name": "Listar recordatorios",
              "id": "af546831-0491-5334-82e2-2d4b8ecdfd53",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-reminders/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/crm-reminders/list/`**\n\n**Scope requerido:** `crm:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('crm_reminder_id', items[0].id);",
                      "  console.log('crm_reminder_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener recordatorio",
              "id": "5e6ed4d6-306f-5e19-8533-90eb6cbebf70",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-reminders/:crm_reminder_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    ":crm_reminder_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_reminder_id",
                      "value": "{{crm_reminder_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/crm-reminders/{crm_reminder_id}/`**\n\n**Scope requerido:** `crm:read`\n\n**Variables de path:**\n- `:crm_reminder_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear recordatorio",
              "id": "99796eab-fff9-5155-8bb9-1822ccd57dfa",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-reminders/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/crm-reminders/`**\n\n**Scope requerido:** `crm:write`\n\n**Campos requeridos:** `customer_id`, `remind_at`, `title`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"customer_id\": \"\",\n  \"remind_at\": \"\",\n  \"title\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar recordatorio",
              "id": "907f1d9a-22ba-5fc9-82ec-7043e0be843b",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-reminders/:crm_reminder_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    ":crm_reminder_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_reminder_id",
                      "value": "{{crm_reminder_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/crm-reminders/{crm_reminder_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_reminder_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"channels\": [],\n  \"message\": \"\",\n  \"metadata\": {},\n  \"remind_at\": \"\",\n  \"title\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar recordatorio",
              "id": "6651ee4c-2cdd-5617-8d8c-dbb847a45efb",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-reminders/:crm_reminder_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    ":crm_reminder_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_reminder_id",
                      "value": "{{crm_reminder_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/crm-reminders/{crm_reminder_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_reminder_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "f5706a13-2b94-58e9-8aa5-17e4b9ffd871",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-reminders/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/crm-reminders/tags/`**\n\n**Scope requerido:** `crm:read`"
              }
            },
            {
              "name": "Alta masiva de recordatorios (alias obsoleto)",
              "id": "e6c220c0-71cb-56d2-85a1-cf94c54b1262",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-reminders/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/crm-reminders/batch-create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de recordatorios",
              "id": "cc68fe98-2c79-5c92-892b-cb40e8526c72",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-reminders/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/crm-reminders/bulk/create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de recordatorios",
              "id": "e0bd4819-40ac-5d63-8a8c-818a0f7c086a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-reminders/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/crm-reminders/bulk/delete/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de recordatorios",
              "id": "9a1f98c9-c965-5c63-8507-0b3333703e93",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-reminders/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-reminders",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/crm-reminders/bulk/update/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "CRM · Segmentos",
          "id": "428b05f3-d7b2-557c-8eb6-6b507e38579c",
          "description": "`/api/v1/crm-segments` · 10 endpoints · scopes: `crm:read`, `crm:write`",
          "item": [
            {
              "name": "Listar segmentos",
              "id": "a0420b67-ae54-55f1-87ae-6d53ffe726fc",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-segments/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/crm-segments/list/`**\n\n**Scope requerido:** `crm:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('crm_segment_id', items[0].id);",
                      "  console.log('crm_segment_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener segmento",
              "id": "ad59b53e-436a-5a29-8d01-f286543e9804",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-segments/:crm_segment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    ":crm_segment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_segment_id",
                      "value": "{{crm_segment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/crm-segments/{crm_segment_id}/`**\n\n**Scope requerido:** `crm:read`\n\n**Variables de path:**\n- `:crm_segment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear segmento",
              "id": "2da5829e-b7ed-59f6-86dd-4dde814490d8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-segments/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/crm-segments/`**\n\n**Scope requerido:** `crm:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar segmento",
              "id": "96958727-d2a8-5975-8e3e-f3c8a60611d6",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-segments/:crm_segment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    ":crm_segment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_segment_id",
                      "value": "{{crm_segment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/crm-segments/{crm_segment_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_segment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"color\": \"\",\n  \"description\": \"\",\n  \"is_dynamic\": false,\n  \"metadata\": {},\n  \"name\": \"\",\n  \"rule_combinator\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar segmento",
              "id": "9d5e3dab-1066-5feb-8b58-b038ec8fb3c4",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-segments/:crm_segment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    ":crm_segment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_segment_id",
                      "value": "{{crm_segment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/crm-segments/{crm_segment_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_segment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "f498454d-73f5-5614-8c0f-e25dc453650d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-segments/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/crm-segments/tags/`**\n\n**Scope requerido:** `crm:read`"
              }
            },
            {
              "name": "Alta masiva de segmentos (alias obsoleto)",
              "id": "ef2f5246-a95b-535a-8b81-fd7354be9fa7",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-segments/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/crm-segments/batch-create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de segmentos",
              "id": "c9bcd3e9-0297-55cf-8785-7d341cf4899f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-segments/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/crm-segments/bulk/create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de segmentos",
              "id": "7fc20de1-c73d-5a01-83ff-010c8563e033",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-segments/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/crm-segments/bulk/delete/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de segmentos",
              "id": "ff75e96f-8fee-54b3-81b2-d7206192f050",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-segments/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-segments",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/crm-segments/bulk/update/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "CRM · Comunicaciones",
          "id": "861fc8f6-87e4-564c-82c0-914a2f7561c1",
          "description": "`/api/v1/crm-communications` · 10 endpoints · scopes: `crm:read`, `crm:write`",
          "item": [
            {
              "name": "Listar comunicaciones",
              "id": "8c02abd6-56ce-5445-83fe-b0c15c325056",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-communications/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/crm-communications/list/`**\n\n**Scope requerido:** `crm:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('crm_communication_id', items[0].id);",
                      "  console.log('crm_communication_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener comunicación",
              "id": "76946171-e74d-59c9-8c8a-f5bdac309dd2",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-communications/:crm_communication_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    ":crm_communication_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_communication_id",
                      "value": "{{crm_communication_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/crm-communications/{crm_communication_id}/`**\n\n**Scope requerido:** `crm:read`\n\n**Variables de path:**\n- `:crm_communication_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear comunicación",
              "id": "745e6979-5e0b-5aeb-8bc8-f66402060470",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-communications/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/crm-communications/`**\n\n**Scope requerido:** `crm:write`\n\n**Campos requeridos:** `body`, `channel`, `customer_id`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"body\": \"\",\n  \"channel\": \"\",\n  \"customer_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar comunicación",
              "id": "e3ccf822-a72f-51f7-812e-80e857ff8bf4",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-communications/:crm_communication_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    ":crm_communication_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_communication_id",
                      "value": "{{crm_communication_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/crm-communications/{crm_communication_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_communication_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"error\": \"\",\n  \"metadata\": {},\n  \"status\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar comunicación",
              "id": "0dc3d5bf-9ddb-590a-86d0-4e407692ddbb",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-communications/:crm_communication_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    ":crm_communication_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_communication_id",
                      "value": "{{crm_communication_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/crm-communications/{crm_communication_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_communication_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "49e01c65-5c0e-546f-8a79-8ea211994928",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-communications/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/crm-communications/tags/`**\n\n**Scope requerido:** `crm:read`"
              }
            },
            {
              "name": "Alta masiva de comunicaciones (alias obsoleto)",
              "id": "74a9504f-6291-5f6b-862c-3325919c3a9d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-communications/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/crm-communications/batch-create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de comunicaciones",
              "id": "bc1cfe70-adf5-53b4-894a-a42adb899a66",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-communications/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/crm-communications/bulk/create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de comunicaciones",
              "id": "b56eff14-a7f1-52c7-8806-0f0b73c474ae",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-communications/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/crm-communications/bulk/delete/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de comunicaciones",
              "id": "f658e967-97ea-52c9-8e09-25865a765ca5",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-communications/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-communications",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/crm-communications/bulk/update/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "CRM · Plantillas",
          "id": "bb478f7a-6557-54f5-894b-0b8bd9a74994",
          "description": "`/api/v1/crm-templates` · 10 endpoints · scopes: `crm:read`, `crm:write`",
          "item": [
            {
              "name": "Listar plantillas",
              "id": "849b812f-e328-5f86-8f84-ce199ad4a5e3",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-templates/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/crm-templates/list/`**\n\n**Scope requerido:** `crm:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('crm_template_id', items[0].id);",
                      "  console.log('crm_template_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener plantilla",
              "id": "16fbad08-caa3-5dc1-8fa5-c9225c30141d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-templates/:crm_template_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    ":crm_template_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_template_id",
                      "value": "{{crm_template_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/crm-templates/{crm_template_id}/`**\n\n**Scope requerido:** `crm:read`\n\n**Variables de path:**\n- `:crm_template_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear plantilla",
              "id": "24a4ce1d-8cbc-5fa2-8654-7d948496ca71",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-templates/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/crm-templates/`**\n\n**Scope requerido:** `crm:write`\n\n**Campos requeridos:** `body`, `channel`, `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"body\": \"\",\n  \"channel\": \"\",\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar plantilla",
              "id": "a293af36-db81-5eee-8288-a7e243d21eaf",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-templates/:crm_template_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    ":crm_template_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_template_id",
                      "value": "{{crm_template_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/crm-templates/{crm_template_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_template_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"body\": \"\",\n  \"channel\": \"\",\n  \"description\": \"\",\n  \"is_active\": false,\n  \"metadata\": {},\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar plantilla",
              "id": "bcbbb6d8-8cbf-5d5f-825e-34a5b8ffb8b6",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-templates/:crm_template_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    ":crm_template_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "crm_template_id",
                      "value": "{{crm_template_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/crm-templates/{crm_template_id}/`**\n\n**Scope requerido:** `crm:write`\n\n**Variables de path:**\n- `:crm_template_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "013d7a34-db6b-57de-8cda-e29ca9e58dcb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/crm-templates/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/crm-templates/tags/`**\n\n**Scope requerido:** `crm:read`"
              }
            },
            {
              "name": "Alta masiva de plantillas (alias obsoleto)",
              "id": "9f5f83fe-2db9-5216-8fdb-77588a0b539f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-templates/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/crm-templates/batch-create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de plantillas",
              "id": "e917db51-01da-5ec9-8322-e7358cbbe33f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-templates/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/crm-templates/bulk/create/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de plantillas",
              "id": "f44448b1-411f-516f-8b7a-a81494fde43b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-templates/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/crm-templates/bulk/delete/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de plantillas",
              "id": "a86269d5-e739-5db5-8d93-b31cd8a63186",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/crm-templates/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "crm-templates",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/crm-templates/bulk/update/`**\n\n**Scope requerido:** `crm:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Turnos",
          "id": "3ab8fba9-8983-569f-85d3-b32a6862c0c1",
          "description": "`/api/v1/appointments` · 10 endpoints · scopes: `appointments:read`, `appointments:write`",
          "item": [
            {
              "name": "Listar turnos",
              "id": "816705f4-1d66-547c-8820-69ddddfe9c70",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/appointments/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/appointments/list/`**\n\n**Scope requerido:** `appointments:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('appointment_id', items[0].id);",
                      "  console.log('appointment_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener turno",
              "id": "08ec795b-b38d-5f48-87b2-1303803a19b8",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/appointments/:appointment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    ":appointment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "appointment_id",
                      "value": "{{appointment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/appointments/{appointment_id}/`**\n\n**Scope requerido:** `appointments:read`\n\n**Variables de path:**\n- `:appointment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear turno",
              "id": "87547d5d-48cb-5c3f-8bbe-386687d827e5",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/appointments/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/appointments/`**\n\n**Scope requerido:** `appointments:write`\n\n**Campos requeridos:** `scheduled_datetime`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduled_datetime\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar turno",
              "id": "72137d17-1918-5f68-89c9-2deccdccbfb3",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/appointments/:appointment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    ":appointment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "appointment_id",
                      "value": "{{appointment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/appointments/{appointment_id}/`**\n\n**Scope requerido:** `appointments:write`\n\n**Variables de path:**\n- `:appointment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"custom_location\": {},\n  \"duration_minutes\": 0,\n  \"guest_name\": \"\",\n  \"location_type\": \"\",\n  \"notes\": \"\",\n  \"reminder_enabled\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar turno",
              "id": "d05f369a-ad52-5f7d-8936-502e384384b8",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/appointments/:appointment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    ":appointment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "appointment_id",
                      "value": "{{appointment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/appointments/{appointment_id}/`**\n\n**Scope requerido:** `appointments:write`\n\n**Variables de path:**\n- `:appointment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "e5f71551-251a-54a9-8fc1-29250c5ba73e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/appointments/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/appointments/tags/`**\n\n**Scope requerido:** `appointments:read`"
              }
            },
            {
              "name": "Alta masiva de turnos (alias obsoleto)",
              "id": "74e4699d-ca5b-5129-87a3-2e2498ee0ed2",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/appointments/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/appointments/batch-create/`**\n\n**Scope requerido:** `appointments:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de turnos",
              "id": "0f21a2cd-b517-511b-8156-9eb0108c1dde",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/appointments/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/appointments/bulk/create/`**\n\n**Scope requerido:** `appointments:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de turnos",
              "id": "5d3dea9e-1864-55b0-802a-2021f217681e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/appointments/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/appointments/bulk/delete/`**\n\n**Scope requerido:** `appointments:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de turnos",
              "id": "0b6b7d64-fa4c-5ad9-8242-fd8a2411d6e1",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/appointments/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "appointments",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/appointments/bulk/update/`**\n\n**Scope requerido:** `appointments:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Contratos",
          "id": "3ac66668-827e-5c16-87db-2f3000fdec0a",
          "description": "`/api/v1/contracts` · 10 endpoints · scopes: `contracts:read`, `contracts:write`",
          "item": [
            {
              "name": "Listar contratos",
              "id": "5bb965ef-b227-55bd-8078-075a4ee86d7f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/contracts/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/contracts/list/`**\n\n**Scope requerido:** `contracts:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('contract_id', items[0].id);",
                      "  console.log('contract_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener contrato",
              "id": "2c7b8018-8c54-505b-8682-df2bd77cb237",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/contracts/:contract_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    ":contract_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "contract_id",
                      "value": "{{contract_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/contracts/{contract_id}/`**\n\n**Scope requerido:** `contracts:read`\n\n**Variables de path:**\n- `:contract_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear contrato",
              "id": "67b760d4-df60-5275-8d5c-929a590c0325",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/contracts/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/contracts/`**\n\n**Scope requerido:** `contracts:write`\n\n**Campos requeridos:** `end_date`, `initial_rent`, `rental_id`, `start_date`, `tenant`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"end_date\": \"2026-01-31\",\n  \"initial_rent\": 0,\n  \"rental_id\": \"\",\n  \"start_date\": \"2026-01-31\",\n  \"tenant\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar contrato",
              "id": "c2e51386-46ce-5255-8026-54b456bac0a9",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/contracts/:contract_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    ":contract_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "contract_id",
                      "value": "{{contract_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/contracts/{contract_id}/`**\n\n**Scope requerido:** `contracts:write`\n\n**Variables de path:**\n- `:contract_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"additional_charges\": [],\n  \"adjustment_frequency\": \"\",\n  \"adjustment_percentage\": 0,\n  \"adjustment_type\": \"\",\n  \"auto_renewal\": false,\n  \"billing_day\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar contrato",
              "id": "884d0088-0631-53e9-8ca9-60415cc3eab7",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/contracts/:contract_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    ":contract_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "contract_id",
                      "value": "{{contract_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/contracts/{contract_id}/`**\n\n**Scope requerido:** `contracts:write`\n\n**Variables de path:**\n- `:contract_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "b2a57e82-f705-59ca-85fa-79898b616389",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/contracts/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/contracts/tags/`**\n\n**Scope requerido:** `contracts:read`"
              }
            },
            {
              "name": "Alta masiva de contratos (alias obsoleto)",
              "id": "9fb390ba-9569-543f-8fa5-058beae77e76",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/contracts/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/contracts/batch-create/`**\n\n**Scope requerido:** `contracts:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de contratos",
              "id": "a169768b-91a4-5f3f-89a4-44f2fa16e9e6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/contracts/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/contracts/bulk/create/`**\n\n**Scope requerido:** `contracts:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de contratos",
              "id": "979103db-0c5f-5767-826c-3ddc99c8ced6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/contracts/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/contracts/bulk/delete/`**\n\n**Scope requerido:** `contracts:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de contratos",
              "id": "759c630a-a148-5529-8617-d5548175f092",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/contracts/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "contracts",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/contracts/bulk/update/`**\n\n**Scope requerido:** `contracts:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Operaciones",
      "id": "a781dfa8-6dfd-5107-8af2-9b69f219e8fa",
      "description": "Envíos, remitos, flota, repartidores, servicio en campo, estadísticas y provisioning SCIM.",
      "item": [
        {
          "name": "Envíos",
          "id": "88436150-036e-5a67-8d55-3f5281ec3920",
          "description": "`/api/v1/shipping` · 29 endpoints · scopes: `shipping:read`, `shipping:write`",
          "item": [
            {
              "name": "branches/ — Sucursales del carrier para retiro/admisión. Espejo del endpoint en",
              "id": "1530c7b4-eaf9-5e10-8f0a-7b193553185f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/branches/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "branches",
                    ""
                  ]
                },
                "description": "Sucursales del carrier para retiro/admisión. Espejo del endpoint en\n\n**`GET /api/v1/shipping/branches/`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "providers/ — Obtiene los proveedores configurados para la empresa",
              "id": "3894c49d-bf5c-5a18-814b-02447d62bdec",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/providers/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "providers",
                    ""
                  ]
                },
                "description": "Obtiene los proveedores configurados para la empresa\n\n**`GET /api/v1/shipping/providers/`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "providers/{provider_name}/ — Remove a provider's configuration for this tenant. Cleans up the",
              "id": "ae569c61-d25d-5e25-8330-2b2d9d57d77b",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/providers/:provider_name/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "providers",
                    ":provider_name",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "provider_name",
                      "value": "{{provider_name}}",
                      "description": "Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…)."
                    }
                  ]
                },
                "description": "Remove a provider's configuration for this tenant. Cleans up the\n\n**`DELETE /api/v1/shipping/providers/{provider_name}/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:provider_name` — Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…)."
              }
            },
            {
              "name": "providers/{provider_name}/toggle — Enable/disable un provider sin re-configurar credenciales",
              "id": "a92dc3e6-d87b-5b62-816f-df5e4e69b71d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/providers/:provider_name/toggle",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "providers",
                    ":provider_name",
                    "toggle"
                  ],
                  "variable": [
                    {
                      "key": "provider_name",
                      "value": "{{provider_name}}",
                      "description": "Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…)."
                    }
                  ]
                },
                "description": "Enable/disable un provider sin re-configurar credenciales.\n\n**`POST /api/v1/shipping/providers/{provider_name}/toggle`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:provider_name` — Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…).\n\n**Campos requeridos:** `enabled`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"enabled\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "providers/{provider_name}/webhook/",
              "id": "ee2fa165-0080-54f1-8be6-e640cf30afcf",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/providers/:provider_name/webhook/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "providers",
                    ":provider_name",
                    "webhook",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "provider_name",
                      "value": "{{provider_name}}",
                      "description": "Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…)."
                    }
                  ]
                },
                "description": "Get the inbound webhook endpoint info for a tenant+provider (URL only, no secret).\n\n**`GET /api/v1/shipping/providers/{provider_name}/webhook/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:provider_name` — Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…)."
              }
            },
            {
              "name": "providers/{provider_name}/webhook/rotate/",
              "id": "43464ff2-0e2a-5dae-83d2-c6b1fbde36fc",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/providers/:provider_name/webhook/rotate/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "providers",
                    ":provider_name",
                    "webhook",
                    "rotate",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "provider_name",
                      "value": "{{provider_name}}",
                      "description": "Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…)."
                    }
                  ]
                },
                "description": "Rotate the webhook secret for a tenant+provider. Returns the new secret ONCE.\n\n**`POST /api/v1/shipping/providers/{provider_name}/webhook/rotate/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:provider_name` — Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "providers/configure/ — Configura un proveedor de shipping para la empresa",
              "id": "06a0e84b-5b9d-5f83-8d05-e67c2c8ce37b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/providers/configure/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "providers",
                    "configure",
                    ""
                  ]
                },
                "description": "Configura un proveedor de shipping para la empresa\n\n**`POST /api/v1/shipping/providers/configure/`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `credentials`, `provider_name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"credentials\": {},\n  \"provider_name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "providers/mercado-envios/connect-from-ml/ — Configura Mercado Envíos derivando las credenciales del OAuth de",
              "id": "a526d7b9-232e-5eb2-8296-85cbad80dc17",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/providers/mercado-envios/connect-from-ml/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "providers",
                    "mercado-envios",
                    "connect-from-ml",
                    ""
                  ]
                },
                "description": "Configura Mercado Envíos derivando las credenciales del OAuth de\n\n**`POST /api/v1/shipping/providers/mercado-envios/connect-from-ml/`**\n\n**Scope requerido:** `shipping:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "quotes/ — Obtiene cotizaciones de envío para ventas del sistema",
              "id": "a2f20dc4-74d3-5eaf-8db5-ce0652ec2953",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/quotes/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "quotes",
                    ""
                  ]
                },
                "description": "Obtiene cotizaciones de envío para ventas del sistema\n\n**`POST /api/v1/shipping/quotes/`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `destination`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"destination\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/ — Obtiene los envíos de la empresa con filtros",
              "id": "749e90b9-cef5-5f70-8045-9d8b4ad2d6e9",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/shipments/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ""
                  ]
                },
                "description": "Obtiene los envíos de la empresa con filtros.\n\n**`GET /api/v1/shipping/shipments/`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "shipments/ — Crea un envío con un provider configurado. Si no se manda `origin`,",
              "id": "af21cdea-c37f-523c-8ebb-dedbc9650844",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ""
                  ]
                },
                "description": "Crea un envío con un provider configurado. Si no se manda `origin`,\n\n**`POST /api/v1/shipping/shipments/`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `destination`, `packages`, `provider`, `recipient`, `sender`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"destination\": {},\n  \"packages\": [],\n  \"provider\": \"\",\n  \"recipient\": {},\n  \"sender\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/",
              "id": "61fca22b-3f26-5d1b-8942-7a74b0e71c99",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Hard delete de un envío + limpieza de las fotos de comprobante en R2/MinIO.\n\n**`DELETE /api/v1/shipping/shipments/{shipment_id}/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "shipments/{shipment_id}/ — Obtiene un envío por su id",
              "id": "f3dd967c-853a-5701-8029-12a6bb8a3f0c",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Obtiene un envío por su id.\n\n**`GET /api/v1/shipping/shipments/{shipment_id}/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "shipments/{shipment_id}/ — Edición parcial de un shipment antes de despacharlo",
              "id": "905dd5a7-0af2-5bea-84fd-41ec06a0957c",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Edición parcial de un shipment antes de despacharlo.\n\n**`PATCH /api/v1/shipping/shipments/{shipment_id}/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"destination\": {},\n  \"metadata\": {},\n  \"packages\": [],\n  \"recipient\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/assign — Asigna un repartidor (Driver._id) a un envío. Requiere widget activo",
              "id": "c1b2b4b2-0ab4-59df-8a47-30c0d591ac0b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/assign",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "assign"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Asigna un repartidor (Driver._id) a un envío. Requiere widget activo.\n\n**`POST /api/v1/shipping/shipments/{shipment_id}/assign`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `driver_id`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"driver_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/cancel — Cancela un envío en el carrier + actualiza estado en DB",
              "id": "8ac8ddcb-18f7-51f3-830b-2fef4033e4ce",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/cancel",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "cancel"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Cancela un envío en el carrier + actualiza estado en DB.\n\n**`POST /api/v1/shipping/shipments/{shipment_id}/cancel`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/label — Genera (o re-obtiene) la etiqueta del envío en el carrier",
              "id": "fd67e9f2-df45-513e-8c3d-2345e186d1b5",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/label",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "label"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Genera (o re-obtiene) la etiqueta del envío en el carrier.\n\n**`POST /api/v1/shipping/shipments/{shipment_id}/label`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/pickup — Agenda retiro del shipment del depósito del vendedor",
              "id": "8046effb-b79a-5561-88c1-5c69925afa5d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/pickup",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "pickup"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Agenda retiro del shipment del depósito del vendedor.\n\n**`POST /api/v1/shipping/shipments/{shipment_id}/pickup`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `scheduled_at`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduled_at\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/remito — Emite un remito electrónico para el shipment. Idempotente: si ya",
              "id": "75a0faf8-7890-5f38-87b8-ff4aee1e456b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/remito",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "remito"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Emite un remito electrónico para el shipment. Idempotente: si ya\n\n**`POST /api/v1/shipping/shipments/{shipment_id}/remito`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/return — Inicia una devolución (RMA) para un shipment entregado o fallido. Crea",
              "id": "a7513e0b-cb56-5637-8a9a-8b4d449e5f1a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/return",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "return"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Inicia una devolución (RMA) para un shipment entregado o fallido. Crea\n\n**`POST /api/v1/shipping/shipments/{shipment_id}/return`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `reason`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/status",
              "id": "040f530e-e149-5ffd-83ce-a422584ba6fd",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/status",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "status"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Override manual de status — admin only. NO toca al carrier, sólo persiste.\n\n**`PATCH /api/v1/shipping/shipments/{shipment_id}/status`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `status`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/{shipment_id}/tracking-link",
              "id": "6cb1e31d-7356-5bdd-8b1b-1c4817445b73",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/tracking-link",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "tracking-link"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Datos para compartir el seguimiento PÚBLICO de un envío con el cliente.\n\n**`GET /api/v1/shipping/shipments/{shipment_id}/tracking-link`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "shipments/{shipment_id}/unassign — Quita la asignación del repartidor. Requiere widget activo",
              "id": "1afd084a-b329-5fea-8730-05e786d7dc8b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/:shipment_id/unassign",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    ":shipment_id",
                    "unassign"
                  ],
                  "variable": [
                    {
                      "key": "shipment_id",
                      "value": "{{shipment_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Quita la asignación del repartidor. Requiere widget activo.\n\n**`POST /api/v1/shipping/shipments/{shipment_id}/unassign`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:shipment_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/bulk-assign — Asigna un repartidor a múltiples envíos. Requiere widget activo",
              "id": "222f8893-3911-566a-8071-23f16f2b149c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/shipments/bulk-assign",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    "bulk-assign"
                  ]
                },
                "description": "Asigna un repartidor a múltiples envíos. Requiere widget activo.\n\n**`POST /api/v1/shipping/shipments/bulk-assign`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `driver_id`, `shipment_ids`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"driver_id\": \"\",\n  \"shipment_ids\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "shipments/by-sale/{sale_id}/ — Get shipments linked to a specific sale",
              "id": "ece1715d-e775-5d4c-8531-c388255f7a43",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/shipments/by-sale/:sale_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    "by-sale",
                    ":sale_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "sale_id",
                      "value": "{{sale_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get shipments linked to a specific sale\n\n**`GET /api/v1/shipping/shipments/by-sale/{sale_id}/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:sale_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "shipments/by-tracking/{tracking_number}/",
              "id": "09568bf9-67dd-57da-8923-294cc9581fb9",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/shipments/by-tracking/:tracking_number/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    "by-tracking",
                    ":tracking_number",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "tracking_number",
                      "value": "{{tracking_number}}",
                      "description": "Número de seguimiento del envío."
                    }
                  ]
                },
                "description": "Obtiene un envío por su tracking number. Usado por la página de impresión\n\n**`GET /api/v1/shipping/shipments/by-tracking/{tracking_number}/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:tracking_number` — Número de seguimiento del envío."
              }
            },
            {
              "name": "shipments/counts",
              "id": "89e6c5de-e4ce-5d63-88f4-baf078cad299",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/shipments/counts",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "shipments",
                    "counts"
                  ]
                },
                "description": "Devuelve el conteo de envíos agrupado por status, para los tabs de la lista.\n\n**`GET /api/v1/shipping/shipments/counts`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "track/{tracking_number}/ — Tracking del envío desde el módulo de administración (frontend de la",
              "id": "39656a24-8cb5-5d34-8614-9ef8a5a2fb46",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/shipping/track/:tracking_number/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "track",
                    ":tracking_number",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "tracking_number",
                      "value": "{{tracking_number}}",
                      "description": "Número de seguimiento del envío."
                    }
                  ]
                },
                "description": "Tracking del envío desde el módulo de administración (frontend de la\n\n**`GET /api/v1/shipping/track/{tracking_number}/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:tracking_number` — Número de seguimiento del envío."
              }
            },
            {
              "name": "validate-address/",
              "id": "fdb84100-437b-5127-8167-d44ea494738c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/shipping/validate-address/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "shipping",
                    "validate-address",
                    ""
                  ]
                },
                "description": "Valida una dirección antes de crear el envío. Si se especifica `provider`\n\n**`POST /api/v1/shipping/validate-address/`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `address`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Envíos · Storefront",
          "id": "028cbd6a-20ab-5388-84e8-f8d644db50df",
          "description": "`/api/v1/ecommerce/shipping` · 3 endpoints · scopes: `shipping:read`, `shipping:write`",
          "item": [
            {
              "name": "branches/ — Obtiene sucursales para retiro en ecommerce",
              "id": "661e4f09-d570-54db-882d-021ef9716335",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/ecommerce/shipping/branches/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "ecommerce",
                    "shipping",
                    "branches",
                    ""
                  ]
                },
                "description": "Obtiene sucursales para retiro en ecommerce\n\n**`GET /api/v1/ecommerce/shipping/branches/`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "quotes/ — Obtiene cotizaciones de envío para el ecommerce",
              "id": "35f05d09-723c-53f0-8993-5b8c14ed7560",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/ecommerce/shipping/quotes/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "ecommerce",
                    "shipping",
                    "quotes",
                    ""
                  ]
                },
                "description": "Obtiene cotizaciones de envío para el ecommerce\n\n**`POST /api/v1/ecommerce/shipping/quotes/`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `destination`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"destination\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "track/{tracking_number}/ — Tracking público de envíos",
              "id": "3fc4587e-43db-56d3-8fbb-d9524bef5415",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/ecommerce/shipping/track/:tracking_number/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "ecommerce",
                    "shipping",
                    "track",
                    ":tracking_number",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "tracking_number",
                      "value": "{{tracking_number}}",
                      "description": "Número de seguimiento del envío."
                    }
                  ]
                },
                "description": "Tracking público de envíos\n\n**`GET /api/v1/ecommerce/shipping/track/{tracking_number}/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:tracking_number` — Número de seguimiento del envío."
              }
            }
          ]
        },
        {
          "name": "Remitos",
          "id": "6a634afd-e9f6-54c4-8a7b-0948aea4550c",
          "description": "`/api/v1/delivery_notes` · 10 endpoints · scopes: `delivery_notes:read`, `delivery_notes:write`",
          "item": [
            {
              "name": "Listar remitos",
              "id": "697ea5d3-9f8a-50de-8a41-711962966b58",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/delivery_notes/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/delivery_notes/list/`**\n\n**Scope requerido:** `delivery_notes:read`"
              },
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "pm.test('200 OK', function () { pm.response.to.have.status(200); });",
                      "const body = pm.response.json() || {};",
                      "const data = body.data || {};",
                      "const items = Array.isArray(data.items) ? data.items : Array.isArray(data) ? data : [];",
                      "if (items.length && items[0].id) {",
                      "  pm.collectionVariables.set('delivery_note_id', items[0].id);",
                      "  console.log('delivery_note_id =', items[0].id);",
                      "}"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Obtener remito",
              "id": "ce6e5c00-cc5b-5d1c-88e8-8cc906e679d1",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/delivery_notes/:delivery_note_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    ":delivery_note_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "delivery_note_id",
                      "value": "{{delivery_note_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/delivery_notes/{delivery_note_id}/`**\n\n**Scope requerido:** `delivery_notes:read`\n\n**Variables de path:**\n- `:delivery_note_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear remito",
              "id": "7bd8c7ac-2321-51fa-889a-37c1e198e588",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/delivery_notes/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/delivery_notes/`**\n\n**Scope requerido:** `delivery_notes:write`\n\n**Campos requeridos:** `customer_id`, `items`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"customer_id\": \"\",\n  \"items\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar remito",
              "id": "14f91a3a-90ab-5ece-8061-ed50f883694c",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/delivery_notes/:delivery_note_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    ":delivery_note_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "delivery_note_id",
                      "value": "{{delivery_note_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/delivery_notes/{delivery_note_id}/`**\n\n**Scope requerido:** `delivery_notes:write`\n\n**Variables de path:**\n- `:delivery_note_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"carrier_name\": \"\",\n  \"customer_name\": \"\",\n  \"delivery_date\": \"2026-01-31\",\n  \"destination_address\": \"\",\n  \"driver_name\": \"\",\n  \"metadata\": {}\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar remito",
              "id": "f50a9433-13f2-5eaa-84ec-93db3d3b0998",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/delivery_notes/:delivery_note_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    ":delivery_note_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "delivery_note_id",
                      "value": "{{delivery_note_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/delivery_notes/{delivery_note_id}/`**\n\n**Scope requerido:** `delivery_notes:write`\n\n**Variables de path:**\n- `:delivery_note_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "f5ab2f6d-1987-57a5-8994-56d0c3c05a81",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/delivery_notes/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/delivery_notes/tags/`**\n\n**Scope requerido:** `delivery_notes:read`"
              }
            },
            {
              "name": "Alta masiva de remitos (alias obsoleto)",
              "id": "0e583cce-d5a1-5169-864a-b494dbb668bc",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/delivery_notes/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/delivery_notes/batch-create/`**\n\n**Scope requerido:** `delivery_notes:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de remitos",
              "id": "b0274af4-8027-59d4-86ec-72fa4b953c9f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/delivery_notes/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/delivery_notes/bulk/create/`**\n\n**Scope requerido:** `delivery_notes:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de remitos",
              "id": "dd2ba513-0f7a-50a9-841a-ab6d8c63e5b8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/delivery_notes/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/delivery_notes/bulk/delete/`**\n\n**Scope requerido:** `delivery_notes:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de remitos",
              "id": "d243c98f-3c9f-52ab-80d8-3bcb54e693d5",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/delivery_notes/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "delivery_notes",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/delivery_notes/bulk/update/`**\n\n**Scope requerido:** `delivery_notes:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Repartidores",
          "id": "b30b2a62-1cc0-5572-8215-cf6f640531e2",
          "description": "`/api/v1/drivers` · 9 endpoints · scopes: `shipping:read`, `shipping:write`",
          "item": [
            {
              "name": "Listar repartidores",
              "id": "14b65e16-9733-5b4e-8808-21f73fed26a3",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/drivers/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    ""
                  ]
                },
                "description": "Lista todos los repartidores del tenant.\n\n**`GET /api/v1/drivers/`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "Obtener repartidor",
              "id": "75c214b3-fd21-5c91-8a0f-d319ff89cbb8",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/drivers/:driver_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    ":driver_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "driver_id",
                      "value": "{{driver_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/drivers/{driver_id}/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:driver_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear repartidor",
              "id": "ca42cb9d-20f7-5803-8340-bff3d7adbd1a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/drivers/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    ""
                  ]
                },
                "description": "Registra un nuevo repartidor. Genera un código de 8 chars que el repartidor\n\n**`POST /api/v1/drivers/`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar repartidor",
              "id": "081ff15c-cc90-569a-88c8-1263a41b5c17",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/drivers/:driver_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    ":driver_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "driver_id",
                      "value": "{{driver_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`PATCH /api/v1/drivers/{driver_id}/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:driver_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"active\": false,\n  \"invoice_types\": [],\n  \"name\": \"\",\n  \"phone\": \"\",\n  \"point_of_sale\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar repartidor",
              "id": "f09a78b3-24b0-5f29-84fa-0bc4d8733c70",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/drivers/:driver_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    ":driver_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "driver_id",
                      "value": "{{driver_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`DELETE /api/v1/drivers/{driver_id}/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:driver_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{driver_id}/regenerate-code",
              "id": "1d1b60b6-d935-5350-8b2c-affea43faf90",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/drivers/:driver_id/regenerate-code",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    ":driver_id",
                    "regenerate-code"
                  ],
                  "variable": [
                    {
                      "key": "driver_id",
                      "value": "{{driver_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Rota el código del driver (perdido / leaked). POST /api/v1/drivers/<id>/regenerate-code\n\n**`POST /api/v1/drivers/{driver_id}/regenerate-code`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:driver_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "reparto-analytics — Analytics de reparto de un RANGO de días: ranking de repartidores",
              "id": "fd48e2a6-505f-546e-8c7b-a1e5a871a009",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/drivers/reparto-analytics",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    "reparto-analytics"
                  ]
                },
                "description": "Analytics de reparto de un RANGO de días: ranking de repartidores\n\n**`GET /api/v1/drivers/reparto-analytics`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "reparto-history",
              "id": "f3537a05-d03a-5c79-88a4-db97b68e6ae0",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/drivers/reparto-history",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    "reparto-history"
                  ]
                },
                "description": "Historial de repartos de UN día: por repartidor/vehículo, los movimientos\n\n**`GET /api/v1/drivers/reparto-history`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "tier-info",
              "id": "bfef059c-1a52-52f9-8c3b-44983a8d3668",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/drivers/tier-info",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "drivers",
                    "tier-info"
                  ]
                },
                "description": "Devuelve el tier actual del widget + cuántos repartidores hay registrados.\n\n**`GET /api/v1/drivers/tier-info`**\n\n**Scope requerido:** `shipping:read`"
              }
            }
          ]
        },
        {
          "name": "Flota",
          "id": "9e8690ee-b783-53dc-8e5b-543f0e8368de",
          "description": "`/api/v1/fleet` · 9 endpoints · scopes: `shipping:read`, `shipping:write`",
          "item": [
            {
              "name": "devices/",
              "id": "60cd811e-a9e8-5b91-8e4f-64506021c525",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fleet/devices/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ""
                  ]
                },
                "description": "Lista todos los vehiculos. Cada doc trae last_location denormalizada para\n\n**`GET /api/v1/fleet/devices/`**\n\n**Scope requerido:** `shipping:read`"
              }
            },
            {
              "name": "devices/ — Registra un vehiculo. Genera codigo de 8 chars que el dispositivo usa",
              "id": "7caf5671-7af8-51ab-86d9-c25e142ebaf0",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/fleet/devices/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ""
                  ]
                },
                "description": "Registra un vehiculo. Genera codigo de 8 chars que el dispositivo usa\n\n**`POST /api/v1/fleet/devices/`**\n\n**Scope requerido:** `shipping:write`\n\n**Campos requeridos:** `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "devices/{device_id}/ — Hard delete del device + sus locations historicas + lookup global",
              "id": "3c1409bd-f5a4-5eb7-8c36-14c775214eda",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/fleet/devices/:device_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ":device_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "device_id",
                      "value": "{{device_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Hard delete del device + sus locations historicas + lookup global.\n\n**`DELETE /api/v1/fleet/devices/{device_id}/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:device_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "devices/{device_id}/",
              "id": "d28aaf7e-4812-567a-815e-16695b2f84f1",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fleet/devices/:device_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ":device_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "device_id",
                      "value": "{{device_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/fleet/devices/{device_id}/`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:device_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "devices/{device_id}/",
              "id": "197f25c4-4025-572e-89b7-c8a197743800",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/fleet/devices/:device_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ":device_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "device_id",
                      "value": "{{device_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`PATCH /api/v1/fleet/devices/{device_id}/`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:device_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"active\": false,\n  \"linked_driver_id\": \"\",\n  \"name\": \"\",\n  \"plate\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "devices/{device_id}/regenerate-code",
              "id": "ec97c3e4-6737-5645-8d75-ec8cece1dc0d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/fleet/devices/:device_id/regenerate-code",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ":device_id",
                    "regenerate-code"
                  ],
                  "variable": [
                    {
                      "key": "device_id",
                      "value": "{{device_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`POST /api/v1/fleet/devices/{device_id}/regenerate-code`**\n\n**Scope requerido:** `shipping:write`\n\n**Variables de path:**\n- `:device_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "devices/{device_id}/route-days",
              "id": "9284f127-0ad2-5e67-87ac-bdf38de5a19d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fleet/devices/:device_id/route-days",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ":device_id",
                    "route-days"
                  ],
                  "variable": [
                    {
                      "key": "device_id",
                      "value": "{{device_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Historial de rutas: dias calendario (en el tz del cliente) con actividad\n\n**`GET /api/v1/fleet/devices/{device_id}/route-days`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:device_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "devices/{device_id}/trail — Recorrido del vehiculo",
              "id": "4ed975f5-f4e9-5521-8810-486ccfd4da8d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fleet/devices/:device_id/trail",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "devices",
                    ":device_id",
                    "trail"
                  ],
                  "variable": [
                    {
                      "key": "device_id",
                      "value": "{{device_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Recorrido del vehiculo.\n\n**`GET /api/v1/fleet/devices/{device_id}/trail`**\n\n**Scope requerido:** `shipping:read`\n\n**Variables de path:**\n- `:device_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "tier-info",
              "id": "65ebe578-d74f-5073-83c6-9b02ff69578a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/fleet/tier-info",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "fleet",
                    "tier-info"
                  ]
                },
                "description": "Tier actual + cuantos vehiculos hay. NO requiere widget activo: si no hay\n\n**`GET /api/v1/fleet/tier-info`**\n\n**Scope requerido:** `shipping:read`"
              }
            }
          ]
        },
        {
          "name": "Servicio en campo · Órdenes",
          "id": "16e140dc-f12e-572c-8257-8e6e61e67b88",
          "description": "`/api/v1/field-service/work-orders` · 10 endpoints · scopes: `field_service:read`, `field_service:write`",
          "item": [
            {
              "name": "Listar órdenes de trabajo",
              "id": "70dec7ad-51c9-5543-827f-cb3c0589f83d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ""
                  ]
                },
                "description": "Lista paginada de órdenes del tenant.\n\n**`GET /api/v1/field-service/work-orders/`**\n\n**Scope requerido:** `field_service:read`"
              }
            },
            {
              "name": "Obtener orden de trabajo",
              "id": "a3e58bfd-d186-5d90-886e-91f27e5cdcfd",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/:work_order_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ":work_order_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "work_order_id",
                      "value": "{{work_order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Detalle de una orden, con la respuesta del formulario adjunta si la tiene.\n\n**`GET /api/v1/field-service/work-orders/{work_order_id}/`**\n\n**Scope requerido:** `field_service:read`\n\n**Variables de path:**\n- `:work_order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear orden de trabajo",
              "id": "04f91f05-dd46-5d1c-8764-3bc3113a0758",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ""
                  ]
                },
                "description": "Crea una orden de trabajo.\n\n**`POST /api/v1/field-service/work-orders/`**\n\n**Scope requerido:** `field_service:write`\n\n**Campos requeridos:** `title`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar orden de trabajo",
              "id": "e9c81e3d-f852-5c2a-80de-5e69d780dfaf",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/:work_order_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ":work_order_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "work_order_id",
                      "value": "{{work_order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`PATCH /api/v1/field-service/work-orders/{work_order_id}/`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:work_order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"\",\n  \"assigned_driver_id\": \"\",\n  \"customer\": {},\n  \"description\": \"\",\n  \"estimated_minutes\": 0,\n  \"form_template_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar orden de trabajo",
              "id": "71d431e8-5d41-50a2-8e7a-c7697fdcf223",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/:work_order_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ":work_order_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "work_order_id",
                      "value": "{{work_order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`DELETE /api/v1/field-service/work-orders/{work_order_id}/`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:work_order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "{work_order_id}/cancel",
              "id": "0be986f3-88f3-5ee0-8907-8e55f3b7b643",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/:work_order_id/cancel",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ":work_order_id",
                    "cancel"
                  ],
                  "variable": [
                    {
                      "key": "work_order_id",
                      "value": "{{work_order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`POST /api/v1/field-service/work-orders/{work_order_id}/cancel`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:work_order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{work_order_id}/emit-invoice",
              "id": "0056e06e-3914-5e54-8825-cf7d6e106a5c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/:work_order_id/emit-invoice",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ":work_order_id",
                    "emit-invoice"
                  ],
                  "variable": [
                    {
                      "key": "work_order_id",
                      "value": "{{work_order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Emite la factura AFIP de la orden a partir de su venta. Autoridad fiscal: la\n\n**`POST /api/v1/field-service/work-orders/{work_order_id}/emit-invoice`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:work_order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ambiente\": \"\",\n  \"tipo_comprobante\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{work_order_id}/emit-remito — Emite el remito de la orden a partir de su venta",
              "id": "fca95695-e25a-5c48-8be3-156cc34d7b47",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/:work_order_id/emit-remito",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ":work_order_id",
                    "emit-remito"
                  ],
                  "variable": [
                    {
                      "key": "work_order_id",
                      "value": "{{work_order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Emite el remito de la orden a partir de su venta.\n\n**`POST /api/v1/field-service/work-orders/{work_order_id}/emit-remito`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:work_order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{work_order_id}/generate-sale — Convierte la orden FINALIZADA en una venta real del sistema (mismo",
              "id": "0e0b49a8-ad64-5385-8e85-e3e91f6e4da1",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/:work_order_id/generate-sale",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    ":work_order_id",
                    "generate-sale"
                  ],
                  "variable": [
                    {
                      "key": "work_order_id",
                      "value": "{{work_order_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Convierte la orden FINALIZADA en una venta real del sistema (mismo\n\n**`POST /api/v1/field-service/work-orders/{work_order_id}/generate-sale`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:work_order_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n**Campos requeridos:** `payment_method`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"payment_method\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "tier-info — Tier del widget + cuántas órdenes abiertas hay",
              "id": "01b591dc-0c6f-5da7-822b-d0bda494d172",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/work-orders/tier-info",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "work-orders",
                    "tier-info"
                  ]
                },
                "description": "Tier del widget + cuántas órdenes abiertas hay.\n\n**`GET /api/v1/field-service/work-orders/tier-info`**\n\n**Scope requerido:** `field_service:read`"
              }
            }
          ]
        },
        {
          "name": "Servicio en campo · Formularios",
          "id": "17d45695-4ac7-5398-8a51-fa749ad7cdf6",
          "description": "`/api/v1/field-service/forms` · 6 endpoints · scopes: `field_service:read`, `field_service:write`",
          "item": [
            {
              "name": "Listar formularios",
              "id": "22edaf2e-6195-599f-820d-c850d891f16f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/forms/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "forms",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/field-service/forms/`**\n\n**Scope requerido:** `field_service:read`"
              }
            },
            {
              "name": "Obtener formulario",
              "id": "fc682b05-8b29-59e6-8f9d-44e26f94ffac",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/forms/:template_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "forms",
                    ":template_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "template_id",
                      "value": "{{template_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/field-service/forms/{template_id}/`**\n\n**Scope requerido:** `field_service:read`\n\n**Variables de path:**\n- `:template_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear formulario",
              "id": "f64aea22-2ddf-5d43-828b-7a097a8ef653",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/forms/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "forms",
                    ""
                  ]
                },
                "description": "Crea una plantilla de formulario.\n\n**`POST /api/v1/field-service/forms/`**\n\n**Scope requerido:** `field_service:write`\n\n**Campos requeridos:** `fields`, `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fields\": [],\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar formulario",
              "id": "0f20c29a-e025-5213-817b-7d7e6909a749",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/field-service/forms/:template_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "forms",
                    ":template_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "template_id",
                      "value": "{{template_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`PATCH /api/v1/field-service/forms/{template_id}/`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:template_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"active\": false,\n  \"description\": \"\",\n  \"fields\": [],\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar formulario",
              "id": "d2644691-9847-5c59-82dc-670fa189cc53",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/forms/:template_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "forms",
                    ":template_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "template_id",
                      "value": "{{template_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`DELETE /api/v1/field-service/forms/{template_id}/`**\n\n**Scope requerido:** `field_service:write`\n\n**Variables de path:**\n- `:template_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "submissions/ — Respuestas enviadas desde la calle",
              "id": "fa5e234e-3c7f-5910-8ab1-f49b9c4ebb67",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/field-service/forms/submissions/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "field-service",
                    "forms",
                    "submissions",
                    ""
                  ]
                },
                "description": "Respuestas enviadas desde la calle.\n\n**`GET /api/v1/field-service/forms/submissions/`**\n\n**Scope requerido:** `field_service:read`"
              }
            }
          ]
        },
        {
          "name": "Estadísticas",
          "id": "38043e15-091a-55bb-83a8-fca4c92a5ca5",
          "description": "`/api/v1/stats` · 7 endpoints · scopes: `stats:read`",
          "item": [
            {
              "name": "activity — Get activity statistics (stock movements, appointments, bookings)",
              "id": "58a7b17c-2c00-527a-83ac-e265262283c4",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/stats/activity",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "stats",
                    "activity"
                  ]
                },
                "description": "Get activity statistics (stock movements, appointments, bookings)\n\n**`GET /api/v1/stats/activity`**\n\n**Scope requerido:** `stats:read`"
              }
            },
            {
              "name": "dashboard — Get dashboard statistics",
              "id": "ab03ca29-a4c6-57fe-886f-85222a4fbe97",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/stats/dashboard",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "stats",
                    "dashboard"
                  ]
                },
                "description": "Get dashboard statistics\n\n**`GET /api/v1/stats/dashboard`**\n\n**Scope requerido:** `stats:read`"
              }
            },
            {
              "name": "dashboard/segments",
              "id": "91356ceb-5c83-5ecf-8bcf-27e358f923bb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/stats/dashboard/segments",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "stats",
                    "dashboard",
                    "segments"
                  ]
                },
                "description": "List the dashboard blocks that `GET /stats/dashboard?segments=` accepts.\n\n**`GET /api/v1/stats/dashboard/segments`**\n\n**Scope requerido:** `stats:read`"
              }
            },
            {
              "name": "invalidate-cache — Invalidate statistics cache for user",
              "id": "5ef2be75-5620-5b3e-8dd5-dfde21329f3f",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/stats/invalidate-cache",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "stats",
                    "invalidate-cache"
                  ]
                },
                "description": "Invalidate statistics cache for user\n\n**`POST /api/v1/stats/invalidate-cache`**\n\n**Scope requerido:** `stats:read`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "recalculate — Recalcula completamente las estadísticas del usuario",
              "id": "89b4e61e-2a08-5b3a-8371-84be4289b05e",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/stats/recalculate",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "stats",
                    "recalculate"
                  ]
                },
                "description": "Recalcula completamente las estadísticas del usuario\n\n**`POST /api/v1/stats/recalculate`**\n\n**Scope requerido:** `stats:read`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "sales — Get sales statistics summary (count/total/average) for a period",
              "id": "3f936167-d64e-5c80-8e72-ebaf9fccbb8a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/stats/sales",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "stats",
                    "sales"
                  ]
                },
                "description": "Get sales statistics summary (count/total/average) for a period.\n\n**`GET /api/v1/stats/sales`**\n\n**Scope requerido:** `stats:read`"
              }
            },
            {
              "name": "transactions — Get paginated transactions",
              "id": "49b50632-8268-5cc0-8d6b-74996d48fb4c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/stats/transactions",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "stats",
                    "transactions"
                  ]
                },
                "description": "Get paginated transactions\n\n**`POST /api/v1/stats/transactions`**\n\n**Scope requerido:** `stats:read`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"limit\": 0,\n  \"page\": 0,\n  \"per_page\": 0,\n  \"type\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "SCIM 2.0 (provisioning)",
          "id": "a3d0a8a5-9c60-5161-88d2-77b1fa2089b2",
          "description": "`/api/v1/scim` · 9 endpoints · scopes: `scim:provision`",
          "item": [
            {
              "name": "v2/ResourceTypes",
              "id": "946fccc7-2f88-5bde-8e3e-15190dfe6da0",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/ResourceTypes",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "ResourceTypes"
                  ]
                },
                "description": "**`GET /api/v1/scim/v2/ResourceTypes`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`."
              }
            },
            {
              "name": "v2/Schemas",
              "id": "44f48333-f804-536c-86f5-b556b5c440da",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/Schemas",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "Schemas"
                  ]
                },
                "description": "**`GET /api/v1/scim/v2/Schemas`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`."
              }
            },
            {
              "name": "v2/ServiceProviderConfig",
              "id": "b97a629d-c162-54c0-865f-2dc9d7147fab",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/ServiceProviderConfig",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "ServiceProviderConfig"
                  ]
                },
                "description": "**`GET /api/v1/scim/v2/ServiceProviderConfig`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`."
              }
            },
            {
              "name": "v2/Users",
              "id": "a6c004c3-cc0a-563a-8f84-d7244e3c0c04",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/Users",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "Users"
                  ]
                },
                "description": "**`GET /api/v1/scim/v2/Users`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`."
              }
            },
            {
              "name": "v2/Users",
              "id": "89b102b4-f07f-59e8-8c66-9c184f563fe8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/Users",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "Users"
                  ]
                },
                "description": "**`POST /api/v1/scim/v2/Users`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`.",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "v2/Users/{scim_id}",
              "id": "a640d790-b595-59eb-8a75-3f1c33a434d2",
              "request": {
                "method": "DELETE",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/Users/:scim_id",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "Users",
                    ":scim_id"
                  ],
                  "variable": [
                    {
                      "key": "scim_id",
                      "value": "{{scim_id}}",
                      "description": "Id SCIM del usuario."
                    }
                  ]
                },
                "description": "**`DELETE /api/v1/scim/v2/Users/{scim_id}`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\n**Variables de path:**\n- `:scim_id` — Id SCIM del usuario.\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`."
              }
            },
            {
              "name": "v2/Users/{scim_id}",
              "id": "5474bca3-e4ee-578f-829e-947e20d92558",
              "request": {
                "method": "GET",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/Users/:scim_id",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "Users",
                    ":scim_id"
                  ],
                  "variable": [
                    {
                      "key": "scim_id",
                      "value": "{{scim_id}}",
                      "description": "Id SCIM del usuario."
                    }
                  ]
                },
                "description": "**`GET /api/v1/scim/v2/Users/{scim_id}`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\n**Variables de path:**\n- `:scim_id` — Id SCIM del usuario.\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`."
              }
            },
            {
              "name": "v2/Users/{scim_id}",
              "id": "2bc3b40f-674f-5431-8a89-f059cd99cf54",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/Users/:scim_id",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "Users",
                    ":scim_id"
                  ],
                  "variable": [
                    {
                      "key": "scim_id",
                      "value": "{{scim_id}}",
                      "description": "Id SCIM del usuario."
                    }
                  ]
                },
                "description": "**`PATCH /api/v1/scim/v2/Users/{scim_id}`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\n**Variables de path:**\n- `:scim_id` — Id SCIM del usuario.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`.",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "v2/Users/{scim_id}",
              "id": "ad8d1a97-bdc9-57e3-8d21-76469e83ee6a",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/scim+json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/scim+json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/scim/v2/Users/:scim_id",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "scim",
                    "v2",
                    "Users",
                    ":scim_id"
                  ],
                  "variable": [
                    {
                      "key": "scim_id",
                      "value": "{{scim_id}}",
                      "description": "Id SCIM del usuario."
                    }
                  ]
                },
                "description": "**`PUT /api/v1/scim/v2/Users/{scim_id}`**\n\n**Scope requerido:** `scim:provision`\n\n**Autenticación:** sólo API token (este endpoint no acepta sesión web).\n\n**Variables de path:**\n- `:scim_id` — Id SCIM del usuario.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._\n\nEndpoints SCIM 2.0 para provisioning de usuarios desde un IdP (Okta, Entra ID, etc.). A diferencia del resto de la API, **sólo aceptan API token** (no hay fallback a sesión web) y usan el scope `scim:provision`. El `Content-Type` correcto es `application/scim+json`.",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Contabilidad",
      "id": "e825e99b-c67a-5b8a-8af6-6623409317ff",
      "description": "Plan de cuentas, asientos, libro IVA, conciliación bancaria, retenciones/percepciones y reportes.",
      "item": [
        {
          "name": "Plan de cuentas",
          "id": "96f4830c-77bc-5e6e-8bf5-b717cd279dee",
          "description": "`/api/v1/accounting/accounts` · 13 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "Listar cuentas",
              "id": "95bf7dc2-b474-5077-87b3-cf39b57aaca1",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/accounts/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/accounting/accounts/list/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "Obtener cuenta",
              "id": "4f967f26-de8e-5a18-8ef3-409ad1a87739",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/accounts/:account_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    ":account_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/accounting/accounts/{account_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear cuenta",
              "id": "dfa49298-3f1c-564d-828e-1dcb22c7528d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/accounts/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/accounting/accounts/`**\n\n**Scope requerido:** `accounting:write`\n\n**Campos requeridos:** `account_type`, `code`, `name`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"account_type\": \"\",\n  \"code\": \"\",\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar cuenta",
              "id": "f01e2621-889f-513d-8cb8-8c765b017408",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/accounts/:account_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    ":account_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/accounting/accounts/{account_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"afip_code\": \"\",\n  \"description\": \"\",\n  \"is_active\": false,\n  \"name\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar cuenta",
              "id": "1261fefb-86ca-5c5c-86df-f1de2d000649",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/accounts/:account_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    ":account_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_id",
                      "value": "{{account_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/accounting/accounts/{account_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:account_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "1e356268-5935-5201-8614-ac106d678e6b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/accounts/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/accounting/accounts/tags/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "balance/{account_code}/ — Get balance for a specific account",
              "id": "f0f0f7c5-c48c-52a7-8234-1a2c8ddc8d9f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/accounts/balance/:account_code/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "balance",
                    ":account_code",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_code",
                      "value": "{{account_code}}",
                      "description": "Código de la cuenta contable (ej. 1.1.01.001)."
                    }
                  ]
                },
                "description": "Get balance for a specific account.\n\n**`GET /api/v1/accounting/accounts/balance/{account_code}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:account_code` — Código de la cuenta contable (ej. 1.1.01.001)."
              }
            },
            {
              "name": "seed-defaults/ — Load default Argentine chart of accounts",
              "id": "7ce3bff5-8528-579c-872d-e1b95ab458b8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/accounts/seed-defaults/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "seed-defaults",
                    ""
                  ]
                },
                "description": "Load default Argentine chart of accounts.\n\n**`POST /api/v1/accounting/accounts/seed-defaults/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "tree/ — Get chart of accounts as hierarchical tree",
              "id": "99113c89-a8e1-5ea4-8fbb-76d0d85fc371",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/accounts/tree/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "tree",
                    ""
                  ]
                },
                "description": "Get chart of accounts as hierarchical tree.\n\n**`GET /api/v1/accounting/accounts/tree/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "Alta masiva de cuentas (alias obsoleto)",
              "id": "ce42a64f-5e3f-5622-8d31-2f318f7d6d89",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/accounts/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/accounting/accounts/batch-create/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de cuentas",
              "id": "86dbe642-fc8d-50de-88cd-65d033fc7857",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/accounts/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/accounting/accounts/bulk/create/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de cuentas",
              "id": "958ce4f8-6c00-5f67-80a6-55cf8c3d5815",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/accounts/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/accounting/accounts/bulk/delete/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de cuentas",
              "id": "32f4d4d0-a4ba-5fab-861a-0dc67e597beb",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/accounts/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "accounts",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/accounting/accounts/bulk/update/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Libro diario",
          "id": "efe40490-e961-5aa5-88fa-eab73e206588",
          "description": "`/api/v1/accounting/journal` · 14 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "Listar asientos",
              "id": "6aaa2f8c-3141-515c-85e8-fc8eb6bec289",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/journal/list/?page=1&per_page=20",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "list",
                    ""
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Máximo 100."
                    },
                    {
                      "key": "search",
                      "value": "",
                      "disabled": true,
                      "description": "Búsqueda de texto."
                    },
                    {
                      "key": "sort",
                      "value": "creation_date",
                      "disabled": true
                    },
                    {
                      "key": "sort_dir",
                      "value": "-1",
                      "disabled": true,
                      "description": "1 ascendente · -1 descendente"
                    },
                    {
                      "key": "fields",
                      "value": "id,name",
                      "disabled": true,
                      "description": "Proyección: campos separados por coma."
                    },
                    {
                      "key": "cursor",
                      "value": "",
                      "disabled": true,
                      "description": "Paginación por cursor (alternativa a page)."
                    }
                  ]
                },
                "description": "List entities with pagination, filtering, sorting, and field selection.\n\n**`GET /api/v1/accounting/journal/list/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "Obtener asiento",
              "id": "89bc6172-2726-5d99-8b18-f8927ff9eb6b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/journal/:journal_entry_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    ":journal_entry_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "journal_entry_id",
                      "value": "{{journal_entry_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entity details\n\n**`GET /api/v1/accounting/journal/{journal_entry_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:journal_entry_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Crear asiento",
              "id": "9c52b528-0f44-5e8e-8c33-73365234a18d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    ""
                  ]
                },
                "description": "Create a new entity\n\n**`POST /api/v1/accounting/journal/`**\n\n**Scope requerido:** `accounting:write`\n\n**Campos requeridos:** `description`, `lines`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"description\": \"\",\n  \"lines\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualizar asiento",
              "id": "c642f2bc-ee0e-5a67-8b3b-9dc4aaec40fe",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/:journal_entry_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    ":journal_entry_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "journal_entry_id",
                      "value": "{{journal_entry_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update entity\n\n**`PUT /api/v1/accounting/journal/{journal_entry_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:journal_entry_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"date\": \"2026-01-31\",\n  \"description\": \"\",\n  \"lines\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Eliminar asiento",
              "id": "056e1d04-4c77-5ad1-829c-d170383cfb83",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/journal/:journal_entry_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    ":journal_entry_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "journal_entry_id",
                      "value": "{{journal_entry_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete entity\n\n**`DELETE /api/v1/accounting/journal/{journal_entry_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:journal_entry_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "Etiquetas usadas",
              "id": "ad11953e-8f60-5c09-8168-19ac598afc11",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/journal/tags/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "tags",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/accounting/journal/tags/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "{entry_id}/post/ — Post (asentar) a draft journal entry, updating account balances",
              "id": "9ade0797-43b9-5102-8199-1d87d7dd27a9",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/:entry_id/post/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    ":entry_id",
                    "post",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "entry_id",
                      "value": "{{entry_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Post (asentar) a draft journal entry, updating account balances.\n\n**`POST /api/v1/accounting/journal/{entry_id}/post/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:entry_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "{entry_id}/reverse/ — Create a reversing entry (contrasiento)",
              "id": "721eb481-a164-5258-802b-cc3fd3a78099",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/:entry_id/reverse/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    ":entry_id",
                    "reverse",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "entry_id",
                      "value": "{{entry_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Create a reversing entry (contrasiento).\n\n**`POST /api/v1/accounting/journal/{entry_id}/reverse/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:entry_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "backfill/ — Generar asientos contables retroactivos para data histórica:",
              "id": "dee8424b-a59d-58b6-8249-b6c8982ce4dd",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/backfill/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "backfill",
                    ""
                  ]
                },
                "description": "Generar asientos contables retroactivos para data histórica:\n\n**`POST /api/v1/accounting/journal/backfill/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "ledger/{account_code}/ — Get account ledger (Mayor) for a specific account",
              "id": "5b54905c-70c5-5e89-809c-5568600f7279",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/journal/ledger/:account_code/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "ledger",
                    ":account_code",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_code",
                      "value": "{{account_code}}",
                      "description": "Código de la cuenta contable (ej. 1.1.01.001)."
                    }
                  ]
                },
                "description": "Get account ledger (Mayor) for a specific account.\n\n**`GET /api/v1/accounting/journal/ledger/{account_code}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:account_code` — Código de la cuenta contable (ej. 1.1.01.001)."
              }
            },
            {
              "name": "Alta masiva de asientos (alias obsoleto)",
              "id": "ca43f446-81fa-5d74-8143-6c471d8a6c9b",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/batch-create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "batch-create",
                    ""
                  ]
                },
                "description": "DEPRECATED — use POST /<base>/bulk/create/. Delegates to bulk_create.\n\n**`POST /api/v1/accounting/journal/batch-create/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Alta masiva de asientos",
              "id": "b7a84750-2362-5d72-8a05-5bb955e0bb4a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/bulk/create/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "bulk",
                    "create",
                    ""
                  ]
                },
                "description": "Bulk create entities (real insert_many; partial-failure aware).\n\n**`POST /api/v1/accounting/journal/bulk/create/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"items\": [\n    {}\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Baja masiva de asientos",
              "id": "c54523b7-86ba-5e36-8612-35d56a1de268",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/bulk/delete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "bulk",
                    "delete",
                    ""
                  ]
                },
                "description": "Bulk delete entities (existence + can_delete vetting, one delete_many).\n\n**`POST /api/v1/accounting/journal/bulk/delete/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"ids\": [\n    \"\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "Actualización masiva de asientos",
              "id": "4076c2a4-1572-5570-8d3c-df5ba6e9f6d9",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/journal/bulk/update/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "journal",
                    "bulk",
                    "update",
                    ""
                  ]
                },
                "description": "Bulk update entities (real bulk_write; partial-failure aware).\n\n**`PUT /api/v1/accounting/journal/bulk/update/`**\n\n**Scope requerido:** `accounting:write`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    {\n      \"id\": \"\",\n      \"name\": \"\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Reportes contables",
          "id": "ed60ce8f-80d8-515e-81cb-c1a57e083d0e",
          "description": "`/api/v1/accounting/reports` · 7 endpoints · scopes: `accounting:read`",
          "item": [
            {
              "name": "account-ledger/{account_code}/",
              "id": "91e34b9b-f05f-574d-8aee-2ec1a907e0ab",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/reports/account-ledger/:account_code/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "reports",
                    "account-ledger",
                    ":account_code",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "account_code",
                      "value": "{{account_code}}",
                      "description": "Código de la cuenta contable (ej. 1.1.01.001)."
                    }
                  ]
                },
                "description": "Mayor por cuenta — all posted entries for a specific account with running balance.\n\n**`GET /api/v1/accounting/reports/account-ledger/{account_code}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:account_code` — Código de la cuenta contable (ej. 1.1.01.001)."
              }
            },
            {
              "name": "balance-sheet/ — Balance General (Estado de Situacion Patrimonial)",
              "id": "e48ce45c-3114-5290-8d26-f0e2ef50155f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/reports/balance-sheet/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "reports",
                    "balance-sheet",
                    ""
                  ]
                },
                "description": "Balance General (Estado de Situacion Patrimonial).\n\n**`GET /api/v1/accounting/reports/balance-sheet/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "cash-flow/ — Flujo de Caja — simplified indirect method",
              "id": "cf25c99d-7020-5607-8c7d-cb11c58d706d",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/reports/cash-flow/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "reports",
                    "cash-flow",
                    ""
                  ]
                },
                "description": "Flujo de Caja — simplified indirect method.\n\n**`GET /api/v1/accounting/reports/cash-flow/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "daily-journal/{date}/ — Libro Diario — all entries for a specific date",
              "id": "86ca0b67-b520-5a0a-84e4-b843f40717b9",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/reports/daily-journal/:date/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "reports",
                    "daily-journal",
                    ":date",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "date",
                      "value": "{{date}}",
                      "description": "Fecha en formato AAAA-MM-DD."
                    }
                  ]
                },
                "description": "Libro Diario — all entries for a specific date.\n\n**`GET /api/v1/accounting/reports/daily-journal/{date}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:date` — Fecha en formato AAAA-MM-DD."
              }
            },
            {
              "name": "general-ledger/ — Mayor General — all posted entries grouped by account",
              "id": "5b2393f8-80bc-528a-8099-b7b628a51a0b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/reports/general-ledger/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "reports",
                    "general-ledger",
                    ""
                  ]
                },
                "description": "Mayor General — all posted entries grouped by account.\n\n**`GET /api/v1/accounting/reports/general-ledger/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "income-statement/ — Estado de Resultados",
              "id": "0e199288-3d87-514c-854a-cad1daecfe1a",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/reports/income-statement/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "reports",
                    "income-statement",
                    ""
                  ]
                },
                "description": "Estado de Resultados.\n\n**`GET /api/v1/accounting/reports/income-statement/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "trial-balance/ — Balance de Sumas y Saldos",
              "id": "d8650814-e1b1-5532-8f72-da2660bdbcc2",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/reports/trial-balance/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "reports",
                    "trial-balance",
                    ""
                  ]
                },
                "description": "Balance de Sumas y Saldos.\n\n**`GET /api/v1/accounting/reports/trial-balance/`**\n\n**Scope requerido:** `accounting:read`"
              }
            }
          ]
        },
        {
          "name": "Conciliación bancaria",
          "id": "b7788ed8-bde7-5c24-8442-a71d1f5f4879",
          "description": "`/api/v1/accounting/bank` · 12 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "Índice del recurso (links HATEOAS)",
              "id": "a3ab7b64-b6f0-565a-8c19-1b160aa8d883",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/bank/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    ""
                  ]
                },
                "description": "Returns HATEOAS links for resource endpoints\n\n**`GET /api/v1/accounting/bank/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "auto-match/{statement_id}/",
              "id": "debc79c4-886c-58e2-8271-c248d54ee8d8",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/bank/auto-match/:statement_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "auto-match",
                    ":statement_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "statement_id",
                      "value": "{{statement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Auto-match bank entries with journal entries by amount and date proximity.\n\n**`POST /api/v1/accounting/bank/auto-match/{statement_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:statement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "import/ — Import a bank statement from CSV or OFX (1.x/2.x) — format is sniffed",
              "id": "0fdb59c3-9ebf-52ac-8df9-adfbd6be60b3",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/bank/import/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "import",
                    ""
                  ]
                },
                "description": "Import a bank statement from CSV or OFX (1.x/2.x) — format is sniffed\n\n**`POST /api/v1/accounting/bank/import/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "manual-match/ — Manually match a bank entry with a journal entry",
              "id": "0831aac3-14c1-5946-8425-921f76992f09",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/bank/manual-match/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "manual-match",
                    ""
                  ]
                },
                "description": "Manually match a bank entry with a journal entry.\n\n**`POST /api/v1/accounting/bank/manual-match/`**\n\n**Scope requerido:** `accounting:write`\n\n**Campos requeridos:** `entry_index`, `journal_entry_id`, `statement_id`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"entry_index\": 0,\n  \"journal_entry_id\": \"\",\n  \"statement_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "reconcile/{statement_id}/ — Cerrar el statement: valida el cuadre y setea status='reconciled'",
              "id": "0ac630e1-d895-5163-887a-2d59ad5bf81a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/bank/reconcile/:statement_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "reconcile",
                    ":statement_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "statement_id",
                      "value": "{{statement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Cerrar el statement: valida el cuadre y setea status='reconciled'.\n\n**`POST /api/v1/accounting/bank/reconcile/{statement_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:statement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "reconciliation/{statement_id}/ — Saldo conciliado del extracto vs. libro banco + partidas pendientes",
              "id": "41f30f44-05cf-51fb-86a2-107942d2e633",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/bank/reconciliation/:statement_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "reconciliation",
                    ":statement_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "statement_id",
                      "value": "{{statement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Saldo conciliado del extracto vs. libro banco + partidas pendientes.\n\n**`GET /api/v1/accounting/bank/reconciliation/{statement_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:statement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "reconciliation/{statement_id}/suggestions/",
              "id": "5648f50c-7318-53a3-8806-bd515f192db2",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/bank/reconciliation/:statement_id/suggestions/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "reconciliation",
                    ":statement_id",
                    "suggestions",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "statement_id",
                      "value": "{{statement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Una sugerencia de asiento por cada movimiento bank_only (``unmatched``).\n\n**`GET /api/v1/accounting/bank/reconciliation/{statement_id}/suggestions/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:statement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "reconciliation/{statement_id}/suggestions/{movement_ref}/accept/ — Crea el asiento sugerido para ``movement_ref`` (índice de ``entries``)",
              "id": "e0e917d1-08a6-5b3b-8782-fbe47cb31c24",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/bank/reconciliation/:statement_id/suggestions/:movement_ref/accept/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "reconciliation",
                    ":statement_id",
                    "suggestions",
                    ":movement_ref",
                    "accept",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "statement_id",
                      "value": "{{statement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    },
                    {
                      "key": "movement_ref",
                      "value": "{{movement_ref}}",
                      "description": "Referencia del movimiento del extracto bancario."
                    }
                  ]
                },
                "description": "Crea el asiento sugerido para ``movement_ref`` (índice de ``entries``)\n\n**`POST /api/v1/accounting/bank/reconciliation/{statement_id}/suggestions/{movement_ref}/accept/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:statement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n- `:movement_ref` — Referencia del movimiento del extracto bancario.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "reopen/{statement_id}/ — Reversión del cierre: vuelve el statement a status='open'",
              "id": "aa33c6a2-e613-5698-8371-7e8c409192b5",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/bank/reopen/:statement_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "reopen",
                    ":statement_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "statement_id",
                      "value": "{{statement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Reversión del cierre: vuelve el statement a status='open'.\n\n**`POST /api/v1/accounting/bank/reopen/{statement_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:statement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "statements/ — List all bank statements",
              "id": "ac77cc2c-1c5a-5857-8d70-ce87d4e0ab7b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/bank/statements/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "statements",
                    ""
                  ]
                },
                "description": "List all bank statements.\n\n**`GET /api/v1/accounting/bank/statements/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "statements/{statement_id}/ — Get a bank statement with all entries",
              "id": "c890b253-10d7-5c92-8349-01c775b482d0",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/bank/statements/:statement_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "statements",
                    ":statement_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "statement_id",
                      "value": "{{statement_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get a bank statement with all entries.\n\n**`GET /api/v1/accounting/bank/statements/{statement_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:statement_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "unmatch/",
              "id": "0e432f2e-e02f-5372-8989-aa518accb6bc",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/bank/unmatch/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "bank",
                    "unmatch",
                    ""
                  ]
                },
                "description": "Reverse a reconciliation: send a matched bank entry back to 'unmatched'.\n\n**`POST /api/v1/accounting/bank/unmatch/`**\n\n**Scope requerido:** `accounting:write`\n\n**Campos requeridos:** `entry_index`, `statement_id`",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"entry_index\": 0,\n  \"statement_id\": \"\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Tablero contable",
          "id": "c6b9db3f-6031-5c88-8a90-d3ab6b5b4d3e",
          "description": "`/api/v1/accounting/dashboard` · 1 endpoints · scopes: `accounting:read`",
          "item": [
            {
              "name": "Listar tableros",
              "id": "83ad3992-f3c0-5ede-861f-cad22230eecb",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/dashboard/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "dashboard",
                    ""
                  ]
                },
                "description": "Aggregate accounting indicators for the control panel.\n\n**`GET /api/v1/accounting/dashboard/`**\n\n**Scope requerido:** `accounting:read`"
              }
            }
          ]
        },
        {
          "name": "Calendario fiscal",
          "id": "60445b6e-6cdc-53aa-8939-4be5b6075777",
          "description": "`/api/v1/accounting/fiscal-calendar` · 4 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "Listar vencimientos",
              "id": "9acc4deb-b520-58af-8286-04bf88fc0b28",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-calendar/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-calendar",
                    ""
                  ]
                },
                "description": "List all fiscal deadlines, optionally filtered by month/status.\n\n**`GET /api/v1/accounting/fiscal-calendar/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "{deadline_id}/complete/ — Mark a deadline as completed",
              "id": "e10affe7-39d1-596d-8108-8eb8a5b932d5",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-calendar/:deadline_id/complete/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-calendar",
                    ":deadline_id",
                    "complete",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "deadline_id",
                      "value": "{{deadline_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Mark a deadline as completed.\n\n**`POST /api/v1/accounting/fiscal-calendar/{deadline_id}/complete/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:deadline_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "seed/ — Seed AFIP deadlines for a year based on CUIT termination",
              "id": "0a080bc9-0042-5ce4-86b4-e8cd7abf9b02",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-calendar/seed/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-calendar",
                    "seed",
                    ""
                  ]
                },
                "description": "Seed AFIP deadlines for a year based on CUIT termination.\n\n**`POST /api/v1/accounting/fiscal-calendar/seed/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "upcoming/ — Get upcoming deadlines (next 30 days)",
              "id": "01a2a471-6972-5473-8e39-c0f9fa5f0499",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-calendar/upcoming/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-calendar",
                    "upcoming",
                    ""
                  ]
                },
                "description": "Get upcoming deadlines (next 30 days).\n\n**`GET /api/v1/accounting/fiscal-calendar/upcoming/`**\n\n**Scope requerido:** `accounting:read`"
              }
            }
          ]
        },
        {
          "name": "Cierre de ejercicio",
          "id": "e7bb76c5-3c0a-58e8-8be7-77e1f0dcd899",
          "description": "`/api/v1/accounting/fiscal-close` · 4 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "{year}/reopen/ — Reopen a previously closed fiscal year:",
              "id": "7373fe71-2aa8-5aaf-8470-2f1273aeeb19",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-close/:year/reopen/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-close",
                    ":year",
                    "reopen",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "year",
                      "value": "{{year}}",
                      "description": "Año del ejercicio (ej. 2026)."
                    }
                  ]
                },
                "description": "Reopen a previously closed fiscal year:\n\n**`POST /api/v1/accounting/fiscal-close/{year}/reopen/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:year` — Año del ejercicio (ej. 2026).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "calculate/{year}/ — Calculate fiscal year result without closing",
              "id": "455d7780-65fb-557f-893c-9449db180883",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-close/calculate/:year/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-close",
                    "calculate",
                    ":year",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "year",
                      "value": "{{year}}",
                      "description": "Año del ejercicio (ej. 2026)."
                    }
                  ]
                },
                "description": "Calculate fiscal year result without closing.\n\n**`GET /api/v1/accounting/fiscal-close/calculate/{year}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:year` — Año del ejercicio (ej. 2026)."
              }
            },
            {
              "name": "close/{year}/ — Close a fiscal year:",
              "id": "0d400fc7-dc03-544b-840f-41265b8e8805",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-close/close/:year/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-close",
                    "close",
                    ":year",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "year",
                      "value": "{{year}}",
                      "description": "Año del ejercicio (ej. 2026)."
                    }
                  ]
                },
                "description": "Close a fiscal year:\n\n**`POST /api/v1/accounting/fiscal-close/close/{year}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:year` — Año del ejercicio (ej. 2026).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "years/ — List all fiscal year closes",
              "id": "f36f50b9-1217-55c9-87ee-3ae934b433d7",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/fiscal-close/years/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "fiscal-close",
                    "years",
                    ""
                  ]
                },
                "description": "List all fiscal year closes.\n\n**`GET /api/v1/accounting/fiscal-close/years/`**\n\n**Scope requerido:** `accounting:read`"
              }
            }
          ]
        },
        {
          "name": "Monotributo",
          "id": "d4f2a5c3-8a2d-5d8c-8703-3512e8d300f7",
          "description": "`/api/v1/accounting/monotributo` · 1 endpoints · scopes: `accounting:read`",
          "item": [
            {
              "name": "recategorization/ — Estado de recategorización del Monotributo",
              "id": "95827ef0-37e8-597a-8fc5-6bcd6b972771",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/monotributo/recategorization/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "monotributo",
                    "recategorization",
                    ""
                  ]
                },
                "description": "Estado de recategorización del Monotributo.\n\n**`GET /api/v1/accounting/monotributo/recategorization/`**\n\n**Scope requerido:** `accounting:read`"
              }
            }
          ]
        },
        {
          "name": "Retenciones y percepciones",
          "id": "a51a34e9-d182-5ff0-8230-42554188dc73",
          "description": "`/api/v1/accounting/retenciones-percepciones` · 32 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "Índice del recurso (links HATEOAS)",
              "id": "8ddffae5-2aa4-5ab2-81af-887562d7b857",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    ""
                  ]
                },
                "description": "HATEOAS entry point for retenciones/percepciones.\n\n**`GET /api/v1/accounting/retenciones-percepciones/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "certificates/ — List retention certificates with pagination and filtering",
              "id": "3397613d-18b4-555d-8702-4d50f552c211",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/certificates/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "certificates",
                    ""
                  ]
                },
                "description": "List retention certificates with pagination and filtering.\n\n**`GET /api/v1/accounting/retenciones-percepciones/certificates/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "certificates/ — Issue a retention certificate",
              "id": "c29fdb2a-9e40-5170-86df-e0ea9f3e52d1",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/certificates/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "certificates",
                    ""
                  ]
                },
                "description": "Issue a retention certificate.\n\n**`POST /api/v1/accounting/retenciones-percepciones/certificates/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "certificates/{certificate_id}/ — Get a single certificate by ID",
              "id": "0f31c241-1d15-51ab-893b-b7b5525e2788",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/certificates/:certificate_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "certificates",
                    ":certificate_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "certificate_id",
                      "value": "{{certificate_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get a single certificate by ID.\n\n**`GET /api/v1/accounting/retenciones-percepciones/certificates/{certificate_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:certificate_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "certificates/{certificate_id}/annul/ — Annul a retention certificate",
              "id": "4bfdd27e-503e-5272-8fbe-d1aa7c8628e4",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/certificates/:certificate_id/annul/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "certificates",
                    ":certificate_id",
                    "annul",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "certificate_id",
                      "value": "{{certificate_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Annul a retention certificate.\n\n**`POST /api/v1/accounting/retenciones-percepciones/certificates/{certificate_id}/annul/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:certificate_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "certificates/{certificate_id}/pdf/ — Get certificate PDF data for rendering/download",
              "id": "970df3bb-c4c0-5655-8986-3032f9069e5b",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/certificates/:certificate_id/pdf/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "certificates",
                    ":certificate_id",
                    "pdf",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "certificate_id",
                      "value": "{{certificate_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get certificate PDF data for rendering/download.\n\n**`GET /api/v1/accounting/retenciones-percepciones/certificates/{certificate_id}/pdf/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:certificate_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "certificates/export/ — Export certificates for a period (SICORE/SIRE format)",
              "id": "c431b2f2-3201-5107-8045-9990353c778c",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/certificates/export/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "certificates",
                    "export",
                    ""
                  ]
                },
                "description": "Export certificates for a period (SICORE/SIRE format).\n\n**`GET /api/v1/accounting/retenciones-percepciones/certificates/export/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "config/ — Get retention/perception configuration",
              "id": "5ad7514d-d135-556b-8915-a49f41818c80",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/config/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "config",
                    ""
                  ]
                },
                "description": "Get retention/perception configuration.\n\n**`GET /api/v1/accounting/retenciones-percepciones/config/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "config/ — Update retention/perception configuration",
              "id": "5043b787-2b91-5c49-8897-99a4f8d6a9c8",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/config/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "config",
                    ""
                  ]
                },
                "description": "Update retention/perception configuration.\n\n**`PUT /api/v1/accounting/retenciones-percepciones/config/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "ddjj/{period}/",
              "id": "f45e0546-ee9d-5de3-8ea5-4cf95ddb784c",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/ddjj/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "ddjj",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Get DDJJ (Declaración Jurada) data for retenciones/percepciones for a period.\n\n**`GET /api/v1/accounting/retenciones-percepciones/ddjj/{period}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            },
            {
              "name": "import-suffered-csv/",
              "id": "c514d301-c1ea-5d9f-8dcc-e5a262da86bd",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/import-suffered-csv/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "import-suffered-csv",
                    ""
                  ]
                },
                "description": "Importar retenciones y percepciones SUFRIDAS desde el CSV de \"Mis Retenciones\" de ARCA.\n\n**`POST /api/v1/accounting/retenciones-percepciones/import-suffered-csv/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "percepciones/ — List percepciones with pagination and filtering",
              "id": "ed369eab-a820-5c8a-8c43-07300762e2b5",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/percepciones/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "percepciones",
                    ""
                  ]
                },
                "description": "List percepciones with pagination and filtering.\n\n**`GET /api/v1/accounting/retenciones-percepciones/percepciones/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "percepciones/ — Apply percepciones (persist to DB)",
              "id": "fb1ae172-1655-5965-8d91-89697f2611ae",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/percepciones/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "percepciones",
                    ""
                  ]
                },
                "description": "Apply percepciones (persist to DB).\n\n**`POST /api/v1/accounting/retenciones-percepciones/percepciones/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "percepciones/{percepcion_id}/ — Cancel a percepcion",
              "id": "0ae7df20-f181-59e2-827d-8271416b7bcb",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/percepciones/:percepcion_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "percepciones",
                    ":percepcion_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "percepcion_id",
                      "value": "{{percepcion_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Cancel a percepcion.\n\n**`DELETE /api/v1/accounting/retenciones-percepciones/percepciones/{percepcion_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:percepcion_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "percepciones/{percepcion_id}/ — Get a single percepcion by ID",
              "id": "71d00a0f-c29f-5a95-844a-0c6fe05e0a45",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/percepciones/:percepcion_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "percepciones",
                    ":percepcion_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "percepcion_id",
                      "value": "{{percepcion_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get a single percepcion by ID.\n\n**`GET /api/v1/accounting/retenciones-percepciones/percepciones/{percepcion_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:percepcion_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "percepciones/calculate/ — Calculate percepciones preview for an invoice (does not persist)",
              "id": "08233533-bffa-5d85-8e05-e5a55752ebc0",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/percepciones/calculate/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "percepciones",
                    "calculate",
                    ""
                  ]
                },
                "description": "Calculate percepciones preview for an invoice (does not persist).\n\n**`POST /api/v1/accounting/retenciones-percepciones/percepciones/calculate/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "percepciones/summary/{period}/ — Get perception summary for a period",
              "id": "a5625825-40cf-50b8-80dd-74dad5c2f9c7",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/percepciones/summary/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "percepciones",
                    "summary",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Get perception summary for a period.\n\n**`GET /api/v1/accounting/retenciones-percepciones/percepciones/summary/{period}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            },
            {
              "name": "regimes/ — List all retention/perception regimes",
              "id": "73b2d165-17f5-5977-873c-e842a5278366",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/regimes/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "regimes",
                    ""
                  ]
                },
                "description": "List all retention/perception regimes.\n\n**`GET /api/v1/accounting/retenciones-percepciones/regimes/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "regimes/ — Create a new retention/perception regime",
              "id": "1df328b3-24b4-5828-8fd2-f3bacafa8b56",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/regimes/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "regimes",
                    ""
                  ]
                },
                "description": "Create a new retention/perception regime.\n\n**`POST /api/v1/accounting/retenciones-percepciones/regimes/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "regimes/{regime_id}/ — Soft-delete a regime (set is_active=False)",
              "id": "16b4aa67-7eb2-5e03-82b5-04ee02ff0cdd",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/regimes/:regime_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "regimes",
                    ":regime_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "regime_id",
                      "value": "{{regime_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Soft-delete a regime (set is_active=False).\n\n**`DELETE /api/v1/accounting/retenciones-percepciones/regimes/{regime_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:regime_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "regimes/{regime_id}/ — Get a single regime by ID",
              "id": "3fd9e38a-0a7c-5707-872e-a12a600a95fe",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/regimes/:regime_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "regimes",
                    ":regime_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "regime_id",
                      "value": "{{regime_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get a single regime by ID.\n\n**`GET /api/v1/accounting/retenciones-percepciones/regimes/{regime_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:regime_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "regimes/{regime_id}/ — Update a regime",
              "id": "31f00a3a-4884-5df5-8197-e4aa872c82d6",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/regimes/:regime_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "regimes",
                    ":regime_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "regime_id",
                      "value": "{{regime_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update a regime.\n\n**`PUT /api/v1/accounting/retenciones-percepciones/regimes/{regime_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:regime_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "regimes/seed-defaults/ — Seed default Argentine retention/perception regimes",
              "id": "3e987577-c046-5601-8b56-5df261c065fe",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/regimes/seed-defaults/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "regimes",
                    "seed-defaults",
                    ""
                  ]
                },
                "description": "Seed default Argentine retention/perception regimes.\n\n**`POST /api/v1/accounting/retenciones-percepciones/regimes/seed-defaults/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "retenciones/ — List retenciones with pagination and filtering",
              "id": "a53469bb-4b88-540f-8343-e64b64609c36",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    ""
                  ]
                },
                "description": "List retenciones with pagination and filtering.\n\n**`GET /api/v1/accounting/retenciones-percepciones/retenciones/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "retenciones/{retention_id}/ — Cancel a retention",
              "id": "11020e0e-ec48-56a2-8b7a-9e4e29873fb0",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/:retention_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    ":retention_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "retention_id",
                      "value": "{{retention_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Cancel a retention.\n\n**`DELETE /api/v1/accounting/retenciones-percepciones/retenciones/{retention_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:retention_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "retenciones/{retention_id}/ — Get a single retention by ID",
              "id": "0698fda0-8bc7-50c6-8c08-1e0619325eb5",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/:retention_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    ":retention_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "retention_id",
                      "value": "{{retention_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get a single retention by ID.\n\n**`GET /api/v1/accounting/retenciones-percepciones/retenciones/{retention_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:retention_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "retenciones/apply/ — Apply calculated retentions (persist to DB)",
              "id": "708ffb03-59fc-5487-8e10-699254dfc0ae",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/apply/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    "apply",
                    ""
                  ]
                },
                "description": "Apply calculated retentions (persist to DB).\n\n**`POST /api/v1/accounting/retenciones-percepciones/retenciones/apply/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "retenciones/calculate/",
              "id": "223a43f3-257d-5de6-8ec0-66a741d5739c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/calculate/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    "calculate",
                    ""
                  ]
                },
                "description": "Calculate retentions preview for a supplier payment (does not persist).\n\n**`POST /api/v1/accounting/retenciones-percepciones/retenciones/calculate/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "retenciones/emitir-ws/{period}/ — Emite las retenciones del período por el web service WS-SIRE",
              "id": "a1ab812e-78b7-5eab-8edb-6695bc0bf960",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/emitir-ws/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    "emitir-ws",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Emite las retenciones del período por el web service WS-SIRE.\n\n**`POST /api/v1/accounting/retenciones-percepciones/retenciones/emitir-ws/{period}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "retenciones/sire-txt/{period}/ — Genera el TXT de emisión por lote de SIRE (F.2005) del período",
              "id": "553eed3b-b39c-53b7-8e59-0c13c2d92e09",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/sire-txt/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    "sire-txt",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Genera el TXT de emisión por lote de SIRE (F.2005) del período.\n\n**`GET /api/v1/accounting/retenciones-percepciones/retenciones/sire-txt/{period}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            },
            {
              "name": "retenciones/sire-ws-status/ — Health check del WS-SIRE (verifica conectividad con AFIP)",
              "id": "5ace37dd-ebd5-53f8-8d3c-6e6da7da1514",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/sire-ws-status/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    "sire-ws-status",
                    ""
                  ]
                },
                "description": "Health check del WS-SIRE (verifica conectividad con AFIP).\n\n**`GET /api/v1/accounting/retenciones-percepciones/retenciones/sire-ws-status/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "retenciones/summary/{period}/ — Get retention summary for a period",
              "id": "998d7743-a636-5eb2-8f45-ac256386386e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/accounting/retenciones-percepciones/retenciones/summary/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "accounting",
                    "retenciones-percepciones",
                    "retenciones",
                    "summary",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Get retention summary for a period.\n\n**`GET /api/v1/accounting/retenciones-percepciones/retenciones/summary/{period}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            }
          ]
        },
        {
          "name": "Libro IVA",
          "id": "ee2eb06d-3bb0-54d1-88ff-31e5538d8bb3",
          "description": "`/api/v1/iva` · 24 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "books/{book_id}/entries/ — Get entries from book",
              "id": "8168e746-9e29-548a-8f3c-fbac2b8d2a9e",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/books/:book_id/entries/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "books",
                    ":book_id",
                    "entries",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "book_id",
                      "value": "{{book_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Get entries from book\n\n**`GET /api/v1/iva/books/{book_id}/entries/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:book_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "books/{book_id}/entries/ — Add manual entry to IVA book (sales or purchases)",
              "id": "619d783e-188d-59c8-8873-b658e31c2b7d",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/books/:book_id/entries/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "books",
                    ":book_id",
                    "entries",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "book_id",
                      "value": "{{book_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Add manual entry to IVA book (sales or purchases)\n\n**`POST /api/v1/iva/books/{book_id}/entries/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:book_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "books/{period}/{book_type}/ — Get IVA book for period",
              "id": "6cffe151-d418-5c2a-84c4-79572920fad3",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/books/:period/:book_type/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "books",
                    ":period",
                    ":book_type",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    },
                    {
                      "key": "book_type",
                      "value": "{{book_type}}",
                      "description": "ventas | compras"
                    }
                  ]
                },
                "description": "Get IVA book for period\n\n**`GET /api/v1/iva/books/{period}/{book_type}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n- `:book_type` — ventas | compras"
              }
            },
            {
              "name": "books/{period}/{book_type}/import/ — G11 — Importar libro IVA desde CSV/Excel",
              "id": "ae3c2f74-10db-579d-82e2-aa04f44c3ad1",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/books/:period/:book_type/import/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "books",
                    ":period",
                    ":book_type",
                    "import",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    },
                    {
                      "key": "book_type",
                      "value": "{{book_type}}",
                      "description": "ventas | compras"
                    }
                  ]
                },
                "description": "G11 — Importar libro IVA desde CSV/Excel.\n\n**`POST /api/v1/iva/books/{period}/{book_type}/import/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n- `:book_type` — ventas | compras\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "books/{period}/close/ — Close period (both sales and purchases books)",
              "id": "457a061e-b2ba-5de7-8f9f-182fa5eb48b6",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/books/:period/close/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "books",
                    ":period",
                    "close",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Close period (both sales and purchases books)\n\n**`POST /api/v1/iva/books/{period}/close/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "books/{period}/reopen/",
              "id": "2f4d9cb1-4640-508a-8a61-36e6ea432549",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/books/:period/reopen/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "books",
                    ":period",
                    "reopen",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Reabrir período cerrado (requiere razón en body opcional). Bloquea la reapertura sólo si\n\n**`POST /api/v1/iva/books/{period}/reopen/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "cleanup-duplicates/ — FIX Issue #12: Remove duplicate IVA book entries",
              "id": "e5d21675-3bc9-56b0-8b1d-fcfc41643ea1",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/cleanup-duplicates/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "cleanup-duplicates",
                    ""
                  ]
                },
                "description": "FIX Issue #12: Remove duplicate IVA book entries.\n\n**`POST /api/v1/iva/cleanup-duplicates/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "cleanup-legacy-rates/",
              "id": "414508d3-b587-58af-8924-33a1b1df097c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/cleanup-legacy-rates/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "cleanup-legacy-rates",
                    ""
                  ]
                },
                "description": "Backfill: para entries con iva_rates=[] (creadas antes del fix de Fase 1),\n\n**`POST /api/v1/iva/cleanup-legacy-rates/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "config/ — Get IVA configuration",
              "id": "c7e7b68c-ac7b-57cb-86ae-53a3e829e4be",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/config/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "config",
                    ""
                  ]
                },
                "description": "Get IVA configuration\n\n**`GET /api/v1/iva/config/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "config/ — Update IVA configuration",
              "id": "eb5c8a7f-5913-5ba0-8421-08fef328d96f",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/config/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "config",
                    ""
                  ]
                },
                "description": "Update IVA configuration\n\n**`PUT /api/v1/iva/config/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "declaration/{period}/",
              "id": "985f8749-9313-5fcb-8882-c73f555891a8",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/declaration/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "declaration",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Get declaration data for AFIP F.2051 (IVA Simple, Portal IVA — RG 5705/2025).\n\n**`GET /api/v1/iva/declaration/{period}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            },
            {
              "name": "declaration/{period}/submit/",
              "id": "a158edbc-52f3-5c31-8597-8aba38533ba7",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/declaration/:period/submit/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "declaration",
                    ":period",
                    "submit",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Preparar la DDJJ de IVA (F.2051, IVA Simple — Portal IVA, RG 5705/2025).\n\n**`POST /api/v1/iva/declaration/{period}/submit/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "declaration/{period}/vep/",
              "id": "699b4f54-54fa-5db5-87ee-c4f74b6a5cd8",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/declaration/:period/vep/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "declaration",
                    ":period",
                    "vep",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "G24 — Genera datos de VEP (Volante Electrónico de Pago) para el IVA (F.2051) del período.\n\n**`GET /api/v1/iva/declaration/{period}/vep/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            },
            {
              "name": "entries/{entry_id}/ — Delete (cancel) a manual IVA book entry",
              "id": "5585a3f9-2e2e-5da3-8e66-d2e7fd962126",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/entries/:entry_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "entries",
                    ":entry_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "entry_id",
                      "value": "{{entry_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Delete (cancel) a manual IVA book entry\n\n**`DELETE /api/v1/iva/entries/{entry_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:entry_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "entries/{entry_id}/ — Update a manual IVA book entry",
              "id": "2212cc8e-f46e-5f8a-8e93-a8559897d14f",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/entries/:entry_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "entries",
                    ":entry_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "entry_id",
                      "value": "{{entry_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "Update a manual IVA book entry\n\n**`PUT /api/v1/iva/entries/{entry_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:entry_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "export/{period}/{book_type}/ — Export IVA book to different formats",
              "id": "00535277-0e36-5ab9-8fc6-e61635148b8f",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/export/:period/:book_type/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "export",
                    ":period",
                    ":book_type",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    },
                    {
                      "key": "book_type",
                      "value": "{{book_type}}",
                      "description": "ventas | compras"
                    }
                  ]
                },
                "description": "Export IVA book to different formats.\n\n**`GET /api/v1/iva/export/{period}/{book_type}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n- `:book_type` — ventas | compras"
              }
            },
            {
              "name": "export/{period}/{book_type}/download/ — Download IVA book export as file (direct download)",
              "id": "b2f4c1c3-1832-5417-81e0-1f9270d52818",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/export/:period/:book_type/download/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "export",
                    ":period",
                    ":book_type",
                    "download",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    },
                    {
                      "key": "book_type",
                      "value": "{{book_type}}",
                      "description": "ventas | compras"
                    }
                  ]
                },
                "description": "Download IVA book export as file (direct download).\n\n**`GET /api/v1/iva/export/{period}/{book_type}/download/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n- `:book_type` — ventas | compras"
              }
            },
            {
              "name": "reports/by-entity/{period}/{cuit}/ — G12 — Libro IVA por tercero/CUIT",
              "id": "cbdad672-230c-5ac5-8daa-33b7a13933ae",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/reports/by-entity/:period/:cuit/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "reports",
                    "by-entity",
                    ":period",
                    ":cuit",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    },
                    {
                      "key": "cuit",
                      "value": "{{cuit}}",
                      "description": "CUIT sin guiones (11 dígitos)."
                    }
                  ]
                },
                "description": "G12 — Libro IVA por tercero/CUIT.\n\n**`GET /api/v1/iva/reports/by-entity/{period}/{cuit}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n- `:cuit` — CUIT sin guiones (11 dígitos)."
              }
            },
            {
              "name": "reports/top-customers/{period}/ — G13 — Top clientes/proveedores por IVA del período",
              "id": "d09f44db-aec6-5b3a-8ae8-e3d6a4a35a09",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/reports/top-customers/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "reports",
                    "top-customers",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "G13 — Top clientes/proveedores por IVA del período.\n\n**`GET /api/v1/iva/reports/top-customers/{period}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            },
            {
              "name": "reports/yearly-evolution/{year}/ — G13 — Evolución mensual del IVA en un año fiscal completo",
              "id": "814fff79-75e6-5add-87ef-3262565d57ad",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/reports/yearly-evolution/:year/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "reports",
                    "yearly-evolution",
                    ":year",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "year",
                      "value": "{{year}}",
                      "description": "Año del ejercicio (ej. 2026)."
                    }
                  ]
                },
                "description": "G13 — Evolución mensual del IVA en un año fiscal completo.\n\n**`GET /api/v1/iva/reports/yearly-evolution/{year}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:year` — Año del ejercicio (ej. 2026)."
              }
            },
            {
              "name": "summary/{period}/ — Get period summary",
              "id": "535b790e-3d35-56a7-8e54-f634db44d655",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/iva/summary/:period/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "summary",
                    ":period",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Get period summary\n\n**`GET /api/v1/iva/summary/{period}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608)."
              }
            },
            {
              "name": "summary/{period}/calculate/ — Recalculate period summary",
              "id": "c454c93f-65ed-5fe7-86ee-2b1cd4f1c31c",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/summary/:period/calculate/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "summary",
                    ":period",
                    "calculate",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "period",
                      "value": "{{period}}",
                      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
                    }
                  ]
                },
                "description": "Recalculate period summary\n\n**`POST /api/v1/iva/summary/{period}/calculate/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:period` — Período fiscal en formato AAAAMM (ej. 202608).\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "sync/",
              "id": "9fa2547f-cd9e-5409-8a4a-13e6e0a3dd7a",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/sync/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "sync",
                    ""
                  ]
                },
                "description": "Sincroniza comprobantes de VENTA y COMPRA pendientes a los libros de IVA.\n\n**`POST /api/v1/iva/sync/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "sync/compras/ — Backfill dedicado al libro de IVA COMPRAS (finding #4)",
              "id": "a142f177-a043-5c3e-8f82-837a0ecb4c25",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/iva/sync/compras/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "iva",
                    "sync",
                    "compras",
                    ""
                  ]
                },
                "description": "Backfill dedicado al libro de IVA COMPRAS (finding #4).\n\n**`POST /api/v1/iva/sync/compras/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            }
          ]
        },
        {
          "name": "Multi-contribuyente",
          "id": "2621be76-a152-5783-8b23-7c3f58831382",
          "description": "`/api/v1/widgets/multi-taxpayer` · 6 endpoints · scopes: `accounting:read`, `accounting:write`",
          "item": [
            {
              "name": "taxpayers/",
              "id": "d495d0f5-54c8-5e5b-8d16-fd7343263229",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/widgets/multi-taxpayer/taxpayers/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "widgets",
                    "multi-taxpayer",
                    "taxpayers",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/widgets/multi-taxpayer/taxpayers/`**\n\n**Scope requerido:** `accounting:read`"
              }
            },
            {
              "name": "taxpayers/",
              "id": "609ab524-0b38-56ba-821a-62fe87699fb2",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/widgets/multi-taxpayer/taxpayers/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "widgets",
                    "multi-taxpayer",
                    "taxpayers",
                    ""
                  ]
                },
                "description": "**`POST /api/v1/widgets/multi-taxpayer/taxpayers/`**\n\n**Scope requerido:** `accounting:write`\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "taxpayers/{taxpayer_id}/",
              "id": "4bbe7f6f-72c4-5336-8d20-144d85d9fa58",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base}}/widgets/multi-taxpayer/taxpayers/:taxpayer_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "widgets",
                    "multi-taxpayer",
                    "taxpayers",
                    ":taxpayer_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "taxpayer_id",
                      "value": "{{taxpayer_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`DELETE /api/v1/widgets/multi-taxpayer/taxpayers/{taxpayer_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:taxpayer_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "taxpayers/{taxpayer_id}/",
              "id": "c82b27bc-9a20-50c1-84c1-cc425b8db607",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/widgets/multi-taxpayer/taxpayers/:taxpayer_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "widgets",
                    "multi-taxpayer",
                    "taxpayers",
                    ":taxpayer_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "taxpayer_id",
                      "value": "{{taxpayer_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`GET /api/v1/widgets/multi-taxpayer/taxpayers/{taxpayer_id}/`**\n\n**Scope requerido:** `accounting:read`\n\n**Variables de path:**\n- `:taxpayer_id` — El `id` (UUID) del recurso — no el `_id` de Mongo."
              }
            },
            {
              "name": "taxpayers/{taxpayer_id}/",
              "id": "ec560d77-20d3-5924-8d56-7d82748de8b8",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base}}/widgets/multi-taxpayer/taxpayers/:taxpayer_id/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "widgets",
                    "multi-taxpayer",
                    "taxpayers",
                    ":taxpayer_id",
                    ""
                  ],
                  "variable": [
                    {
                      "key": "taxpayer_id",
                      "value": "{{taxpayer_id}}",
                      "description": "El `id` (UUID) del recurso."
                    }
                  ]
                },
                "description": "**`PUT /api/v1/widgets/multi-taxpayer/taxpayers/{taxpayer_id}/`**\n\n**Scope requerido:** `accounting:write`\n\n**Variables de path:**\n- `:taxpayer_id` — El `id` (UUID) del recurso — no el `_id` de Mongo.\n\n_El backend no declara un schema de validación para este endpoint, así que la colección no puede inventar un cuerpo de ejemplo: va un `{}` para que completes los campos. Algunos endpoints de acción realmente no necesitan cuerpo._",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              }
            },
            {
              "name": "taxpayers/all/",
              "id": "2b532e77-7dfe-5c16-80de-f5f6ee161093",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base}}/widgets/multi-taxpayer/taxpayers/all/",
                  "host": [
                    "{{base}}"
                  ],
                  "path": [
                    "widgets",
                    "multi-taxpayer",
                    "taxpayers",
                    "all",
                    ""
                  ]
                },
                "description": "**`GET /api/v1/widgets/multi-taxpayer/taxpayers/all/`**\n\n**Scope requerido:** `accounting:read`"
              }
            }
          ]
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "base",
      "value": "https://api.yo-facturo.com/api/v1",
      "type": "string"
    },
    {
      "key": "token",
      "value": "",
      "type": "string",
      "description": "Tu API token (yf_live_…). Se genera en Configuración → Integraciones → API Tokens."
    },
    {
      "key": "account_code",
      "value": "",
      "type": "string",
      "description": "Código de la cuenta contable (ej. 1.1.01.001)."
    },
    {
      "key": "account_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "activity_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "appointment_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "billing_system",
      "value": "",
      "type": "string",
      "description": "Sistema de facturación: afip, dgi, dian, sunat, sefaz, sat."
    },
    {
      "key": "book_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "book_type",
      "value": "",
      "type": "string",
      "description": "ventas | compras"
    },
    {
      "key": "caea_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "cash_register_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "category_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "certificate_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "comprobante_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "contract_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "country",
      "value": "",
      "type": "string",
      "description": "Código ISO del país (AR, UY, BR, BO…)."
    },
    {
      "key": "crm_communication_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "crm_opportunity_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "crm_pipeline_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "crm_reminder_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "crm_segment_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "crm_task_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "crm_template_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "cuit",
      "value": "",
      "type": "string",
      "description": "CUIT sin guiones (11 dígitos)."
    },
    {
      "key": "customer_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "date",
      "value": "",
      "type": "string",
      "description": "Fecha en formato AAAA-MM-DD."
    },
    {
      "key": "deadline_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "delivery_note_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "device_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "driver_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "entity_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "entity_type",
      "value": "",
      "type": "string",
      "description": "customer | supplier"
    },
    {
      "key": "entry_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "expense_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "fce_invoice_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "goals_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "journal_entry_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "movement_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "movement_ref",
      "value": "",
      "type": "string",
      "description": "Referencia del movimiento del extracto bancario."
    },
    {
      "key": "order_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "payment_method_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "percepcion_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "period",
      "value": "",
      "type": "string",
      "description": "Período fiscal en formato AAAAMM (ej. 202608)."
    },
    {
      "key": "pos_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "pricing_profile_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "product_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "products_option_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "promotion_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "provider_name",
      "value": "",
      "type": "string",
      "description": "Nombre del proveedor de envíos (andreani, oca, correo-argentino, mercado-envios…)."
    },
    {
      "key": "quote_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "quote_identifier",
      "value": "",
      "type": "string",
      "description": ""
    },
    {
      "key": "received_invoice_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "regime_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "rental_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "retention_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "rewards_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "rule_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "sale_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "sales_point_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "scim_id",
      "value": "",
      "type": "string",
      "description": "Id SCIM del usuario."
    },
    {
      "key": "service_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "shipment_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "statement_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "supplier_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "supply_consumption_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "supply_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "taxpayer_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "template_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "tipo_comprobante",
      "value": "",
      "type": "string",
      "description": "Código AFIP del tipo de comprobante (1=Factura A, 6=Factura B, 11=Factura C…)."
    },
    {
      "key": "tipo_nota",
      "value": "",
      "type": "string",
      "description": "credito | debito"
    },
    {
      "key": "tracking_number",
      "value": "",
      "type": "string",
      "description": "Número de seguimiento del envío."
    },
    {
      "key": "work_order_id",
      "value": "",
      "type": "string",
      "description": "El `id` (UUID) del recurso."
    },
    {
      "key": "year",
      "value": "",
      "type": "string",
      "description": "Año del ejercicio (ej. 2026)."
    }
  ]
}
