Kobana

Customer → BillingAccount → PortalUser. Native multi-account.

A customer can have multiple billing accounts (branch, department, project). Each account with its own payment method, tax cycle and portal users.

Feature
Customer list with document, status and MRR
∞
customers per organization
N
billing accounts per customer
CNPJ/CPF
automatically validated
LGPD
native export and delete

3-tier hierarchy

Customer
Registration entity. Individual (CPF) or company (CNPJ). Stores name, company name, document, addresses (JSON), emails (JSON), phones (JSON).
  • DocumentType: cpf | cnpj
  • PersonKind: natural | juridical
  • Free custom data + metadata
BillingAccount
Billing account. Each customer can have several (Main Branch, RJ Branch, finance department). Consolidated MRR in mrrAmountCents.
  • 3 statuses: active, suspended, closed
  • paymentTermsDays (default 10 days)
  • autoCollection toggle per account
  • Own tax configuration
PortalUser
User who accesses the portal. Linked to a BillingAccount. SSO or password. Optional 2FA.
  • Magic link, password, SSO
  • 5 statuses (active, pending_verification, pending_invitation, suspended)
  • Failed login attempts tracked
  • Multiple users per billing account

What you can do

Complete Registration
Individual or company with full address (postal code, IBGE), multiple contacts (emails/phones), free tags.
  • CPF/CNPJ digit validation
  • Optional Revenue Bureau query (MinhaReceita)
  • Tags + JSON customData for integration
Multi-Billing Account
A corporate customer can have independent accounts for branches or departments. Separate invoices, payment methods and portal.
  • Individual invoices per account
  • Report consolidation at Customer level
  • Different permissions in portal
Bulk Import (CSV)
ImportService processes CSV with pre-import validation. Import worker runs in background, generating error report.
  • Standard template provided
  • Row-by-row validation
  • Legacy system migration
Communication Schedule
Automatic notifications per event (invoice_created, payment_failed, trial_ending). Customizable templates per organization.
  • Email (AWS SES)
  • In-app (Notification)
  • Webhook for integration
Payment History
All financial movements stored in StatementItem (credit/debit). Statement view in portal and dashboard.
  • balanceCents balance per billing account
  • Negative balance allowed with limit (allowedNegativeBalanceCents)
  • Export in CSV/Excel
Suspension and Reactivation
BillingAccount with suspended status blocks new invoices and actions. suspendedAt + reason recorded. Reactivation via API or dashboard.
  • Manual or automatic (dunning)
  • Complete audit log
  • Webhook billing_account.suspended
LGPD: Export and Deletion
DataPurgeService implements the right to be forgotten. Data-purge worker executes scheduled deletion with confirmation.
  • Complete export in ZIP (data + invoices + payments)
  • Soft delete on customers (deletedAt)
  • Optional anonymization preserving accounting history
Tags and Segmentation
Free tags on Person + customMetadata. Advanced filters in listing for segmentation (high value, expiring, delinquent, by region).
  • Tags as JSON array
  • Combined filters (AND/OR)
  • Save custom views

Create customer + billing account via API

bash
curl -X POST https://api.billing.kobana.com.br/v1/customers \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ACME Tecnologia Ltda",
    "document_type": "cnpj",
    "document_number": "12.345.678/0001-90",
    "kind": "juridical",
    "emails": [{ "kind": "work", "address": "finance@acme.com.br" }],
    "addresses": [{
      "street": "Av. Paulista",
      "number": "1000",
      "city": "São Paulo",
      "state": "SP",
      "zip_code": "01310100"
    }],
    "billing_accounts": [{
      "billing_email": "finance@acme.com.br",
      "payment_terms_days": 15,
      "customer_tax_type": "simples_optante",
      "withhold_iss": false
    }]
  }'
response
{
  "id": "cust_xyz789",
  "billing_accounts": [
    { "id": "ba_abc123", "status": "active", "mrr_amount_cents": 0 }
  ]
}

Perguntas frequentes

Your customer base, without friction