API: saldo, licenças, saques e faturas
LanaChat é pago a partir de um saldo pré-pago em dólares americanos: licenças (uma por conta do Telegram, 30 dias) e uma comissão sobre vendas líquidas são descontadas dele. Você o recarrega com depósitos em criptomoedas. Ganhos de afiliados podem ser sacados. Todo endpoint de cobrança precisa de um token de owner: nos exemplos, $LANACHAT_TOKEN contém um.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /billing/balance | O saldo, vendas líquidas do mês e nível de comissão | owner | Planned |
| GET | /billing/ledger | Todos os movimentos: depósitos, licenças, comissão, reembolsos | owner | Planned |
| GET | /billing/ledger.csv | O mesmo extrato em CSV (from=, to=) | owner | Planned |
| GET | /billing/deposit-addresses | Um endereço de depósito por blockchain (com memo na Solana) | owner | Planned |
| GET | /billing/deposits | Depósitos e suas confirmações | owner | Planned |
| GET | /billing/licences | Licenças em estoque e atribuídas, com dias restantes | owner | Planned |
| POST | /billing/licences/buy | Comprar licenças: única ou pacote de 10, 25 ou 50 | owner | Planned |
| POST | /billing/licences/assign | Atribuir uma licença do estoque a uma conta | owner | Planned |
| POST | /billing/licences/unassign | Retirar para o estoque com seus dias restantes | owner | Planned |
| PATCH | /billing/licences/auto-renew | Ativar ou desativar renovação automática para uma conta | owner | Planned |
| GET | /billing/withdrawals | Saques de afiliados e seus status | owner | Planned |
| POST | /billing/withdrawals | Solicitar saque de ganhos de afiliado (a partir de $500) | owner | Planned |
| GET | /billing/invoices | Extratos mensais (year=) | owner | Planned |
| GET | /billing/invoices/{id}.pdf | Um extrato em PDF | owner | Planned |
| PUT | /billing/details | Nome da empresa, endereço e número de VAT nos extratos | owner | Planned |
Preços em uma tabela #
| What | Price |
|---|---|
| Uma licença (uma conta Telegram, 30 dias) | $19 |
| Pacote de 10 licenças | $170 |
| Pacote de 25 licenças | $375 |
| Pacote de 50 licenças | $650 |
| Comissão até $30k de vendas líquidas no mês | 12% das vendas AI, 4% das vendas manuais |
| Comissão de $30k a $100k | 10% e 3% |
| Comissão acima de $100k | 8% e 2% |
O contador é o total de vendas líquidas de todo o workspace no mês calendário; ele zera no dia 1º. Telegram Stars contam como $0.013 cada nas vendas líquidas.
The balance object #
{
"balance_cents": 48210,
"month": "2026-10",
"net_sales_cents": 1870400,
"tier": { "up_to_cents": 3000000, "ai_rate_bp": 1200, "manual_rate_bp": 300 },
"licences": { "in_stock": 4, "assigned": 11, "expiring_7d": 2 },
"low_balance": false
}
| Field | Type | Description |
|---|---|---|
balance_cents | integer | Saldo pré-pago, em centavos de dólar |
month | string | Mês calendário contado, YYYY-MM |
net_sales_cents | integer | Vendas líquidas do workspace neste mês |
tier | object | Nível atual: seu teto up_to_cents, taxa AI e taxa manual em pontos base |
licences | object | Licenças in_stock, assigned e as atribuídas que vencem em até 7 dias (expiring_7d) |
low_balance | boolean | true quando o saldo não cobre os próximos 7 dias de licenças |
As taxas estão em pontos base: 1200 é 12%.
The ledger entry object #
Cada linha de Billing › Activity no Console.
{
"id": "led_90211",
"at": "2026-10-06T14:40:00Z",
"kind": "licences",
"label": "Licences · pack of 10",
"amount_cents": -17000,
"balance_after_cents": 31210
}
| Field | Type | Description |
|---|---|---|
id | string | A linha |
at | string | ISO 8601, UTC |
kind | string | deposit, licences, commission, refund, affiliate ou other |
label | string | Texto da linha, como no Console |
amount_cents | integer | Positivo quando entra dinheiro, negativo quando sai |
balance_after_cents | integer | Saldo após esta linha |
Uma linha commission pertence a uma venda: o Console mostra o fã, o nível, quem enviou a oferta (AI ou manual), como o líquido foi contado ("12,500 ★ × $0.013") e a taxa.
The deposit object #
{
"id": "dep_4",
"at": "2026-10-06T13:52:00Z",
"chain": "usdt-tron",
"sent_cents": 100000,
"fee_cents": 1000,
"credited_cents": 99000,
"status": "pending",
"confirmations": "12/19"
}
| Field | Type | Description |
|---|---|---|
id | string | O depósito |
at | string | Quando foi visto, ISO 8601 |
chain | string | usdc-eth, usdc-sol, usdt-sol, usdt-tron ou usdt-eth |
sent_cents, fee_cents, credited_cents | integer | O que você enviou, a taxa, o que cai no saldo |
status | string | pending e depois confirmed |
confirmations | string | Confirmações na rede enquanto pendente |
USDC na Ethereum é creditado 1:1 sem taxa. Todas as outras blockchains têm 1% de taxa: o depósito é convertido para USDC (ERC20) ao chegar. O mínimo é $25 por recarga.
The licence object #
{
"account_id": "acc_1001",
"creator_id": "cr_lea",
"days_left": 18,
"expires_at": "2026-10-24T09:00:00Z",
"auto_renew": true
}
| Field | Type | Description |
|---|---|---|
account_id | string | A conta Telegram em que a licença está ativa |
creator_id | string | A criadora dela |
days_left | integer | Dias restantes, de 30 |
expires_at | string | Quando termina |
auto_renew | boolean | Renova do estoque (ou compra uma única) quando terminar |
Licenças em estoque são contadas, não listadas uma a uma: cada uma mantém seus próprios dias restantes (30 para uma nova).
The withdrawal object #
{ "id": "wd_118", "status": "pending_review", "amount_cents": 50000, "requested_at": "2026-10-06T15:00:00Z", "tx_hash": null }
| Field | Type | Description |
|---|---|---|
id | string | O saque |
status | string | pending_review, sent (com tx_hash) ou rejected com motivo |
amount_cents | integer | Valor solicitado, no mínimo 50000 ($500) |
requested_at | string | ISO 8601, UTC |
tx_hash | string ou null | A transação, quando enviada |
The invoice object #
{
"id": "LC-2026-09",
"month": "2026-09",
"licences_cents": 22800,
"commission_cents": 930000,
"total_cents": 952800,
"status": "paid",
"pdf_url": "https://api.lanachat.ai/v1/billing/invoices/LC-2026-09.pdf"
}
| Field | Type | Description |
|---|---|---|
id | string | Número do extrato, LC-YYYY-MM |
month | string | Mês que cobre |
licences_cents, commission_cents, total_cents | integer | Licenças, comissão e total do mês |
status | string | Pago, em andamento (mês atual) ou falhou |
pdf_url | string | PDF do extrato |
Balance and ledger #
Get the balance #
GET /billing/balance · owner
curl https://api.lanachat.ai/v1/billing/balance \
-H "Authorization: Bearer $LANACHAT_TOKEN"
A resposta é o balance object.
List the ledger #
GET /billing/ledger · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
from, to | string | No | Dias YYYY-MM-DD, UTC, ambos incluídos |
limit, cursor | number, string | No | Paginação |
curl "https://api.lanachat.ai/v1/billing/ledger?from=2026-10-01&to=2026-10-06" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
{
"data": [
{ "id": "led_90211", "at": "2026-10-06T14:40:00Z", "kind": "licences", "label": "Licences · pack of 10", "amount_cents": -17000, "balance_after_cents": 31210 },
{ "id": "led_90207", "at": "2026-10-06T13:20:00Z", "kind": "commission", "label": "Lea · Marco", "amount_cents": -468, "balance_after_cents": 48210 },
{ "id": "led_90150", "at": "2026-10-05T09:02:00Z", "kind": "deposit", "label": "Deposit · USDC on Ethereum", "amount_cents": 300000, "balance_after_cents": 48678 }
],
"next_cursor": "eyJpZCI6ImxlZF85MDE0OSJ9"
}
Export the ledger as CSV #
GET /billing/ledger.csv · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
from, to | string | No | Dias YYYY-MM-DD, UTC |
curl "https://api.lanachat.ai/v1/billing/ledger.csv?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer $LANACHAT_TOKEN" -o ledger-2026-09.csv
As mesmas linhas de Export CSV em Billing › Activity, prontas para seu contador.
Deposits #
Get the deposit addresses #
GET /billing/deposit-addresses · owner
curl https://api.lanachat.ai/v1/billing/deposit-addresses \
-H "Authorization: Bearer $LANACHAT_TOKEN"
A resposta traz um endereço por blockchain (Ethereum, Solana, Tron) e, para Solana, o memo.
Aviso Na Solana, um depósito enviado sem o memo não pode ser associado ao seu workspace. Sempre envie o endereço e o memo.
Você pode enviar USDC na Ethereum (ERC20), USDC na Solana, USDT na Solana, USDT na Tron (TRC20) ou USDT na Ethereum (ERC20). A taxa de rede da sua transferência é paga da sua carteira.
List deposits #
GET /billing/deposits · owner
curl https://api.lanachat.ai/v1/billing/deposits \
-H "Authorization: Bearer $LANACHAT_TOKEN"
{
"data": [
{ "id": "dep_4", "at": "2026-10-06T13:52:00Z", "chain": "usdt-tron", "sent_cents": 100000, "fee_cents": 1000, "credited_cents": 99000, "status": "pending", "confirmations": "12/19" },
{ "id": "dep_3", "at": "2026-10-05T09:02:00Z", "chain": "usdc-eth", "sent_cents": 300000, "fee_cents": 0, "credited_cents": 300000, "status": "confirmed", "confirmations": null }
],
"next_cursor": null
}
O saldo é creditado automaticamente quando um depósito é confirmed; ele também vira uma linha deposit no extrato.
Licences #
List licences #
GET /billing/licences · owner
curl https://api.lanachat.ai/v1/billing/licences \
-H "Authorization: Bearer $LANACHAT_TOKEN"
A resposta traz as licenças em estoque e um licence object por conta atribuída, com seus dias restantes.
Buy licences #
POST /billing/licences/buy · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
pack | integer | Yes | 1 (única, $19), 10 ($170), 25 ($375) ou 50 ($650) |
qty | integer | Yes | Quantos desse pacote |
curl -X POST https://api.lanachat.ai/v1/billing/licences/buy \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"pack": 10, "qty": 1}'
{ "licences_added": 10, "amount_cents": 17000, "balance_cents": 31210, "ledger_id": "led_90211" }
As licenças vão para seu estoque imediatamente. Um saldo insuficiente responde 402 (insufficient_balance). Licenças em estoque nunca expiram, e licenças compradas não são reembolsáveis.
Assign a licence #
POST /billing/licences/assign · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | string | Yes | A conta Telegram que recebe a licença |
curl -X POST https://api.lanachat.ai/v1/billing/licences/assign \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"account_id": "acc_1001"}'
A resposta é o licence object da conta. A licença do estoque com menos dias restantes é usada primeiro: seus dias restantes, ou 30 se for nova. Auto-renew vem ativado por padrão.
Take a licence back #
POST /billing/licences/unassign · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | string | Yes | A conta que devolve a licença |
curl -X POST https://api.lanachat.ai/v1/billing/licences/unassign \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"account_id": "acc_1001"}'
A licença volta para seu estoque com seus dias restantes. A AI para de responder nessa conta imediatamente. Para mover uma licença para outra conta, devolva-a e depois atribua: ela mantém seus dias, sem custo.
Turn auto-renew on or off #
PATCH /billing/licences/auto-renew · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | string | Yes | A conta |
auto_renew | boolean | Yes | true para renovar quando os dias acabarem |
curl -X PATCH https://api.lanachat.ai/v1/billing/licences/auto-renew \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"account_id": "acc_1001", "auto_renew": false}'
Quando os dias acabam, auto-renew usa uma licença do estoque primeiro, ou compra uma única ($19) se o estoque estiver vazio. Não pode comprar sem saldo: fique de olho em low_balance ou no webhook billing.low_balance webhook.
Affiliate withdrawals #
List withdrawals #
GET /billing/withdrawals · owner
curl https://api.lanachat.ai/v1/billing/withdrawals \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Uma lista de withdrawal objects, mais recentes primeiro.
Ask for a withdrawal #
POST /billing/withdrawals · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
amount_cents | integer | Yes | Pelo menos 50000 ($500), no máximo o disponível para saque |
curl -X POST https://api.lanachat.ai/v1/billing/withdrawals \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"amount_cents": 50000}'
{ "id": "wd_118", "status": "pending_review", "amount_cents": 50000, "requested_at": "2026-10-06T15:00:00Z", "tx_hash": null }
Os ganhos são enviados em USDC para a carteira cadastrada, 7 dias após o fim do mês. Só ganhos de afiliados podem ser sacados, nunca o saldo pré-pago. Pedido abaixo de $500 é recusado.
Statements #
List statements #
GET /billing/invoices · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
year | integer | No | Por exemplo 2026 |
curl "https://api.lanachat.ai/v1/billing/invoices?year=2026" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Um invoice object por mês.
Download a statement #
GET /billing/invoices/{id}.pdf · owner
curl https://api.lanachat.ai/v1/billing/invoices/LC-2026-09.pdf \
-H "Authorization: Bearer $LANACHAT_TOKEN" -o LC-2026-09.pdf
Aviso Verifique seus extratos. Erros de cobrança devem ser reportados em até 60 dias após o extrato que os mostra; depois disso, o extrato é definitivo.
Set the billing details #
PUT /billing/details · owner
| Parameter | Type | Required | Description |
|---|---|---|---|
company | string | No | Nome da empresa |
email | string | No | E-mail de cobrança |
address, city, postal, country | string | No | Endereço postal |
vat | string | No | Número de VAT |
curl -X PUT https://api.lanachat.ai/v1/billing/details \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"company": "Mia Agency Ltd", "email": "[email protected]", "address": "12 Market Street", "city": "Dublin", "postal": "D02 X285", "country": "IE", "vat": "IE1234567T"}'
Os mesmos campos de Billing › Billing details. Os extratos exibem esses dados. PUT substitui todos: um campo omitido é esvaziado.