{
    "info": {
        "_postman_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "name": "HostControl API",
        "description": "Coleção da HostControl API v1.\n\nAutenticação:\n- Admin: header X-Admin-Token (variável {{admin_token}})\n- Subscription (app cliente): header X-License-Key (variável {{license_key}})\n\nComo usar:\n1. Importe esta coleção no Postman\n2. Ajuste as variáveis da coleção (base_url, admin_token, license_key)\n3. Fluxo: Clients > Create → Applications > Create → Subscriptions > Admin - Create (a resposta contém a license_key) → copie para a variável {{license_key}}",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "Clients (Admin)",
            "description": "Todos os endpoints exigem X-Admin-Token",
            "item": [
                {
                    "name": "List",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/clients",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "clients"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Create",
                    "request": {
                        "method": "POST",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"João da Silva\",\n    \"email\": \"joao@exemplo.com\",\n    \"phone\": \"(11) 99999-9999\",\n    \"document\": \"123.456.789-00\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/clients",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "clients"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Show",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/clients/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "clients", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Update",
                    "request": {
                        "method": "PUT",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"João Atualizado\",\n    \"email\": \"joao@novo.com\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/clients/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "clients", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Delete",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/clients/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "clients", "1"]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Applications (Admin)",
            "description": "Todos os endpoints exigem X-Admin-Token",
            "item": [
                {
                    "name": "List",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/applications",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "applications"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "List by Client",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/applications?client_id=1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "applications"],
                            "query": [
                                { "key": "client_id", "value": "1" }
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Create",
                    "request": {
                        "method": "POST",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"client_id\": 1,\n    \"name\": \"Sistema de Pedidos\",\n    \"domain\": \"pedidos.cliente.com\",\n    \"repository\": \"https://github.com/cliente/pedidos\",\n    \"server\": \"srv-01\",\n    \"status\": \"active\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/applications",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "applications"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Show",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/applications/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "applications", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Update",
                    "request": {
                        "method": "PUT",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"name\": \"Nome Atualizado\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/applications/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "applications", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Delete",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/applications/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "applications", "1"]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Subscriptions (Admin + Client)",
            "description": "Admin: CRUD completo (listar todas em /admin/subscriptions). Subscription autenticada via X-License-Key: GET /subscriptions retorna a própria assinatura (objeto único).",
            "item": [
                {
                    "name": "Admin - Create",
                    "request": {
                        "method": "POST",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"client_id\": 1,\n    \"application_id\": 1,\n    \"monthly_price\": 150.00,\n    \"paid_until\": \"2026-09-24\",\n    \"next_due\": \"2026-10-24\",\n    \"status\": \"active\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/subscriptions",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "subscriptions"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Update",
                    "request": {
                        "method": "PUT",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"monthly_price\": 200.00,\n    \"status\": \"suspended\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/subscriptions/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "subscriptions", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Delete",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/subscriptions/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "subscriptions", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - List All",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/admin/subscriptions",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "admin", "subscriptions"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Show Any",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/admin/subscriptions/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "admin", "subscriptions", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Client - Current Subscription",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-License-Key", "value": "{{license_key}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/subscriptions",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "subscriptions"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Client - Show Current by ID",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-License-Key", "value": "{{license_key}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/subscriptions/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "subscriptions", "1"]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Payments (Admin + Client)",
            "description": "Admin: todos os endpoints. Client: GET /payments/me (listar próprios).",
            "item": [
                {
                    "name": "Admin - List All",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/payments",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "payments"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - List by Subscription",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/payments?subscription_id=1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "payments"],
                            "query": [
                                { "key": "subscription_id", "value": "1" }
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Create",
                    "request": {
                        "method": "POST",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"subscription_id\": 1,\n    \"value\": 150.00,\n    \"status\": \"paid\",\n    \"paid_at\": \"2026-09-24 10:00:00\",\n    \"gateway_id\": \"gw_123\",\n    \"gateway_data\": { \"provider\": \"test\" }\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/payments",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "payments"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Show",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/payments/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "payments", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Update",
                    "request": {
                        "method": "PUT",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"status\": \"refunded\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/payments/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "payments", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Delete",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/payments/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "payments", "1"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Client - List Own (/me)",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-License-Key", "value": "{{license_key}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/payments/me",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "payments", "me"]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Heartbeats (Admin + Client)",
            "description": "Client: POST (registrar ping) e GET /heartbeats/me (listar próprios). Admin: GET (listar/ver todos).",
            "item": [
                {
                    "name": "Client - Register Ping",
                    "request": {
                        "method": "POST",
                        "header": [
                            { "key": "X-License-Key", "value": "{{license_key}}" },
                            { "key": "Accept", "value": "application/json" },
                            { "key": "Content-Type", "value": "application/json" }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"ip_address\": \"192.168.0.10\"\n}"
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/heartbeats",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "heartbeats"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Client - List Own (/me)",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-License-Key", "value": "{{license_key}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/heartbeats/me",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "heartbeats", "me"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - List All",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/heartbeats",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "heartbeats"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Admin - Show",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "{{admin_token}}" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/heartbeats/1",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "heartbeats", "1"]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Auth Tests (Negative)",
            "description": "Testes de falha de autenticação",
            "item": [
                {
                    "name": "No Token (expect 401)",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/clients",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "clients"]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Invalid Admin Token (expect 401)",
                    "request": {
                        "method": "GET",
                        "header": [
                            { "key": "X-Admin-Token", "value": "invalido" },
                            { "key": "Accept", "value": "application/json" }
                        ],
                        "url": {
                            "raw": "{{base_url}}/api/v1/clients",
                            "host": ["{{base_url}}"],
                            "path": ["api", "v1", "clients"]
                        }
                    },
                    "response": []
                }
            ]
        }
    ],
    "variable": [
        { "key": "base_url", "value": "http://localhost:8000" },
        { "key": "admin_token", "value": "hc_admin_secret_token_2026" },
        { "key": "license_key", "value": "" }
    ]
}
