Skip to content
Indiana
Dashboard
Docs
Browse docs / Set up a payment method

Set up a payment method

POST/api/v1/billing/setup-payment

Save the customer's card (Stripe Sandbox, setup mode). When Indiana runs payments it returns the Stripe Checkout url; when your backend runs them (record-only) it returns execution: create the setup Checkout with your Stripe key using its currency, customer, client_reference_id, metadata and expiry, and Indiana records completion from the verified webhook. Reuse requestId to recover the same setup; makeDefault controls the default card. Collecting a card creates no subscription, entitlement or charge consent.

API v1Updated

Make the request

Save the customer's card (Stripe Sandbox, setup mode). When Indiana runs payments it returns the Stripe Checkout url; when your backend runs them (record-only) it returns execution: create the setup Checkout with your Stripe key using its currency, customer, client_reference_id, metadata and expiry, and Indiana records completion from the verified webhook. Reuse requestId to recover the same setup; makeDefault controls the default card. Collecting a card creates no subscription, entitlement or charge consent.

Credential
Server API key or customer token. Customer calls cannot select another customer.
Permission
billing:write
Set the base URL and App ID from SDK setup. These examples use placeholders and do not execute requests. Never put a server key in browser code.
For this Web Beta, configure the Stripe Sandbox test account and fixed Product Prices before checkout. Redirects do not confirm payment.
request.shShell
curl -X POST "$INDIANA_BASE_URL/api/v1/billing/setup-payment" \  -H "Authorization: Bearer $INDIANA_CUSTOMER_TOKEN" \  -H "X-Indiana-Project: $INDIANA_PROJECT_ID" \  -H "X-Indiana-Protocol: 0.5" \  -H "X-Indiana-Environment: sandbox" \  -H "Content-Type: application/json" \  -d '{  "customerId": "00000000-0000-4000-8000-000000000001",  "requestId": "00000000-0000-4000-8000-000000000001",  "currency": "USD",  "makeDefault": false}'

The response tab lists field types, not an example payload. Actual values depend on customer state.

Request parameters

JSON body

requestIduuidRequired

Business request UUID. Reuse for retries of one operation; generate a new value for a new operation.

currencyenumRequired

Currency code supported by the published price.

Show allowed values

"USD""EUR""CNY""GBP""JPY""CAD""AUD""NZD""CHF""HKD""SGD""KRW""INR""BRL""MXN""TWD""THB""IDR""MYR""PHP""VND""ZAR""AED""SAR""SEK""NOK""DKK""PLN""CZK""HUF""ILS""TRY""RON"

makeDefaultbooleanRequired

The makeDefault value for this operation. Its accepted type and constraints are listed above and below.

customerIduuidOptional

Indiana customer ID mapped from a verified identity on the server. Omit for customer-token calls, which use the token-bound customer.

Response fields

Successful responses include requestId and scope. Use the actual business status or accepted field to determine the result. Optional fields are omitted when unavailable.

HTTP 200 · application/json

requestIduuidRequired

Server-generated HTTP request UUID. Include it when reporting a failed request.

scopeobjectRequired

The App and environment of this response. Headers only verify scope; they cannot switch key scope.

Show child fields
projectIdstringRequired

App ID bound to the credential.

minLength: 1

environmentenumRequired

Separate data scope: sandbox or live.

Show allowed values

"sandbox""live"

setupobjectRequired

The setup value for this operation. Its accepted type and constraints are listed above and below.

Show child fields
iduuidRequired

The id value for this operation. Its accepted type and constraints are listed above and below.

provider"stripe"Required

The provider value for this operation. Its accepted type and constraints are listed above and below.

statusenumRequired

The status value for this operation. Its accepted type and constraints are listed above and below.

Show allowed values

"prepared""complete""expired"

currencyenumRequired

Currency code supported by the published price.

Show allowed values

"USD""EUR""CNY""GBP""JPY""CAD""AUD""NZD""CHF""HKD""SGD""KRW""INR""BRL""MXN""TWD""THB""IDR""MYR""PHP""VND""ZAR""AED""SAR""SEK""NOK""DKK""PLN""CZK""HUF""ILS""TRY""RON"

makeDefaultbooleanRequired

The makeDefault value for this operation. Its accepted type and constraints are listed above and below.

urluri | nullRequired

Hosted checkout URL. Verified provider notifications confirm payment.

createdAtdate-timeRequired

ISO 8601 UTC time when the record was created.

expiresAtdate-timeRequired

ISO 8601 UTC expiry. Expired sessions and reservations cannot be reused.

completedAtdate-time | nullRequired

The completedAt value for this operation. Its accepted type and constraints are listed above and below.

executionobject | nullRequired

The execution value for this operation. Its accepted type and constraints are listed above and below.

Show child fields
provider"stripe"Required

The provider value for this operation. Its accepted type and constraints are listed above and below.

executor"merchant"Required

The executor value for this operation. Its accepted type and constraints are listed above and below.

accountIdstringRequired

The accountId value for this operation. Its accepted type and constraints are listed above and below.

pattern: ^acct_[A-Za-z0-9]+$

mode"setup"Required

The mode value for this operation. Its accepted type and constraints are listed above and below.

currencystringRequired

Currency code supported by the published price.

pattern: ^[a-z]{3}$

customerstring | nullRequired

Customer profile object.

clientReferenceIduuidRequired

The clientReferenceId value for this operation. Its accepted type and constraints are listed above and below.

metadataobjectRequired

The metadata value for this operation. Its accepted type and constraints are listed above and below.

Show child fields
grooveProjectIduuidRequired

The grooveProjectId value for this operation. Its accepted type and constraints are listed above and below.

grooveEnvironmentIduuidRequired

The grooveEnvironmentId value for this operation. Its accepted type and constraints are listed above and below.

grooveCustomerIduuidRequired

The grooveCustomerId value for this operation. Its accepted type and constraints are listed above and below.

groovePaymentSetupIduuidRequired

The groovePaymentSetupId value for this operation. Its accepted type and constraints are listed above and below.

setDefaultPaymentMethodbooleanRequired

The setDefaultPaymentMethod value for this operation. Its accepted type and constraints are listed above and below.

expiresAtdate-timeRequired

ISO 8601 UTC expiry. Expired sessions and reservations cannot be reused.

Handle errors

Common failures
CodeRecovery
UNAUTHENTICATEDVerify the key or refresh the expired customer token once.
FORBIDDENCheck current key permissions and customer access.
INVALID_REQUESTCheck field types, UUIDs, decimal strings and mutually exclusive fields.
SCOPE_MISMATCHUse the App and environment bound to the credential.

Common failures

  • UNAUTHENTICATED

    Recovery
    Verify the key or refresh the expired customer token once.
  • FORBIDDEN

    Recovery
    Check current key permissions and customer access.
  • INVALID_REQUEST

    Recovery
    Check field types, UUIDs, decimal strings and mutually exclusive fields.
  • SCOPE_MISMATCH

    Recovery
    Use the App and environment bound to the credential.

Related:All request and error conventions·Back to endpoint index