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_kwhstringRequired
    Ivora'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_sourceenumRequired
    team: the team's default rate. project: a per-project override set by Ivora.
    One of team, project
  • currencystring
    Default "usd"
  • invoicingstring
    Invoiced monthly to the team's payment method, one line per project.
    Default "monthly"
  • teamBillingTeamSummaryRequired
    Child attributes
    • idstring | null
      The team billing account (team_...); null until it is first stored (the first card setup or staff change).
    • namestringRequired
    • rate_cents_per_kwhstringRequired
      The team's default usage fee in US cents per kWh, a decimal string (default 1.00).
    • discount_percentinteger
      The 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 integerRequired
      The team's projects (tenants); one invoice per team per month with a line per project.
  • statusenumRequired
    active: 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_allowedbooleanRequired
    Whether 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.
  • waivedbooleanRequired
    Ivora waived the team's payment method requirement; the team gets no invoice.
  • discount_percentinteger
    The 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 | null
    One of bench, internal
  • grace_ends_atstring | null
    End of the team's grace period (teams of tenants that existed before the fee: 30 days after its release).
  • past_due_sincestring | null
    When a payment of the team's monthly usage-fee invoice first failed; cleared once the unpaid invoices are paid.
  • payment_methodobject | null
    The team's default card.
    Child attributes
    • brandstring | null
      Card brand, such as visa.
    • last4string | null
    • exp_monthinteger | null
    • exp_yearinteger | null
    • expiredbooleanRequired
      The card's expiry month has passed; an expired card does not count as a payment method on file.
  • billing_modeenum
    self_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 | null
    enterprise only. The team's billing contacts, PO number and bank transfer instructions are on GET /v1/teams/{team_id}/billing.
    Child attributes
    • net_terms_daysintegerRequired
      Invoices are due this many days after they are sent.
    • payment_methodsarray of stringRequired
      How 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.
    • collectionenumRequired
      auto_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 | null
    The team's bank account for enterprise invoices (ACH or pre-authorized debit).
    Child attributes
    • typeenumRequired
      us_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
    • statusenumRequired
      verified: 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_pendingbooleanRequired
    A payment method setup was started for the team and not yet synchronized.
  • payment_modeenumRequired
    Stripe mode of Ivora's platform account here; only production is live.
    One of test, live
  • updated_atstring | null
  • current_monthobject | null
    The 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
    • periodstringRequired
      The current UTC calendar month, YYYY-MM.
    • period_startstringRequired
      Start of the month in UTC (inclusive), such as 2026-10-01T00:00:00+00:00.
    • period_endstringRequired
      Start of the next month in UTC (exclusive).
    • billable_fromstringRequired
      When 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_kwhstringRequired
      kWh 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.
    • transactionsintegerRequired
      Number of those charging sessions (transactions).
    • billable_kwhstringRequired
      The part of energy_kwh that ended at or after billable_from: what the invoice bills.
    • billable_transactionsintegerRequired
    • held_transactionsintegerRequired
      Billable 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.
    • invoicedbooleanRequired
      False when this usage is not invoiced: see not_invoiced_reason; estimated_minor is then 0.
    • not_invoiced_reasonenum | nullRequired
      internal: 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_kwhstringRequired
      The project's effective rate the estimate uses.
    • usage_minorintegerRequired
      The project's invoice line so far in US cents: billable_kwh x rate_cents_per_kwh, rounded half up.
    • discount_percentintegerRequired
      The team's discount the estimate applies.
      Minimum 0 · Maximum 100
    • discount_minorintegerRequired
      usage_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_minorintegerRequired
      Estimated 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.
    • currencystring
      Default "usd"
    • as_ofstringRequired
      When 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.