{"openapi":"3.1.0","info":{"title":"PrismaData — Conta","version":"1.0.0","termsOfService":"https://prismadata.io/terms","contact":{"name":"PrismaData Support Team","url":"https://prismadata.io/contact","email":"suporte.api@prismadata.io"},"license":{"name":"Proprietary","url":"https://api.prismadata.io/license"},"description":"Consultas da sua própria conta: saldo e extrato dos créditos pré-pagos, histórico de chamadas e consumo do mês. O cliente é sempre o dono da API key; nenhuma rota recebe o cliente como parâmetro.\n\n## Rotas gratuitas\n\nAs rotas de conta **não são cobradas**, **não consomem créditos** e **não contam na cota** do plano. Elas têm um limite de requisições próprio, por cliente:\n\n| Rota | Limite |\n|---|---|\n| `GET /account/credits` | 60 por minuto |\n| `GET /account/credits/debits` | 30 por minuto |\n| `GET /account/activities` | 30 por minuto |\n| `GET /account/consumption` | 20 por minuto |\n\nAcima do limite, a resposta é `429` com `{\"detail\": \"rate limit administrativo excedido\"}` e os headers `X-RateLimit-Limit`, `X-RateLimit-Remaining` e `X-RateLimit-Reset`.\n\n## Créditos pré-pagos\n\nNo plano pré-pago, você compra **pacotes de créditos** com validade. Cada pacote traz o preço de cada produto, que fica fixo durante a vigência do pacote.\n\n**Como o saldo é usado:**\n\n- **Só pacotes vigentes** pagam chamadas: depois do início (`valid_from`) e antes do fim (`valid_until`) da validade. O campo `saldo_valido` soma apenas esses pacotes.\n- **O pacote que vence antes é usado primeiro.**\n- **Cada item é cobrado inteiro em um único pacote.** Se o saldo de um pacote não paga um item inteiro, a sobra fica nele e o item é cobrado do pacote seguinte. Por isso, `saldo_valido` positivo não garante que todo produto esteja liberado: confira `permitido` de cada produto.\n- **Lotes** podem ser divididos entre pacotes, item a item.\n- **Pacotes vencidos** não pagam chamadas, mesmo com saldo.\n\n**O que é cobrado:**\n\n- Chamadas com resposta `200`.\n- Consultas de um CNPJ (`/cnpj/{cnpj}` e `/cnpj/raw/{cnpj}`) que respondem `404` (CNPJ inexistente): a consulta foi feita, como no plano pós-pago. Nas demais rotas, `404` não é cobrado.\n- Nas rotas que combinam vários produtos, cada produto usado na chamada é cobrado; a rota que os combina não é cobrada à parte.\n- Chamadas de sandbox e rotas de conta, autenticação e metadados não são cobradas.\n\n**Quando a chamada é recusada** (nada é cobrado):\n\n| Status | Corpo | Motivo |\n|---|---|---|\n| `402` | `{\"detail\": \"saldo pré-pago insuficiente\"}` | O saldo dos pacotes vigentes não paga o item. |\n| `402` | `{\"detail\": \"saldo pré-pago insuficiente para o lote\", \"capacidade\": 41}` | Lote maior do que o saldo paga. `capacidade` é quantos itens o saldo paga agora. |\n| `403` | `{\"detail\": \"produto sem configuração de cobrança no pré-pago\", \"produto\": \"cnpj\"}` | Nenhum pacote vigente tem preço para o produto. |\n\nEm lotes, a verificação usa o **tamanho da entrada**: um lote com mais itens do que o saldo paga é recusado inteiro, antes de ser processado. Divida o lote ou compre mais créditos.\n\n## Consultando a conta\n\n- `GET /account/credits`: saldo válido, produtos liberados e todos os pacotes, com saldo e preços.\n- `GET /account/credits/debits`: extrato de débitos, filtrável por pacote e por data.\n- `GET /account/activities`: histórico de chamadas feitas com suas API keys.\n- `GET /account/consumption`: quantidade e custo por produto no mês.\n\nOs filtros de data usam UTC. Sem filtro, as consultas de débitos e de atividades trazem as **últimas 24 horas**; o intervalo máximo é de **31 dias**.\n"},"servers":[{"url":"https://api.prismadata.io/v1","description":"Ambiente de Produção"}],"security":[{"X-Apikey":[]},{"api_key":[]},{"BearerAuth":[]}],"tags":[{"name":"Conta","description":"Consultas da sua própria conta: saldo e extrato dos créditos pré-pagos, histórico de chamadas e consumo do mês. O cliente é sempre o dono da API key; nenhuma rota recebe o cliente como parâmetro.\n\n## Rotas gratuitas\n\nAs rotas de conta **não são cobradas**, **não consomem créditos** e **não contam na cota** do plano. Elas têm um limite de requisições próprio, por cliente:\n\n| Rota | Limite |\n|---|---|\n| `GET /account/credits` | 60 por minuto |\n| `GET /account/credits/debits` | 30 por minuto |\n| `GET /account/activities` | 30 por minuto |\n| `GET /account/consumption` | 20 por minuto |\n\nAcima do limite, a resposta é `429` com `{\"detail\": \"rate limit administrativo excedido\"}` e os headers `X-RateLimit-Limit`, `X-RateLimit-Remaining` e `X-RateLimit-Reset`.\n\n## Créditos pré-pagos\n\nNo plano pré-pago, você compra **pacotes de créditos** com validade. Cada pacote traz o preço de cada produto, que fica fixo durante a vigência do pacote.\n\n**Como o saldo é usado:**\n\n- **Só pacotes vigentes** pagam chamadas: depois do início (`valid_from`) e antes do fim (`valid_until`) da validade. O campo `saldo_valido` soma apenas esses pacotes.\n- **O pacote que vence antes é usado primeiro.**\n- **Cada item é cobrado inteiro em um único pacote.** Se o saldo de um pacote não paga um item inteiro, a sobra fica nele e o item é cobrado do pacote seguinte. Por isso, `saldo_valido` positivo não garante que todo produto esteja liberado: confira `permitido` de cada produto.\n- **Lotes** podem ser divididos entre pacotes, item a item.\n- **Pacotes vencidos** não pagam chamadas, mesmo com saldo.\n\n**O que é cobrado:**\n\n- Chamadas com resposta `200`.\n- Consultas de um CNPJ (`/cnpj/{cnpj}` e `/cnpj/raw/{cnpj}`) que respondem `404` (CNPJ inexistente): a consulta foi feita, como no plano pós-pago. Nas demais rotas, `404` não é cobrado.\n- Nas rotas que combinam vários produtos, cada produto usado na chamada é cobrado; a rota que os combina não é cobrada à parte.\n- Chamadas de sandbox e rotas de conta, autenticação e metadados não são cobradas.\n\n**Quando a chamada é recusada** (nada é cobrado):\n\n| Status | Corpo | Motivo |\n|---|---|---|\n| `402` | `{\"detail\": \"saldo pré-pago insuficiente\"}` | O saldo dos pacotes vigentes não paga o item. |\n| `402` | `{\"detail\": \"saldo pré-pago insuficiente para o lote\", \"capacidade\": 41}` | Lote maior do que o saldo paga. `capacidade` é quantos itens o saldo paga agora. |\n| `403` | `{\"detail\": \"produto sem configuração de cobrança no pré-pago\", \"produto\": \"cnpj\"}` | Nenhum pacote vigente tem preço para o produto. |\n\nEm lotes, a verificação usa o **tamanho da entrada**: um lote com mais itens do que o saldo paga é recusado inteiro, antes de ser processado. Divida o lote ou compre mais créditos.\n\n## Consultando a conta\n\n- `GET /account/credits`: saldo válido, produtos liberados e todos os pacotes, com saldo e preços.\n- `GET /account/credits/debits`: extrato de débitos, filtrável por pacote e por data.\n- `GET /account/activities`: histórico de chamadas feitas com suas API keys.\n- `GET /account/consumption`: quantidade e custo por produto no mês.\n\nOs filtros de data usam UTC. Sem filtro, as consultas de débitos e de atividades trazem as **últimas 24 horas**; o intervalo máximo é de **31 dias**.\n"}],"paths":{"/account/credits":{"get":{"tags":["Conta"],"summary":"Saldo, produtos liberados e pacotes de créditos pré-pagos","description":"Saldo válido agora, produtos liberados (`permitido`), produtos sem preço nos pacotes vigentes (`sem_configuracao`) e todos os pacotes, com saldo e preço por produto. Os pacotes vêm ordenados pelo fim da validade: o primeiro da lista é o próximo a ser usado.","operationId":"consultar_creditos","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditosResponse"},"example":{"tenant_id":42,"saldo_valido":"15.26","permitido":{"cnpj":true,"favela":true,"geocoder":true},"sem_configuracao":[],"pacotes":[{"id":7,"origem":"pago","valor_total":"1200.00","saldo":"8.30","valid_from":"2026-10-29T23:54:00Z","valid_until":"2027-01-27T23:54:00Z","descricao":"Pacote 1.200","referencia":"PED-2026-0042","created_at":"2026-10-29T23:54:00Z","precos":[{"backend":"cnpj","preco_unitario":"0.100"},{"backend":"favela","preco_unitario":"0.200"}]}]}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"API key ausente ou inválida (header `X-Apikey` ou parâmetro `api_key`).","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"429":{"$ref":"#/components/responses/RateLimitExceeded"}},"x-codeSamples":[{"lang":"curl","source":"curl \"https://api.prismadata.io/v1/account/credits\" \\\n  -H \"X-Apikey: ak_xxxxxxxxxxxxxxxx\""},{"lang":"Python","source":"import httpx\n\nresp = httpx.get(\n    \"https://api.prismadata.io/v1/account/credits\",\n    headers={\"X-Apikey\": \"ak_xxxxxxxxxxxxxxxx\"},\n)\ndados = resp.json()"}]}},"/account/credits/debits":{"get":{"tags":["Conta"],"summary":"Extrato de débitos dos créditos pré-pagos","description":"Débitos dos créditos pré-pagos, mais recentes primeiro. Cada chamada cobrada gera um débito por produto e por pacote usado. Sem filtro de data, traz as últimas 24 horas (máximo de 31 dias).","operationId":"listar_debitos","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebitosResponse"},"example":{"items":[{"id":1532,"package_id":7,"request_id":"01d6f6c8-b963-46f1-afd4-66c31907b71d","backend":"geocoder","qtde":1,"valor":"0.100","created_at":"2026-10-30T00:34:58Z"}],"total":1,"page":1,"page_size":50,"pages":1}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"API key ausente ou inválida (header `X-Apikey` ou parâmetro `api_key`).","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"429":{"$ref":"#/components/responses/RateLimitExceeded"}},"parameters":[{"name":"package_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Package Id"},"description":"Filtra os débitos de um pacote."},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date From"},"description":"Início do intervalo (ISO 8601, UTC). Padrão: 24 horas antes de `date_to`."},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date To"},"description":"Fim do intervalo (ISO 8601, UTC). Padrão: agora. O intervalo máximo é de 31 dias."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"},"description":"Página (começa em 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"},"description":"Itens por página (1 a 200)."}],"x-codeSamples":[{"lang":"curl","source":"curl \"https://api.prismadata.io/v1/account/credits/debits\" \\\n  -H \"X-Apikey: ak_xxxxxxxxxxxxxxxx\""},{"lang":"Python","source":"import httpx\n\nresp = httpx.get(\n    \"https://api.prismadata.io/v1/account/credits/debits\",\n    headers={\"X-Apikey\": \"ak_xxxxxxxxxxxxxxxx\"},\n)\ndados = resp.json()"}]}},"/account/activities":{"get":{"tags":["Conta"],"summary":"Histórico de chamadas feitas com as API keys da conta","description":"Chamadas feitas com as API keys da conta, mais recentes primeiro. Sem filtro de data, traz as últimas 24 horas (máximo de 31 dias).","operationId":"listar_atividades","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AtividadesResponse"},"example":{"items":[{"id":"33d154ee23fe14b67dac8e7c9c89e5a1f09f143e","timestamp":"2026-10-30T02:33:14.620321Z","username":"usuario_exemplo","ip_address":"201.17.211.71","endpoint":"/v1/cnpj/00000000000191","http_status":200,"response_bytes":1552,"api_key":"ak_x****xxxx","sandbox":false,"backends":"cnpj","batch_count":1,"duration_ms":17.2,"custo":"0.1000"}],"total":1,"page":1,"page_size":50,"pages":1}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"API key ausente ou inválida (header `X-Apikey` ou parâmetro `api_key`).","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"429":{"$ref":"#/components/responses/RateLimitExceeded"}},"parameters":[{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Endpoint"},"description":"Filtra as chamadas cuja rota contém o texto."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"description":"Filtra pelo status HTTP da resposta."},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date From"},"description":"Início do intervalo (ISO 8601, UTC). Padrão: 24 horas antes de `date_to`."},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date To"},"description":"Fim do intervalo (ISO 8601, UTC). Padrão: agora. O intervalo máximo é de 31 dias."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"},"description":"Página (começa em 1)."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"},"description":"Itens por página (1 a 200)."}],"x-codeSamples":[{"lang":"curl","source":"curl \"https://api.prismadata.io/v1/account/activities\" \\\n  -H \"X-Apikey: ak_xxxxxxxxxxxxxxxx\""},{"lang":"Python","source":"import httpx\n\nresp = httpx.get(\n    \"https://api.prismadata.io/v1/account/activities\",\n    headers={\"X-Apikey\": \"ak_xxxxxxxxxxxxxxxx\"},\n)\ndados = resp.json()"}]}},"/account/consumption":{"get":{"tags":["Conta"],"summary":"Quantidade e custo por produto no mês","description":"Quantidade de itens cobráveis e custo por produto no mês informado, pela tabela de preços do contrato.","operationId":"consultar_consumo","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumoResponse"},"example":{"tenant_id":42,"periodo":"2026-10","backends":[{"backend":"cnpj","qtde_requisicoes":120,"custo_total":"12.00"},{"backend":"favela","qtde_requisicoes":30,"custo_total":"6.00"}],"total_requisicoes":150,"custo_total":"18.00"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}},"headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"description":"API key ausente ou inválida (header `X-Apikey` ou parâmetro `api_key`).","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"429":{"$ref":"#/components/responses/RateLimitExceeded"}},"parameters":[{"name":"periodo","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$","title":"Periodo"},"description":"Mês no formato AAAA-MM."}],"x-codeSamples":[{"lang":"curl","source":"curl \"https://api.prismadata.io/v1/account/consumption?periodo=valor\" \\\n  -H \"X-Apikey: ak_xxxxxxxxxxxxxxxx\""},{"lang":"Python","source":"import httpx\n\nresp = httpx.get(\n    \"https://api.prismadata.io/v1/account/consumption\",\n    params={\"periodo\": 'valor'},\n    headers={\"X-Apikey\": \"ak_xxxxxxxxxxxxxxxx\"},\n)\ndados = resp.json()"}]}}},"components":{"securitySchemes":{"X-Apikey":{"type":"apiKey","in":"header","name":"X-Apikey","description":"Token de acesso via header."},"api_key":{"type":"apiKey","in":"query","name":"api_key","description":"Token de acesso via query parameter."},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Token JWT obtido via POST /auth/token"}},"headers":{"X-RateLimit-Limit":{"description":"Número máximo de requisições permitidas por minuto para o usuário.","schema":{"type":"integer","example":60}},"X-RateLimit-Remaining":{"description":"Número de requisições restantes na janela de rate limit atual.","schema":{"type":"integer","example":57}},"X-RateLimit-Reset":{"description":"Unix timestamp (segundos) indicando quando a janela de rate limit será reiniciada.","schema":{"type":"integer","example":1738281600}}},"responses":{"RateLimitExceeded":{"description":"Too Many Requests - Rate limit ou quota excedidos.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"text/plain":{"schema":{"type":"string"},"examples":{"rate_limit":{"summary":"Rate limit excedido","value":"rate limit exceeded"},"quota":{"summary":"Quota excedida","value":"limit exceeded: 1000 requests used, limit is 1000"}}}}}},"schemas":{"Atividade":{"properties":{"id":{"type":"string","title":"Id","description":"Identificador da atividade."},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Momento da chamada (UTC)."},"username":{"type":"string","title":"Username","description":"Usuário da API key."},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address","description":"IP de origem."},"endpoint":{"type":"string","title":"Endpoint","description":"Rota chamada, com a query string."},"http_status":{"type":"integer","title":"Http Status","description":"Status HTTP devolvido."},"response_bytes":{"type":"integer","title":"Response Bytes","description":"Tamanho da resposta, em bytes.","default":0},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"API key usada (mascarada)."},"sandbox":{"type":"boolean","title":"Sandbox","description":"`true` se foi chamada de sandbox.","default":false},"backends":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backends","description":"Produtos cobrados na chamada (lista separada por vírgula)."},"batch_count":{"type":"integer","title":"Batch Count","description":"Itens cobráveis (lotes: itens do lote).","default":1},"duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Ms","description":"Duração no gateway (ms)."},"custo":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Custo","description":"Custo pela tabela pós-paga (`null` se não calculado)."}},"type":"object","required":["id","timestamp","username","endpoint","http_status"],"title":"Atividade","description":"Uma chamada feita com as API keys do cliente."},"AtividadesResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Atividade"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de atividades no filtro."},"page":{"type":"integer","title":"Page","description":"Página atual."},"page_size":{"type":"integer","title":"Page Size","description":"Itens por página."},"pages":{"type":"integer","title":"Pages","description":"Total de páginas."}},"type":"object","required":["items","total","page","page_size","pages"],"title":"AtividadesResponse","description":"Página de atividades, mais recentes primeiro."},"ConsumoProduto":{"properties":{"backend":{"type":"string","title":"Backend","description":"Produto (SKU)."},"qtde_requisicoes":{"type":"integer","title":"Qtde Requisicoes","description":"Itens cobráveis no mês."},"custo_total":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Custo Total","description":"Custo no mês, em reais."}},"type":"object","required":["backend","qtde_requisicoes","custo_total"],"title":"ConsumoProduto","description":"Consumo de um produto no mês."},"ConsumoResponse":{"properties":{"tenant_id":{"type":"integer","title":"Tenant Id","description":"Cliente dono da API key."},"periodo":{"type":"string","title":"Periodo","description":"Mês consultado (AAAA-MM)."},"backends":{"items":{"$ref":"#/components/schemas/ConsumoProduto"},"type":"array","title":"Backends","description":"Consumo por produto."},"total_requisicoes":{"type":"integer","title":"Total Requisicoes","description":"Itens cobráveis no mês."},"custo_total":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Custo Total","description":"Custo total no mês, em reais."}},"type":"object","required":["tenant_id","periodo","backends","total_requisicoes","custo_total"],"title":"ConsumoResponse","description":"Consumo e custo do mês por produto."},"CreditosResponse":{"properties":{"tenant_id":{"type":"integer","title":"Tenant Id","description":"Cliente dono da API key."},"saldo_valido":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Saldo Valido","description":"Soma do saldo dos pacotes vigentes agora, em reais (pacotes vencidos ou que ainda não começaram ficam de fora)."},"permitido":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Permitido","description":"Por produto: `true` se o saldo paga ao menos 1 item agora."},"sem_configuracao":{"items":{"type":"string"},"type":"array","title":"Sem Configuracao","description":"Produtos sem preço nos pacotes vigentes (chamadas a eles respondem 403)."},"pacotes":{"items":{"$ref":"#/components/schemas/PacoteCreditos"},"type":"array","title":"Pacotes","description":"Todos os pacotes (vigentes, futuros e vencidos), o que vence antes primeiro."}},"type":"object","required":["tenant_id","saldo_valido","permitido"],"title":"CreditosResponse","description":"Saldo e situação dos créditos pré-pagos."},"DebitoCreditos":{"properties":{"id":{"type":"integer","title":"Id","description":"Identificador do débito."},"package_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Package Id","description":"Pacote debitado (`null`: consumo sem saldo)."},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id","description":"Identificador da requisição que gerou o débito."},"backend":{"type":"string","title":"Backend","description":"Produto (SKU) cobrado."},"qtde":{"type":"integer","title":"Qtde","description":"Itens cobrados."},"valor":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Valor","description":"Valor debitado, em reais."},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Momento (UTC)."}},"type":"object","required":["id","backend","qtde","valor"],"title":"DebitoCreditos","description":"Débito de consumo em um pacote."},"DebitosResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DebitoCreditos"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de débitos no filtro."},"page":{"type":"integer","title":"Page","description":"Página atual."},"page_size":{"type":"integer","title":"Page Size","description":"Itens por página."},"pages":{"type":"integer","title":"Pages","description":"Total de páginas."}},"type":"object","required":["items","total","page","page_size","pages"],"title":"DebitosResponse","description":"Página de débitos, mais recentes primeiro."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PacoteCreditos":{"properties":{"id":{"type":"integer","title":"Id","description":"Identificador do pacote."},"origem":{"type":"string","title":"Origem","description":"`pago` (compra) ou `cortesia`."},"valor_total":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Valor Total","description":"Valor do pacote, em reais."},"saldo":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Saldo","description":"Saldo restante, em reais (2 casas, truncado)."},"valid_from":{"type":"string","format":"date-time","title":"Valid From","description":"Início da validade (UTC)."},"valid_until":{"type":"string","format":"date-time","title":"Valid Until","description":"Fim da validade (UTC)."},"descricao":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descricao","description":"Descrição do pacote."},"referencia":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referencia","description":"Referência comercial (ex.: pedido ou nota fiscal)."},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Criação (UTC)."},"precos":{"items":{"$ref":"#/components/schemas/PrecoPacote"},"type":"array","title":"Precos","description":"Preço de cada produto no pacote."}},"type":"object","required":["id","origem","valor_total","saldo","valid_from","valid_until"],"title":"PacoteCreditos","description":"Pacote de créditos pré-pagos do cliente."},"PrecoPacote":{"properties":{"backend":{"type":"string","title":"Backend","description":"Produto (SKU) cobrado."},"preco_unitario":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Preco Unitario","description":"Preço por item, em reais."}},"type":"object","required":["backend","preco_unitario"],"title":"PrecoPacote","description":"Preco fixo de um produto dentro do pacote."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}
