API: saldo, licenze, prelievi e fatture
LanaChat si paga da un unico saldo prepagato in dollari USA: da questo vengono scalate le licenze (una per account Telegram, 30 giorni) e una commissione sulle vendite nette. Lo ricarichi con depositi in crypto. I guadagni da affiliato possono essere prelevati. Ogni endpoint di fatturazione richiede un token owner: negli esempi, $LANACHAT_TOKEN ne contiene uno.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /billing/balance | Il saldo, le vendite nette del mese e la fascia di commissione | owner | Planned |
| GET | /billing/ledger | Ogni movimento: depositi, licenze, commissioni, rimborsi | owner | Planned |
| GET | /billing/ledger.csv | Lo stesso registro in CSV (from=, to=) | owner | Planned |
| GET | /billing/deposit-addresses | Un indirizzo di deposito per ogni chain (con memo su Solana) | owner | Planned |
| GET | /billing/deposits | Depositi e loro conferme | owner | Planned |
| GET | /billing/licences | Licenze in stock e assegnate, con giorni residui | owner | Planned |
| POST | /billing/licences/buy | Acquista licenze: singola o pacchetti da 10, 25 o 50 | owner | Planned |
| POST | /billing/licences/assign | Assegna una licenza dallo stock a un account | owner | Planned |
| POST | /billing/licences/unassign | Ritorna allo stock con i giorni residui | owner | Planned |
| PATCH | /billing/licences/auto-renew | Attiva o disattiva il rinnovo automatico per un account | owner | Planned |
| GET | /billing/withdrawals | Prelievi affiliati e loro stato | owner | Planned |
| POST | /billing/withdrawals | Richiedi un prelievo dei guadagni affiliati (da $500) | owner | Planned |
| GET | /billing/invoices | Estratti conto mensili (year=) | owner | Planned |
| GET | /billing/invoices/{id}.pdf | Un estratto conto in PDF | owner | Planned |
| PUT | /billing/details | Nome azienda, indirizzo e partita IVA sugli estratti conto | owner | Planned |
Prezzi in una tabella #
| Cosa | Prezzo |
|---|---|
| Una licenza (un account Telegram, 30 giorni) | $19 |
| Pacchetto da 10 licenze | $170 |
| Pacchetto da 25 licenze | $375 |
| Pacchetto da 50 licenze | $650 |
| Commissione fino a $30k di vendite nette nel mese | 12% sulle vendite AI, 4% su vendite manuali |
| Commissione da $30k a $100k | 10% e 3% |
| Commissione sopra $100k | 8% e 2% |
Il contatore è sulle vendite nette di tutto lo workspace nel mese solare; si azzera il 1°. I Telegram Stars valgono $0.013 ciascuno nelle vendite nette.
L’oggetto balance #
{
"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
}
| Campo | Tipo | Descrizione |
|---|---|---|
balance_cents | integer | Saldo prepagato, in centesimi di dollaro |
month | string | Mese solare considerato, YYYY-MM |
net_sales_cents | integer | Vendite nette dello workspace in questo mese |
tier | object | Fascia attuale: limite up_to_cents, tasso AI e tasso manuale in basis points |
licences | object | Licenze in_stock, assigned e assegnate che scadono entro 7 giorni (expiring_7d) |
low_balance | boolean | true se il saldo non copre i prossimi 7 giorni di licenze |
I tassi sono in basis points: 1200 significa 12%.
L’oggetto ledger entry #
Ogni riga di Billing › Activity nella Console.
{
"id": "led_90211",
"at": "2026-10-06T14:40:00Z",
"kind": "licences",
"label": "Licences · pack of 10",
"amount_cents": -17000,
"balance_after_cents": 31210
}
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | La riga |
at | string | ISO 8601, UTC |
kind | string | deposit, licences, commission, refund, affiliate o other |
label | string | Testo della riga, come in Console |
amount_cents | integer | Positivo se entrano soldi, negativo se escono |
balance_after_cents | integer | Saldo dopo questa riga |
Una riga commission appartiene a una vendita: la Console mostra il fan, la fascia, chi ha inviato l’offerta (AI o manuale), come è stato calcolato il netto ("12,500 ★ × $0.013") e il tasso.
L’oggetto deposit #
{
"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"
}
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | Il deposito |
at | string | Quando è stato visto, ISO 8601 |
chain | string | usdc-eth, usdc-sol, usdt-sol, usdt-tron o usdt-eth |
sent_cents, fee_cents, credited_cents | integer | Quanto hai inviato, la fee, quanto arriva sul saldo |
status | string | pending poi confirmed |
confirmations | string | Conferme di rete contate, mentre è pending |
USDC su Ethereum è accreditato 1:1 senza fee. Ogni altra chain ha una fee dell’1%: il deposito viene convertito in USDC (ERC20) all’arrivo. Il minimo è $25 per ricarica.
L’oggetto licence #
{
"account_id": "acc_1001",
"creator_id": "cr_lea",
"days_left": 18,
"expires_at": "2026-10-24T09:00:00Z",
"auto_renew": true
}
| Campo | Tipo | Descrizione |
|---|---|---|
account_id | string | L’account Telegram su cui gira la licenza |
creator_id | string | La sua creator |
days_left | integer | Giorni prima della scadenza, su 30 |
expires_at | string | Quando scade |
auto_renew | boolean | Rinnova dallo stock (o compra singola) alla scadenza |
Le licenze in stock sono contate, non elencate singolarmente: ognuna mantiene i propri giorni residui (30 per una nuova).
L’oggetto withdrawal #
{ "id": "wd_118", "status": "pending_review", "amount_cents": 50000, "requested_at": "2026-10-06T15:00:00Z", "tx_hash": null }
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | Il prelievo |
status | string | pending_review, sent (con tx_hash) o rejected con motivo |
amount_cents | integer | Importo richiesto, almeno 50000 ($500) |
requested_at | string | ISO 8601, UTC |
tx_hash | string o null | La transazione, una volta inviata |
L’oggetto invoice #
{
"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"
}
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | Numero estratto conto, LC-YYYY-MM |
month | string | Mese coperto |
licences_cents, commission_cents, total_cents | integer | Licenze, commissioni e totale del mese |
status | string | Pagato, in corso (mese corrente) o fallito |
pdf_url | string | PDF dell’estratto conto |
Saldo e registro #
Ottieni il saldo #
GET /billing/balance · owner
curl https://api.lanachat.ai/v1/billing/balance \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La risposta è l’oggetto balance.
Elenca il registro #
GET /billing/ledger · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
from, to | string | No | Giorni YYYY-MM-DD, UTC, inclusi entrambi |
limit, cursor | number, string | No | Paginazione |
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"
}
Esporta il registro in CSV #
GET /billing/ledger.csv · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
from, to | string | No | Giorni 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
Le stesse righe di Export CSV in Billing › Activity, pronte per il tuo commercialista.
Depositi #
Ottieni gli indirizzi di deposito #
GET /billing/deposit-addresses · owner
curl https://api.lanachat.ai/v1/billing/deposit-addresses \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La risposta fornisce un indirizzo per ogni chain (Ethereum, Solana, Tron) e, per Solana, il memo.
Attenzione Su Solana, un deposito inviato senza memo non può essere associato al tuo workspace. Invia sempre sia l’indirizzo che il memo.
Puoi inviare USDC su Ethereum (ERC20), USDC su Solana, USDT su Solana, USDT su Tron (TRC20) o USDT su Ethereum (ERC20). La fee di rete del trasferimento è a carico del tuo wallet.
Elenca i depositi #
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
}
Il saldo viene accreditato automaticamente quando un deposito è confirmed; è anche una riga deposit nel registro.
Licenze #
Elenca le licenze #
GET /billing/licences · owner
curl https://api.lanachat.ai/v1/billing/licences \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La risposta fornisce le licenze in stock e un oggetto licence per ogni account assegnato, con i giorni residui.
Acquista licenze #
POST /billing/licences/buy · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
pack | integer | Sì | 1 (singola, $19), 10 ($170), 25 ($375) o 50 ($650) |
qty | integer | Sì | Quanti di quel pacchetto |
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" }
Le licenze vanno subito nel tuo stock. Un saldo troppo basso risponde con 402 (insufficient_balance). Le licenze in stock non scadono mai, e le licenze acquistate non sono rimborsabili.
Assegna una licenza #
POST /billing/licences/assign · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
account_id | string | Sì | L’account Telegram che riceve la licenza |
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"}'
La risposta è l’oggetto licence dell’account. Viene usata prima la licenza in stock con meno giorni residui: i suoi giorni rimanenti, o 30 se nuova. Il rinnovo automatico è attivo di default.
Riprendi una licenza #
POST /billing/licences/unassign · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
account_id | string | Sì | L’account che restituisce la licenza |
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"}'
La licenza torna nel tuo stock con i giorni residui. L’AI smette subito di rispondere su quell’account. Per spostare una licenza a un altro account, riprendila e poi assegnala: mantiene i giorni, gratuitamente.
Attiva o disattiva il rinnovo automatico #
PATCH /billing/licences/auto-renew · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
account_id | string | Sì | L’account |
auto_renew | boolean | Sì | true per rinnovare quando finiscono i giorni |
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 finiscono i giorni, il rinnovo automatico prende prima una licenza dal tuo stock, o compra una singola ($19) se lo stock è vuoto. Non può comprare senza saldo: controlla low_balance o il webhook billing.low_balance webhook.
Prelievi affiliati #
Elenca i prelievi #
GET /billing/withdrawals · owner
curl https://api.lanachat.ai/v1/billing/withdrawals \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Una lista di oggetti withdrawal, dal più recente.
Richiedi un prelievo #
POST /billing/withdrawals · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
amount_cents | integer | Sì | Almeno 50000 ($500), al massimo quanto disponibile |
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 }
I guadagni vengono inviati in USDC al wallet registrato, 7 giorni dopo la fine del mese. Possono essere prelevati solo i guadagni da affiliato, mai il saldo prepagato. Una richiesta sotto i $500 viene rifiutata.
Estratti conto #
Elenca gli estratti conto #
GET /billing/invoices · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
year | integer | No | Per esempio 2026 |
curl "https://api.lanachat.ai/v1/billing/invoices?year=2026" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Un oggetto invoice per ogni mese.
Scarica un estratto conto #
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
Attenzione Controlla i tuoi estratti conto. Un errore di fatturazione deve essere segnalato entro 60 giorni dall’estratto che lo mostra; dopo di che l’estratto è definitivo.
Imposta i dettagli di fatturazione #
PUT /billing/details · owner
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
company | string | No | Nome azienda |
email | string | No | E-mail di fatturazione |
address, city, postal, country | string | No | Indirizzo postale |
vat | string | No | Partita IVA |
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"}'
Gli stessi campi di Billing › Billing details. Gli estratti conto riportano questi dati. PUT li sostituisce tutti: un campo omesso viene svuotato.