List the team's monthly usage-fee invoices
get/v1/teams/{team_id}/billing/invoices
Requires an API key
The team's owners, admins and billing members, and Ivora staff; API keys are refused. One invoice per month with a line per project, newest first; hosted_invoice_url is Stripe's page to view or pay it. The same list as GET /v1/tenants/{tenant_id}/billing-profile/invoices for any of the team's projects.
Path parameters
- team_idstringRequiredPattern
^team_[0-9a-f]{32}$
Returns · 200
- dataarray of PlatformInvoiceRecordRequired
Child attributes
- idstringRequiredpfi_...: one per team and month.
- team_idstringRequired
- periodstringRequiredThe month, YYYY-MM (UTC).
- statusenumRequiredpending: being sent to Stripe. open: finalized, the card is charged automatically. paid (a $0 invoice after a 100% discount is paid when finalized). payment_failed: a charge failed (the team is past due; pay at hosted_invoice_url or update the card). uncollectible / void: set in Stripe. carried: below Stripe's 50-cent minimum or no card on file; the amount moves to the next month. skipped: a waived or Ivora internal team. held: Ivora is reviewing an implausible meter reading. empty: no usage.One of
pending,open,paid,payment_failed,uncollectible,void,carried,skipped,held,empty - reasonstring | nullcarried: below_minimum or no_payment_method. skipped: waived or internal. held: implausible_reading. pending/paid: fully_discounted for a $0 invoice.
- kwhstringRequired
- usage_minorintegerRequiredThe month's usage lines (and late sessions), in US cents, at the normal rate.
- discount_percentintegerThe team's discount when the month was computed.Default
0 - discount_minorintegerround_half_up(usage_minor x discount_percent / 100): the invoice's 'Ivora discount N%' line.Default
0 - carried_in_minorintegerRequiredA balance carried from earlier months (carried_from), already net of their discount.
- carried_fromstring | nullThe earlier carried months taken over, comma-separated (YYYY-MM).
- carried_tostring | nullThe month that took over this carried amount; empty while it is still pending (a waived, internal or held month never takes it over).
- amount_minorintegerRequiredusage_minor - discount_minor + minimum_topup_minor + carried_in_minor.
- currencystringDefault
"usd" - linesarray of InvoiceLineRecordRequired
Child attributes
- tenant_idintegerRequiredThe project.
- kindenumusage: the project's sessions that ended in the month. late: sessions of an earlier, already invoiced month that reached the CSMS after it was invoiced.One of
usage,late· Default"usage" - periodsarray of string | nulllate: the months those sessions ended in.
- kwhstringRequiredEnergy of the project's completed charging sessions (that ended in the month, or late ones): the exact decimal sum of the core's kWh.
- rate_cents_per_kwhstringRequired
- rate_sourceenumRequiredOne of
team,project - transactionsintegerRequired
- amount_minorintegerRequiredround_half_up(kwh x rate) in US cents.
- descriptionstring | nullThe invoice line: 'Ivora CSMS, <month>: <kWh> kWh x <rate> cents/kWh (project ...)'.
- minimum_topup_minorintegerThe 'minimum monthly commitment' line raising the month to the team's minimum.Default
0 - collection_methodenumcharge_automatically: the card on file (self-serve). send_invoice: an enterprise invoice with net terms, due on due_date.One of
charge_automatically,send_invoice· Default"charge_automatically" - due_datestring | nullsend_invoice: when payment is due.
- overduebooleanAn open send_invoice invoice past its due_date.Default
false - days_overdueintegerDefault
0 - payment_processingbooleanA bank debit is in flight (ACH settles in a few business days).Default
false - po_numberstring | null
- stripe_invoice_idstring | null
- numberstring | null
- hosted_invoice_urlstring | nullStripe's page to view, download or pay the invoice.
- attempt_countintegerRequired
- created_atstringRequired
- updated_atstringRequired
- finalized_atstring | null
- paid_atstring | null
- failed_atstring | null
GET /v1/teams/{team_id}/billing/invoices
curl --fail-with-body "https://api.ivoracharge.com/v1/teams/team_0123456789abcdef0123456789abcdef/billing/invoices" \
-H "Authorization: Bearer $IVORA_API_KEY"Response · 200
{
"data": [
{
"id": "id_0123456789abcdef",
"team_id": "team_0123456789abcdef",
"period": "string",
"status": "pending",
"reason": "string",
"kwh": "string",
"usage_minor": 1250,
"discount_percent": 0,
"discount_minor": 0,
"carried_in_minor": 1250,
"carried_from": "string",
"carried_to": "string",
"amount_minor": 1250,
"currency": "usd",
"lines": [
{
"tenant_id": 1042,
"kind": "usage",
"periods": [
null
],
"kwh": "string",
"rate_cents_per_kwh": "string",
"rate_source": "team",
"transactions": 1,
"amount_minor": 1250,
"description": "string"
}
],
"minimum_topup_minor": 0,
"collection_method": "charge_automatically",
"due_date": "string",
"overdue": false,
"days_overdue": 0,
"payment_processing": false,
"po_number": "string",
"stripe_invoice_id": "stripe_invoice_0123456789abcdef",
"number": "string",
"hosted_invoice_url": "https://app.example.com/return",
"attempt_count": 1,
"created_at": "2026-09-30T17:00:00Z",
"updated_at": "2026-09-30T17:00:00Z",
"finalized_at": "2026-09-30T17:00:00Z",
"paid_at": "2026-09-30T17:00:00Z",
"failed_at": "2026-09-30T17:00:00Z"
}
]
}Try it is not available here yetRequests from this page are off until the production API at
https://api.ivoracharge.com is public. Use the code samples from your application server; Ivora grants production access. Keys are created in Developer tools.