Skip to content

Facturare ​

API ​

Parametri și răspunsuri complete: sold, credite, consum, facturi, metode de plată, planuri.

GET  /api/v1/billing/balance
GET  /api/v1/billing/ledger
GET  /api/v1/billing/ledger/reconcile
GET  /api/v1/billing/usage
GET  /api/v1/billing/usage/summary
POST /api/v1/billing/credits/purchase
GET/PUT /api/v1/billing/auto-reload
GET/POST /api/v1/billing/payment-methods
POST /api/v1/billing/payment-methods/setup-intent
POST /api/v1/billing/payment-methods/{id}/default
DELETE /api/v1/billing/payment-methods/{id}
GET  /api/v1/billing/invoices
GET  /api/v1/billing/invoices/{id}
GET  /api/v1/billing/invoices/{id}/download
GET  /api/v1/billing/plans

Două modele ​

Pay as you goEnterprise
FinanțarePortofel de credit preplătitContract cu cheltuială angajată
ImpunereApelurile se opresc când se termină creditulFacturat lunar
PrețuriCatalog publicPrețuri negociate per client

Ledger-ul de credit ​

credit_ledger e doar cu inserări. Un sold e suma rândurilor lui, niciodată o coloană modificabilă, deci un sold poate fi mereu explicat prin intrările care l-au produs, iar ledger/reconcile poate dovedi că cele două sunt de acord. Sumele sunt decimal(20, 8), cu valuta ISO stocată alături.

Tipurile de intrare sunt purchase, bonus, refund, usage, adjustment, chargeback, expiration, reservation, reservation_release, iar semnul fiecăruia e impus de o constrângere. Nu există cale de update; reconcilierea rescrie cache-ul de sold din intrări, nu scrie o intrare compensatorie — ledger-ul e autoritar prin definiție.

Contorizare ​

Consumul e contorizat per componentă, nu per apel: secunde de transcriere, tokeni de intrare și de ieșire ai modelului, caractere de sinteză, minute de telefonie, storage și taxa de platformă. Fiecare devine un rând usage_events care poartă unitățile proprii ale furnizorului și prețul aplicat, deci o linie de factură poate fi urmărită până la secunda de apel care a cauzat-o.

O componentă e tarifată doar dintr-un rând de registry cu preț verificat. Unde nu există un preț verificat, rândul se scrie oricum — cantitatea nu se pierde — dar cu cost = 0 și priced: false, iar defalcarea raportează acoperire parțială, în loc să prezinte un sub-total ca total. Vezi Analytics și costuri.

Costul furnizorului față de preț ​

Costul furnizorului e ce a plătit CallAgent; prețul e ce plătești tu. Cu chei proprii, furnizorul te facturează direct, iar CallAgent taxează doar taxa de platformă — ambele cifre se rețin, pentru că „de ce e factura mea numărul ăsta" are nevoie de amândouă.

Peste asta stă margin floor-ul, o marjă minimă de platformă pe minut facturabil, cu 0,10 EUR / 0,10 USD implicit. Vezi Analytics și costuri.

Reîncărcare automată ​

Când soldul scade sub un prag, o sumă configurată e taxată pe metoda de plată implicită. E protejată împotriva taxărilor eșuate repetate, ca un card care refuză să nu genereze o sută de încercări.

Concurență și admitere ​

Înainte de orice apel, admiterea verifică spațiul de concurență, soldul de credit, statusul organizației și politica de destinație într-un singur apel, și întoarce un token de slot eliberat la finalizare — fără el, un apel care crapă pierde un slot de concurență pentru totdeauna.

Stripe nu a fost niciodată apelat cu o cheie reală

Cumpărările, setup intents și metodele de plată au toate nevoie de chei Stripe, și nu a fost furnizată niciuna vreodată. STRIPE_SECRET e gol în mediul de exemplu livrat, iar gateway-ul aruncă o eroare cu nume — „Payments are disabled until the owner supplies Stripe keys" — în loc să degradeze în tăcere.

Fiecare cale de Stripe e acoperită de teste care conduc SDK-ul real Stripe, deci semnarea request-ului și serializarea sunt exersate. Fiecare răspuns HTTP din testele alea e un fixture conservat. Niciun endpoint Stripe live sau de test nu a fost vreodată contactat.

Verificarea semnăturii webhook-urilor, tratarea idempotentă a evenimentelor și creditarea autoritară pe ledger sunt tot cod real, care nu a întâlnit niciodată Stripe. Vezi Ce nu este construit.

Scrisă după cod. Ce nu este încă implementat este marcat ca atare, niciodată descris ca funcțional.