{
  "item": [
    {
      "id": "ba636474-1174-4122-b606-9b738f8f2c16",
      "name": "Auth",
      "description": {
        "content": "Autenticacion y tokens",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "66661ce3-600b-47e9-9b54-dcf63bc987b7",
          "name": "Obtener Bearer token",
          "request": {
            "name": "Obtener Bearer token",
            "description": {
              "content": "Autentica con usuario y password de `ws_usuario_empresa`. Retorna un Bearer token valido por 24 horas con la empresa asociada al usuario.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/login",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "login"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"usuario\": \"{{usuario}}\",\n  \"password\": \"{{password}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// ClickBalance: capturar token automáticamente del envelope",
                  "const json = pm.response.json();",
                  "if (json && json.data && json.data.token) {",
                  "    pm.collectionVariables.set('token', json.data.token);",
                  "    console.log('[ClickBalance] Token guardado. Empresa:', json.data.empresa_id, '/', json.data.empresa);",
                  "    console.log('[ClickBalance] Expira:', json.data.expires_at);",
                  "} else {",
                  "    console.warn('[ClickBalance] Login no devolvió token.', json && json.errors);",
                  "}"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5422ea40-159a-4e50-bee9-fb6e6ac0c75b",
          "name": "Obtener permisos del usuario",
          "request": {
            "name": "Obtener permisos del usuario",
            "description": {
              "content": "Retorna los modulos, modelos y acciones que el usuario autenticado puede ver/ejecutar. Genia v2 lo usa para construir el menu dinamico y filtrar botones CRUD/acciones. Resultado cacheado en Memcached 300s. Header `Cache-Control: private, max-age=300`.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/permissions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "permissions"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "6bc2f891-04e0-4e7f-8439-4d51f6e28c94",
              "name": "Permisos del usuario",
              "originalRequest": {
                "url": {
                  "path": [
                    "auth",
                    "permissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"user\": {\n      \"id\": 20712,\n      \"codusuario\": \"admin\",\n      \"nombre\": \"Daniel Bugarin\",\n      \"empresa_id\": 7134,\n      \"empresa_nombre\": \"Xenon Industrial Articles\",\n      \"plaza_id\": null,\n      \"plaza_nombre\": null,\n      \"perfil_id\": 3,\n      \"perfil_nombre\": \"Administrador\"\n    },\n    \"modules\": {\n      \"key_0\": {\n        \"label\": \"Compras\",\n        \"icon\": \"ki-handcart\",\n        \"order\": 10,\n        \"models\": {\n          \"key_0\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          }\n        }\n      },\n      \"key_1\": {\n        \"label\": \"Compras\",\n        \"icon\": \"ki-handcart\",\n        \"order\": 10,\n        \"models\": {\n          \"key_0\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          }\n        }\n      },\n      \"key_2\": {\n        \"label\": \"Compras\",\n        \"icon\": \"ki-handcart\",\n        \"order\": 10,\n        \"models\": {\n          \"key_0\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          },\n          \"key_1\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          },\n          \"key_2\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          },\n          \"key_3\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          }\n        }\n      },\n      \"key_3\": {\n        \"label\": \"Compras\",\n        \"icon\": \"ki-handcart\",\n        \"order\": 10,\n        \"models\": {\n          \"key_0\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          },\n          \"key_1\": {\n            \"label\": \"Pedido\",\n            \"label_plural\": \"Pedidos\",\n            \"permissions\": [\n              \"read\",\n              \"create\",\n              \"update\",\n              \"cancel\",\n              \"delete\"\n            ],\n            \"actions\": [\n              \"autorizar_compra\",\n              \"cancelar_compra\"\n            ]\n          }\n        }\n      }\n    }\n  },\n  \"meta\": {\n    \"generated_at\": \"1961-07-08T14:36:01.938Z\",\n    \"cache_ttl_seconds\": 300,\n    \"cached\": false\n  },\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9f6624c2-e2d6-40d1-8e7b-22d46e46398d",
              "name": "Token invalido o expirado",
              "originalRequest": {
                "url": {
                  "path": [
                    "auth",
                    "permissions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    },\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "762ce83e-1892-4d9f-977a-00c95174a35e",
          "name": "Renovar Bearer token",
          "request": {
            "name": "Renovar Bearer token",
            "description": {
              "content": "Si al token le quedan menos de 4 horas, genera uno nuevo (24h). Si le quedan mas de 4h, retorna el mismo token sin cambios (idempotente). Token expirado retorna 401.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/refresh",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "refresh"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [
            {
              "id": "f9b9c1f1-7e9b-4a0a-a55c-4020cb03aa6d",
              "name": "Token actual o renovado",
              "originalRequest": {
                "url": {
                  "path": [
                    "auth",
                    "refresh"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"token\": \"string\",\n    \"expires_at\": \"1992-07-06T06:20:00.490Z\"\n  },\n  \"meta\": {},\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2d96e5f1-7a87-46a7-acf2-27a158df3abf",
              "name": "Token invalido o expirado",
              "originalRequest": {
                "url": {
                  "path": [
                    "auth",
                    "refresh"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    },\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "1bc1e10c-0ea8-4c4d-b447-5a21badc3a1b",
          "name": "Cerrar sesion (invalidar token)",
          "request": {
            "name": "Cerrar sesion (invalidar token)",
            "description": {
              "content": "Elimina el token del servidor. Con `?all=true` elimina todos los tokens del usuario en la empresa. Siempre retorna 204 (fire-and-forget, no revela si el token existia).",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/logout?all=true",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "logout"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "all",
                  "value": "true",
                  "description": "Si es \"true\", cierra todas las sesiones del usuario en la empresa"
                }
              ],
              "variable": []
            },
            "method": "POST"
          },
          "response": [
            {
              "id": "d0c60487-e1a6-4b94-a72c-c78bd8fed12c",
              "name": "Token invalidado (siempre, incluso si ya no existia)",
              "originalRequest": {
                "url": {
                  "path": [
                    "auth",
                    "logout"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "all",
                      "value": "true"
                    }
                  ],
                  "variable": []
                },
                "method": "POST",
                "body": {}
              },
              "status": "No Content",
              "code": 204,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/plain"
                }
              ],
              "body": "",
              "cookie": [],
              "_postman_previewlanguage": "text"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2d075ba9-7907-43a5-938b-220e9d099935",
          "name": "Forzar recalculo de permisos",
          "request": {
            "name": "Forzar recalculo de permisos",
            "description": {
              "content": "Borra la cache Memcached de permisos del usuario. La siguiente llamada a GET /auth/permissions recalcula desde BD. Caso de uso: admin cambia perfil del usuario, llama este endpoint para reflejar el cambio sin esperar 5 min.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/permissions/invalidate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "permissions",
                "invalidate"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [
            {
              "id": "9de09bd9-ec63-4d9b-8d92-d3ad8207316c",
              "name": "Cache invalidada",
              "originalRequest": {
                "url": {
                  "path": [
                    "auth",
                    "permissions",
                    "invalidate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"invalidated\": true\n  },\n  \"meta\": {},\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ec2f1bc3-f027-4e2f-9fec-0d8e04e6eb83",
              "name": "Token invalido o expirado",
              "originalRequest": {
                "url": {
                  "path": [
                    "auth",
                    "permissions",
                    "invalidate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    },\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "eff3d589-f7d1-4ca1-b4be-d04dcacb4790",
      "name": "Metadata",
      "description": {
        "content": "Estructura e introspección de modelos",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ce0b23b5-f972-401f-8d8e-2470a811c252",
          "name": "Listar modelos disponibles",
          "request": {
            "name": "Listar modelos disponibles",
            "description": {
              "content": "Retorna la lista de modelos habilitados para API con nombre, app, verbose_name y endpoint.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/metadata",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "metadata"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "4c3644c2-bec5-4c53-8dbb-a1e7b579ab91",
              "name": "Lista de modelos",
              "originalRequest": {
                "url": {
                  "path": [
                    "metadata"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"models\": [\n      {\n        \"model\": \"string\",\n        \"app\": \"string\",\n        \"verbose_name\": \"string\",\n        \"endpoint\": \"string\"\n      },\n      {\n        \"model\": \"string\",\n        \"app\": \"string\",\n        \"verbose_name\": \"string\",\n        \"endpoint\": \"string\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5139cd52-dcb3-4b83-a8ed-2750f69e4d9d",
          "name": "Estructura de un modelo",
          "request": {
            "name": "Estructura de un modelo",
            "description": {
              "content": "Retorna columnas, relaciones, admin config, capture fields y grid display.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/metadata/:modelo",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "metadata",
                ":modelo"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "moneda",
                  "key": "modelo",
                  "description": "(Required) Nombre del modelo en snake_case (ej: moneda, tipo_venta, comprobante)"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "7d227bc7-b597-41e5-b6e8-f836fb9a2efd",
              "name": "Metadata del modelo",
              "originalRequest": {
                "url": {
                  "path": [
                    "metadata",
                    ":modelo"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "moneda",
                      "key": "modelo",
                      "description": "(Required) Nombre del modelo en snake_case (ej: moneda, tipo_venta, comprobante)"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"model\": \"string\",\n    \"app\": \"string\",\n    \"table\": \"string\",\n    \"columns\": {},\n    \"relations\": {},\n    \"admin\": {},\n    \"capture\": {},\n    \"grid\": {}\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3d7415d1-a4da-41fa-8875-93c1ff1f1b4c",
              "name": "Modelo no encontrado o no habilitado",
              "originalRequest": {
                "url": {
                  "path": [
                    "metadata",
                    ":modelo"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "moneda",
                      "key": "modelo",
                      "description": "(Required) Nombre del modelo en snake_case (ej: moneda, tipo_venta, comprobante)"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    },\n    {\n      \"code\": \"string\",\n      \"message\": \"string\",\n      \"field\": \"string\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "ed89a2bc-3717-4c01-a7bc-fba0d28db00d",
      "name": "CRUD",
      "description": {
        "content": "Operaciones de lectura y escritura",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "f7b52ade-936a-4dc6-9941-c02a21eb6ba6",
          "name": "Listar registros",
          "request": {
            "name": "Listar registros",
            "description": {
              "content": "Lista paginada. Multi-tenant: si el modelo tiene campo empresa, filtra automaticamente por la empresa del token.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/:modelo?page=1&per_page=25&sort=string&order=asc&search=string&lean=false",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                ":modelo"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "page",
                  "value": "1"
                },
                {
                  "disabled": false,
                  "key": "per_page",
                  "value": "25"
                },
                {
                  "disabled": false,
                  "key": "sort",
                  "value": "string",
                  "description": "Campo para ordenar"
                },
                {
                  "disabled": false,
                  "key": "order",
                  "value": "asc"
                },
                {
                  "disabled": false,
                  "key": "search",
                  "value": "string",
                  "description": "Busqueda en campos de texto"
                },
                {
                  "disabled": false,
                  "key": "lean",
                  "value": "false",
                  "description": "true = sin resolver relaciones (_str)"
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "moneda",
                  "key": "modelo",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "f4782e23-59a0-4f63-9d42-4e82dcd9ec1e",
              "name": "Lista de registros con paginacion y relaciones resueltas",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "25"
                    },
                    {
                      "key": "sort",
                      "value": "string"
                    },
                    {
                      "key": "order",
                      "value": "asc"
                    },
                    {
                      "key": "search",
                      "value": "string"
                    },
                    {
                      "key": "lean",
                      "value": "false"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "moneda",
                      "key": "modelo",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"meta\": {\n    \"model\": \"string\",\n    \"total\": 5837,\n    \"page\": 5034,\n    \"per_page\": 5398,\n    \"pages\": 8120\n  },\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "317bd051-f977-4fa9-81f3-a3ff1de68df8",
              "name": "Token invalido, expirado o faltante",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "25"
                    },
                    {
                      "key": "sort",
                      "value": "string"
                    },
                    {
                      "key": "order",
                      "value": "asc"
                    },
                    {
                      "key": "search",
                      "value": "string"
                    },
                    {
                      "key": "lean",
                      "value": "false"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "moneda",
                      "key": "modelo",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"UNAUTHORIZED\",\n      \"message\": \"Se requiere header Authorization: Bearer <token>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "12dcd88c-81cf-445f-bea2-d0f574d07ce2",
          "name": "Crear registro",
          "request": {
            "name": "Crear registro",
            "description": {
              "content": "Crea un nuevo registro. ID auto-asignado. Multi-tenant: empresa se asigna automaticamente del token.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/:modelo",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                ":modelo"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "moneda",
                  "key": "modelo",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"nombre\": \"Real Brasileno\",\n  \"abreviatura\": \"BRL\",\n  \"codigo_sat\": \"BRL\",\n  \"decimales\": 2\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "4ca1060a-13e2-421b-9b95-ba574f83c946",
              "name": "Registro creado",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "moneda",
                      "key": "modelo",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nombre\": \"Real Brasileno\",\n  \"abreviatura\": \"BRL\",\n  \"codigo_sat\": \"BRL\",\n  \"decimales\": 2\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {},\n  \"meta\": {\n    \"model\": \"string\"\n  },\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d4b5881b-0023-4676-b102-115686b191da",
              "name": "Token invalido, expirado o faltante",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "moneda",
                      "key": "modelo",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nombre\": \"Real Brasileno\",\n  \"abreviatura\": \"BRL\",\n  \"codigo_sat\": \"BRL\",\n  \"decimales\": 2\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"UNAUTHORIZED\",\n      \"message\": \"Se requiere header Authorization: Bearer <token>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c78e4d91-7a25-4920-b220-a60895b1cb36",
              "name": "Error de validacion",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "moneda",
                      "key": "modelo",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nombre\": \"Real Brasileno\",\n  \"abreviatura\": \"BRL\",\n  \"codigo_sat\": \"BRL\",\n  \"decimales\": 2\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"UNIQUE\",\n      \"message\": \"Registro duplicado\",\n      \"field\": null\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6fa93caa-631e-43fe-ad34-cbbd221638c2",
          "name": "Obtener un registro",
          "request": {
            "name": "Obtener un registro",
            "description": {
              "content": "Multi-tenant: verifica que el registro pertenece a la empresa del token.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/:modelo/:id?lean=false",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                ":modelo",
                ":id"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "lean",
                  "value": "false"
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "modelo",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "48898454-1a10-4d99-a9cd-32fa1637237a",
              "name": "Registro encontrado",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "lean",
                      "value": "false"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {},\n  \"meta\": {\n    \"model\": \"string\"\n  },\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2b950566-76cf-4151-a8e6-df5d8c7add47",
              "name": "Token invalido, expirado o faltante",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "lean",
                      "value": "false"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"UNAUTHORIZED\",\n      \"message\": \"Se requiere header Authorization: Bearer <token>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a885f0c1-5aa6-45f2-b84a-29541fe255b8",
              "name": "Registro no encontrado (o no pertenece a la empresa del token)",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "lean",
                      "value": "false"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"NOT_FOUND\",\n      \"message\": \"Record not found with id: 99\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c5c903d9-11dc-4d51-82fe-969be0ed53c4",
          "name": "Actualizar registro (parcial)",
          "request": {
            "name": "Actualizar registro (parcial)",
            "description": {
              "content": "Solo los campos enviados se actualizan.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/:modelo/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                ":modelo",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "modelo",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PUT",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"nombre\": \"Nombre actualizado\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "92c24429-846c-4dfd-8272-c4bdbdb16053",
              "name": "Registro actualizado",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PUT",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nombre\": \"Nombre actualizado\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {},\n  \"meta\": {\n    \"model\": \"string\"\n  },\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bbd010cd-0177-49a5-8b05-73939e6d28e3",
              "name": "Token invalido, expirado o faltante",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PUT",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nombre\": \"Nombre actualizado\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"UNAUTHORIZED\",\n      \"message\": \"Se requiere header Authorization: Bearer <token>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "65bb2c38-5afa-4b8f-ae88-c0c6d8126be9",
              "name": "Registro no encontrado (o no pertenece a la empresa del token)",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PUT",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nombre\": \"Nombre actualizado\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"NOT_FOUND\",\n      \"message\": \"Record not found with id: 99\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5aad17d6-63eb-4e8c-9283-643eb13af95d",
              "name": "Error de validacion",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PUT",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nombre\": \"Nombre actualizado\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"UNIQUE\",\n      \"message\": \"Registro duplicado\",\n      \"field\": null\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "fd3a5139-4611-4f77-bba4-7d0288a2aea6",
          "name": "Eliminar registro",
          "request": {
            "name": "Eliminar registro",
            "description": {
              "content": "Verifica dependencias antes de eliminar. Si hay registros que referencian este, retorna 409 con el detalle.",
              "type": "text/plain"
            },
            "url": {
              "raw": "{{baseUrl}}/:modelo/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                ":modelo",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "modelo",
                  "description": "(Required) "
                },
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{bearerToken}}"
                }
              ]
            }
          },
          "response": [
            {
              "id": "fbf7e01a-917d-42ab-9126-af7252693321",
              "name": "Registro eliminado",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"deleted\": true,\n    \"id\": \"10\"\n  },\n  \"meta\": {\n    \"model\": \"Moneda\"\n  },\n  \"errors\": null\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d27fc81a-29a8-4a50-bf98-fa7ba6ff8a14",
              "name": "Token invalido, expirado o faltante",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"UNAUTHORIZED\",\n      \"message\": \"Se requiere header Authorization: Bearer <token>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "88a6a9b2-3e60-4df8-8eb0-0c2f4b49ea8f",
              "name": "Registro no encontrado (o no pertenece a la empresa del token)",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {},\n  \"errors\": [\n    {\n      \"code\": \"NOT_FOUND\",\n      \"message\": \"Record not found with id: 99\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bedf8d9c-ecea-47f9-b138-573a14bcf846",
              "name": "No se puede eliminar — tiene registros dependientes",
              "originalRequest": {
                "url": {
                  "path": [
                    ":modelo",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "modelo",
                      "description": "(Required) "
                    },
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) "
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": null,\n  \"meta\": {\n    \"model\": \"Moneda\"\n  },\n  \"errors\": [\n    {\n      \"code\": \"HAS_DEPENDENTS\",\n      \"message\": \"No se puede eliminar: tiene 108672 registros dependientes\",\n      \"dependents\": {\n        \"Venta\": 9448,\n        \"Compra\": 917,\n        \"Poliza\": 265\n      }\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "key": "baseUrl",
      "value": "http://localhost/api/v1",
      "type": "string"
    },
    {
      "key": "token",
      "value": "",
      "type": "string"
    },
    {
      "key": "usuario",
      "value": "cb",
      "type": "string"
    },
    {
      "key": "password",
      "value": "1234",
      "type": "string"
    }
  ],
  "info": {
    "_postman_id": "d6361ab1-5c60-4012-86f6-a048b9adc2f8",
    "name": "ClickBalance REST API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "type": "text/markdown",
      "content": "# ClickBalance REST API\n\nColección generada automáticamente desde `openapi.yaml`.\n\n## Cómo usarla\n\n1. Importa esta colección y el environment **ClickBalance Local**.\n2. Selecciona el environment en la esquina superior derecha de Postman.\n3. La colección trae defaults de desarrollo. Sobreescríbelos en el environment para apuntar a otro entorno.\n4. Ejecuta el request **Obtener Bearer token** (folder Auth) — manda usuario y password como JSON. El token se captura automáticamente del envelope `data.token` y se guarda en `{{token}}`.\n5. Cualquier otro request usa `Bearer {{token}}` heredado de la colección.\n\n## Variables\n\n- `baseUrl` — URL base del API. Default `http://localhost/api/v1` (Docker local).\n- `usuario` / `password` — credenciales del login. Default `cb` / `1234` (sólo válidas en desarrollo).\n- `token` — Bearer token, lo escribe el script de test del login.\n\n## Multi-tenant\n\nEl token lleva la empresa del usuario; todos los requests filtran automáticamente. No hace falta pasar `empresa_id`."
    }
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  }
}