Start adding or replacing the team's payment method

post/v1/teams/{team_id}/billing/payment-method/setup
Requires an API key

The team's owners, admins and billing members, and Ivora administrators; API keys are refused. Returns a Stripe-hosted setup page on Ivora's own Stripe account that saves a card for the team without charging it, returning to the Platform's billing page (server-selected). Call .../payment-method/sync afterwards. A card saved there replaces the team's current one for every project.

Path parameters

  • team_idstringRequired
    Pattern ^team_[0-9a-f]{32}$

Returns · 200

  • urlstringRequired
    Stripe-hosted page that saves a card for the team without charging it; open it now.
  • expires_atinteger | null
    Unix time the setup page expires.
  • billingTeamBillingRecordRequired
    A team's billing account as its owners, admins and billing members see it.
    Child attributes
    • idstringRequired
      The team ID (team_...), as in GET /v1/me/teams.
    • namestringRequired
    • rate_cents_per_kwhstringRequired
      The team's default usage fee in US cents per kWh, a decimal string (default 1.00).
    • currencystring
      Default "usd"
    • invoicingstring
      Default "monthly"
    • statusenumRequired
      As a project's billing profile shows it (the bench exemption is per project and not shown here).
      One of active, grace, past_due, payment_method_required, waived, exempt, discounted, enterprise, suspended
    • csms_setup_allowedbooleanRequired
      Whether new CSMS setup and control are allowed in the team's projects.
    • waivedbooleanRequired
    • 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
    • exemptstring | null
      internal: an Ivora internal team, exempt from the requirement.
    • grace_ends_atstring | null
    • past_due_sincestring | null
    • 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.
      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
      • po_numberstring | null
      • billing_emailsarray of string
        Billing contacts; Stripe sends the invoice to the first.
      • legal_namestring | null
    • 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
    • bank_transferobject | null
      enterprise (usd) only: where to send an ACH credit or wire; null until the first enterprise invoice or Ivora set the mode.
      Child attributes
      • currencystring
        Default "usd"
      • typestring
        Default "us_bank_transfer"
      • financial_addressesarray of BankTransferAddressRequired
        The team's own virtual account at Stripe: an ACH credit or wire to it pays the team's open invoices.
        Child attributes
        • typestringRequired
          aba (ACH credit and domestic wire) or swift (international wire).
        • bank_namestring | null
        • account_numberstring | null
        • routing_numberstring | null
        • swift_codestring | null
        • account_holder_namestring | null
    • setup_pendingbooleanRequired
    • payment_modeenumRequired
      Stripe mode of Ivora's platform account here; only production is live.
      One of test, live
    • updated_atstring | null
    • projectsarray of TeamBillingProjectRequired
      Every project of the team, by tenant ID; one invoice per team per month with a line per project.
      Child attributes
      • tenant_idintegerRequired
        The project's tenant ID.
      • namestring | null
        The tenant's name in the charging core; null when the core did not answer.
      • rate_cents_per_kwhstringRequired
        The project's effective rate: its override, else the team's.
      • rate_sourceenumRequired
        One of team, project
      • 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/teams/{team_id}/billing/payment-method/setup
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/teams/team_0123456789abcdef0123456789abcdef/billing/payment-method/setup" \
  -H "Authorization: Bearer $IVORA_API_KEY"
Response · 200
{
  "url": "https://app.example.com/ivora/webhooks",
  "expires_at": 1,
  "billing": {
    "id": "id_0123456789abcdef",
    "name": "bay-01",
    "rate_cents_per_kwh": "string",
    "currency": "usd",
    "invoicing": "monthly",
    "status": "active",
    "csms_setup_allowed": false,
    "waived": false,
    "discount_percent": 0,
    "exempt": "internal",
    "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",
      "po_number": "string",
      "billing_emails": [
        "string"
      ],
      "legal_name": "string"
    },
    "bank_account": {
      "type": "us_bank_account",
      "bank_name": "string",
      "last4": "string",
      "status": "verified"
    },
    "bank_transfer": {
      "currency": "usd",
      "type": "us_bank_transfer",
      "financial_addresses": [
        {
          "type": "string",
          "bank_name": "string",
          "account_number": "string",
          "routing_number": "string",
          "swift_code": "string",
          "account_holder_name": "string"
        }
      ]
    },
    "setup_pending": false,
    "payment_mode": "test",
    "updated_at": "2026-09-30T17:00:00Z",
    "projects": [
      {
        "tenant_id": 1042,
        "name": "bay-01",
        "rate_cents_per_kwh": "string",
        "rate_source": "team",
        "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.