4.6 KiB
4.6 KiB
Billing Endpoints
Purpose
Detail billing API endpoints for invoices, payments, credit packages, transactions, payment methods, and credit balance/usage.
Code Locations (exact paths)
- Routing:
backend/igny8_core/business/billing/urls.py,backend/igny8_core/modules/billing/urls.py - Views:
backend/igny8_core/business/billing/views.py,backend/igny8_core/modules/billing/views.py - Services:
backend/igny8_core/business/billing/services/credit_service.py,invoice_service.py,payment_service.py
High-Level Responsibilities
- Expose billing resources (invoices, payments, credit packages, payment methods, credit transactions).
- Provide credit balance/usage/limits endpoints.
- Support manual payment submission and available payment methods lookup.
Detailed Behavior
- Base paths:
/api/v1/billing/(business billing views via router)/api/v1/admin/(admin billing URLs)/api/v1/billing/credits/...(balance/usage/transactions aliases)
- Invoice endpoints (
InvoiceViewSet):GET /invoices/list account invoices (status filter optional).GET /invoices/{id}/invoice detail.GET /invoices/{id}/download_pdf/returns PDF bytes (placeholder).
- Payment endpoints (
PaymentViewSet):GET /payments/list payments (status filter optional).GET /payment-methods/available/returns available methods (country/config driven).POST /payments/manual/submit manual payment for an invoice (requires invoice_id, payment_method, transaction_reference; rejects already paid).
- Account payment methods (
AccountPaymentMethodViewSet):- CRUD at
/payment-methods/;POST /payment-methods/{id}/set_default/toggles default for the account.
- CRUD at
- Credit packages (
CreditPackageViewSet):GET /credit-packages/list active packages.POST /credit-packages/{id}/purchase/creates invoice and returns next_action (Stripe/PayPal placeholders; manual fallback returns invoice info).
- Credit transactions (
CreditTransactionViewSet):GET /transactions/ledger of credit changes; also registered under/credits/transactions/.
- Credit balance/usage/limits (
modules/billing/views.py):GET /credits/balance/returns credits, plan monthly credits, month-to-date credits used.GET /credits/usage/returns paginated usage logs with filters;GET /credits/usage/summary/aggregates by operation/model and totals;GET /credits/usage/limits/returns plan/account limits and usage counts.
- Permissions/tenancy: authenticated users; account-scoped querysets; viewsets rely on
request.accountorrequest.user.account.
Data Structures / Models Involved (no code)
Invoice,Payment,CreditPackage,CreditTransaction,AccountPaymentMethod,PaymentMethodConfig,CreditUsageLog,CreditCostConfig,Account,Plan.
Execution Flow
- Router dispatch → viewset → service calls (invoice/payment/credit) → DB updates → unified responses. Balance/usage endpoints compute aggregates on demand.
Cross-Module Interactions
- Credit costs/checks used by writer/automation AI flows; balances/usage reflect those deductions.
- Plan limits surfaced in limits endpoint relate to account management in auth/account domains.
State Transitions
- Invoices: draft/pending/paid/void/uncollectible; Payments: pending/pending_approval/processing/succeeded/completed/failed/refunded/cancelled; Credits balance changes via transactions.
Error Handling
- Manual payment: 400 on missing fields or already-paid invoice.
- Credit operations: 402 returned by upstream callers on
InsufficientCreditsError. - Balance/usage: returns zeros/empty when account/plan missing.
Tenancy Rules
- All billing data filtered by account; no cross-tenant access. Default viewsets inherit account scoping from base classes.
Billing Rules
- Credit costs come from
CreditCostConfigor constants; deductions recorded in ledger + usage logs. - Available methods and packages are filtered by active flags/config.
Background Tasks / Schedulers
- None specific; Stripe/PayPal integrations are placeholders; any future webhooks should update invoices/payments/credits accordingly.
Key Design Considerations
- Ledger + usage logs kept in sync via
CreditService. - Manual payment flow avoids storing sensitive data; account payment methods store metadata only.
How Developers Should Work With This Module
- Use
CreditServicefor credit math; do not mutate balances directly. - Implement Stripe/PayPal flows in
PaymentServiceif adding gateways; wire webhooks to update models. - Keep account scoping on all queries; reuse existing viewsets for new billing features.