Record the payment method saved on the setup page
post/v1/tenants/{tenant_id}/billing-profile/payment-method/sync
Requires an API key
Signed-in tenant-admin or Ivora staff; API keys are refused. Reads the setup page's outcome and the team customer's default card from Stripe and records its summary (brand, last4, expiry). A replaced card is removed from Stripe. Safe to repeat.
Path parameters
- tenant_idintegerRequired
Returns · 200
- tenant_idintegerRequired
- rate_cents_per_kwhstringRequiredIvora's CSMS usage fee for this project in US cents per kWh of charging, a decimal string: the project's override, else the team's rate (default 1.00).
- rate_sourceenumRequiredteam: the team's default rate. project: a per-project override set by Ivora.One of
team,project - currencystringDefault
"usd" - invoicingstringInvoiced monthly to the team's payment method, one line per project.Default
"monthly" - teamBillingTeamSummaryRequired
Child attributes
- idstring | nullThe team billing account (team_...); null until it is first stored (the first card setup or staff change).
- namestringRequired
- rate_cents_per_kwhstringRequiredThe team's default usage fee in US cents per kWh, a decimal string (default 1.00).
- discount_percentintegerThe team's discount in percent (0 to 100, default 0), set by Ivora: its monthly invoice shows usage at the normal rate, discounted. 100 needs no payment method but is still invoiced (at $0); a waived team gets no invoice at all.Default
0· Minimum 0 · Maximum 100 - tenant_idsarray of integerRequiredThe team's projects (tenants); one invoice per team per month with a line per project.
- statusenumRequiredactive: the team has a usable card on file. grace: no card yet, until grace_ends_at. enterprise: invoiced with net terms; no card needed, and an overdue invoice never blocks setup by itself. suspended: Ivora suspended the team's new CSMS setup and control (402 billing_suspended). past_due: a monthly invoice payment failed (past_due_since); new CSMS setup and control answer 402 payment_method_required 14 days later until it is paid. payment_method_required: new CSMS setup and control answer 402 payment_method_required. waived: Ivora waived the team's requirement and invoice. exempt: an Ivora internal team or the bench tenant. discounted: no card on file and a 100% discount; invoiced at $0 and no card is needed.One of
active,grace,past_due,payment_method_required,waived,exempt,discounted,enterprise,suspended - csms_setup_allowedbooleanRequiredWhether new CSMS setup and control (creating stations, locations and CSMS keys, commands, creating bills and external sessions) are allowed. Reads, OCPP traffic, stops and starting an existing bill or session are never blocked.
- waivedbooleanRequiredIvora waived the team's payment method requirement; the team gets no invoice.
- discount_percentintegerThe team's discount in percent (0 to 100, default 0), set by Ivora: its monthly invoice shows usage at the normal rate, discounted. 100 needs no payment method but is still invoiced (at $0); a waived team gets no invoice at all.Default
0· Minimum 0 · Maximum 100 - exemptenum | nullOne of
bench,internal - grace_ends_atstring | nullEnd of the team's grace period (teams of tenants that existed before the fee: 30 days after its release).
- past_due_sincestring | nullWhen a payment of the team's monthly usage-fee invoice first failed; cleared once the unpaid invoices are paid.
- payment_methodobject | nullThe team's default card.
Child attributes
- brandstring | nullCard brand, such as visa.
- last4string | null
- exp_monthinteger | null
- exp_yearinteger | null
- expiredbooleanRequiredThe card's expiry month has passed; an expired card does not count as a payment method on file.
- billing_modeenumself_serve: the card on file is charged automatically. enterprise (set by Ivora): a monthly invoice with net terms, paid by bank debit, bank transfer or as invoice_terms allow; no card needed.One of
self_serve,enterprise· Default"self_serve" - invoice_termsobject | nullenterprise only. The team's billing contacts, PO number and bank transfer instructions are on GET /v1/teams/{team_id}/billing.
Child attributes
- net_terms_daysintegerRequiredInvoices are due this many days after they are sent.
- payment_methodsarray of stringRequiredHow an invoice can be paid: us_bank_account (ACH debit), customer_balance (bank transfer: ACH credit or wire), acss_debit (Canadian pre-authorized debit in USD), card. Every invoice is in USD.
- collectionenumRequiredauto_debit: the verified bank account is debited on the due date. invoice_only: pay each invoice by its due date.One of
auto_debit,invoice_only
- bank_accountobject | nullThe team's bank account for enterprise invoices (ACH or pre-authorized debit).
Child attributes
- typeenumRequiredus_bank_account: ACH Direct Debit (US). acss_debit: Canadian pre-authorized debit, in US dollars (a USD account at a Canadian bank).One of
us_bank_account,acss_debit - bank_namestring | null
- last4string | null
- statusenumRequiredverified: the mandate is active and an enterprise invoice is debited on its due date. pending_verification: confirm the microdeposits Stripe sent before it can be debited.One of
verified,pending_verification
- setup_pendingbooleanRequiredA payment method setup was started for the team and not yet synchronized.
- payment_modeenumRequiredStripe mode of Ivora's platform account here; only production is live.One of
test,live - updated_atstring | null
- current_monthobject | nullThe project's usage so far this UTC calendar month and its estimated usage fee, by the monthly invoice's rule; null when the CSMS cannot be read right now.
Child attributes
- periodstringRequiredThe current UTC calendar month, YYYY-MM.
- period_startstringRequiredStart of the month in UTC (inclusive), such as 2026-10-01T00:00:00+00:00.
- period_endstringRequiredStart of the next month in UTC (exclusive).
- billable_fromstringRequiredWhen the team's usage starts to be billed: the later of the usage fee's release and the end of the team's grace period. Sessions that ended before it are never invoiced.
- energy_kwhstringRequiredkWh of the project's completed charging sessions that ended this month (each session's whole energy, as the invoice counts it), a decimal string as the core records kWh, such as "6.941"; "0" without sessions. Sessions still running count when they end.
- transactionsintegerRequiredNumber of those charging sessions (transactions).
- billable_kwhstringRequiredThe part of energy_kwh that ended at or after billable_from: what the invoice bills.
- billable_transactionsintegerRequired
- held_transactionsintegerRequiredBillable sessions with an implausible reading (negative or above 1000 kWh), left out of the estimate; they hold the team's invoice until Ivora corrects them.
- invoicedbooleanRequiredFalse when this usage is not invoiced: see not_invoiced_reason; estimated_minor is then 0.
- not_invoiced_reasonenum | nullRequiredinternal: an Ivora internal team. bench: Ivora's test bench project. waived: the team's fee is waived. grace: the team's grace period runs until billable_from.One of
internal,bench,waived,grace - rate_cents_per_kwhstringRequiredThe project's effective rate the estimate uses.
- usage_minorintegerRequiredThe project's invoice line so far in US cents: billable_kwh x rate_cents_per_kwh, rounded half up.
- discount_percentintegerRequiredThe team's discount the estimate applies.Minimum 0 · Maximum 100
- discount_minorintegerRequiredusage_minor x discount_percent / 100, rounded half up. The invoice rounds the discount once over all of the team's projects, so it can differ by a cent.
- estimated_minorintegerRequiredEstimated usage fee so far this month in US cents: usage_minor - discount_minor. The team's whole month (every project and any carried balance) is GET /v1/tenants/{tenant_id}/billing-profile/usage; the monthly invoice is final.
- currencystringDefault
"usd" - as_ofstringRequiredWhen the usage was read from the CSMS; reads are cached up to 60 seconds.
POST /v1/tenants/{tenant_id}/billing-profile/payment-method/sync
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/tenants/1042/billing-profile/payment-method/sync" \
-H "Authorization: Bearer $IVORA_API_KEY"Response · 200
{
"tenant_id": 1042,
"rate_cents_per_kwh": "string",
"rate_source": "team",
"currency": "usd",
"invoicing": "monthly",
"team": {
"id": "id_0123456789abcdef",
"name": "bay-01",
"rate_cents_per_kwh": "string",
"discount_percent": 0,
"tenant_ids": [
1042
]
},
"status": "active",
"csms_setup_allowed": false,
"waived": false,
"discount_percent": 0,
"exempt": "bench",
"grace_ends_at": "2026-09-30T17:00:00Z",
"past_due_since": "string",
"payment_method": {
"brand": "string",
"last4": "string",
"exp_month": 1,
"exp_year": 1,
"expired": false
},
"billing_mode": "self_serve",
"invoice_terms": {
"net_terms_days": 1,
"payment_methods": [
"string"
],
"collection": "auto_debit"
},
"bank_account": {
"type": "us_bank_account",
"bank_name": "string",
"last4": "string",
"status": "verified"
},
"setup_pending": false,
"payment_mode": "test",
"updated_at": "2026-09-30T17:00:00Z",
"current_month": {
"period": "string",
"period_start": "string",
"period_end": "string",
"billable_from": "string",
"energy_kwh": "string",
"transactions": 1,
"billable_kwh": "string",
"billable_transactions": 1,
"held_transactions": 1,
"invoiced": false,
"not_invoiced_reason": "internal",
"rate_cents_per_kwh": "string",
"usage_minor": 1250,
"discount_percent": 0,
"discount_minor": 1250,
"estimated_minor": 1250,
"currency": "usd",
"as_of": "string"
}
}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.