Skip to content
Indiana
Dashboard
Docs
Browse docs / Preview plan attachment

Preview plan attachment

POST/api/v1/subscriptions/preview-attach

Save a quote of up to 24 hours for fixed versions and currency without creating an order or granting paid access. Reuse requestId for retries. In record-only mode, the quote's execution tells the merchant backend how to create the Stripe Checkout Session with its own Stripe key (Stripe Prices, discount, trial days, expiry and the metadata it must copy unchanged); every purchase is recorded from verified Stripe notifications. Record-only mode does not sell usage Prices billed at period end; a plan with one returns NOT_CONFIGURED. Multiple paid Stripe plans must share currency, billing interval and trial terms. seatQuantities sets each License's total seats by its License plan ID; seats above the included ones are billed through the License Price with the purchase, and a trial that needs no card cannot carry paid seats. A held offerId can be selected; the quote freezes its terms and per-plan amounts, with at most one coupon. Stripe confirms automatic tax.

API v1Updated

Make the request

Save a quote of up to 24 hours for fixed versions and currency without creating an order or granting paid access. Reuse requestId for retries. In record-only mode, the quote's execution tells the merchant backend how to create the Stripe Checkout Session with its own Stripe key (Stripe Prices, discount, trial days, expiry and the metadata it must copy unchanged); every purchase is recorded from verified Stripe notifications. Record-only mode does not sell usage Prices billed at period end; a plan with one returns NOT_CONFIGURED. Multiple paid Stripe plans must share currency, billing interval and trial terms. seatQuantities sets each License's total seats by its License plan ID; seats above the included ones are billed through the License Price with the purchase, and a trial that needs no card cannot carry paid seats. A held offerId can be selected; the quote freezes its terms and per-plan amounts, with at most one coupon. Stripe confirms automatic tax.

Credential
Server API key or customer token. Customer calls cannot select another customer.
Permission
billing:read
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.
request.shShell
curl -X POST "$INDIANA_BASE_URL/api/v1/subscriptions/preview-attach" \  -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 '{  "requestId": "00000000-0000-4000-8000-000000000001",  "plans": [    {      "productVersionId": "00000000-0000-4000-8000-000000000001"    }  ],  "provider": "stripe",  "currency": "USD"}'

The response is illustrative, not the result of a live request.

Request parameters

JSON body

requestIduuidRequired

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

invoiceModeobjectOptional

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

Show child fields
enabledbooleanRequired

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

enable_plan_immediatelybooleanOptional

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

default: false

finalizebooleanOptional

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

default: true

invoice_template_idstringOptional

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

net_terms_daysintegerOptional

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

max: 9007199254740991

entityIduuidOptional

Entity ID within the current customer scope, for configured entity and license features.

billingSubscriptionIduuidOptional

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

newBillingSubscriptiontrueOptional

Stripe only: true forces a new billing subscription and cannot be combined with billingSubscriptionId. Cross-provider main-plan exclusivity still applies.

offerIduuidOptional

ID of an offer claimed by this customer; mutually exclusive with promotionCode.

nativeOfferobjectOptional

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

Show child fields
offerKindenumRequired

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

Show allowed values

"none""introductory""promotional"

offerIdstring | nullRequired

ID of an offer claimed by this customer; mutually exclusive with promotionCode.

discountMinorintegerRequired

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

min: 0 · max: 100000000

trialDaysinteger | nullRequired

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

plansarrayRequired

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

minItems: 1 · maxItems: 20

Show child fields
productVersionIduuidRequired

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

seatQuantitiesobjectOptional

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

featureQuantitiesobjectOptional

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

providerenumRequired

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

Show allowed values

"stripe""apple""google"

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"

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"

quoteobjectRequired

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

Show child fields
operationIduuidRequired

Business operation UUID. Subscription execution references operationId from previewAttach; balance refunds reference the original consumption.

entityIduuid | nullRequired

Entity ID within the current customer scope, for configured entity and license features.

billingSubscriptionIduuid | nullRequired

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

discountobject | nullRequired

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

Show child fields
offerIduuidRequired

ID of an offer claimed by this customer; mutually exclusive with promotionCode.

couponIduuidRequired

Coupon UUID in the current App and environment.

discountobject | objectRequired

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

Show child fields
type"percent" | "amount"Required

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

percentOffintegerOptional

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

min: 1 · max: 100

amountOffCentsintegerOptional

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

min: 1 · max: 100000000

currencyenumOptional

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"

durationobject | object | objectRequired

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

Show child fields
type"once" | "repeating" | "forever"Required

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

monthsintegerOptional

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

min: 1 · max: 36

amountMinorintegerRequired

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

min: 0 · max: 100000000

allocationsarrayRequired

Balance allocations involved in this evaluation or ledger operation.

minItems: 1 · maxItems: 20

Show child fields
productVersionIduuidRequired

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

amountMinorintegerRequired

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

min: 0 · max: 100000000

expiresAtdate-timeRequired

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

chargeobject | nullRequired

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

Show child fields
effectiveAtdate-timeRequired

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

periodEndsAtdate-timeRequired

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

debitMinorintegerRequired

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

min: 0 · max: 100000000

discountMinorintegerRequired

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

min: 0 · max: 100000000

taxMinorintegerRequired

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

min: 0 · max: 100000000

totalMinorintegerRequired

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

min: 0 · max: 100000000

expiresAtdate-timeRequired

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

providerenumRequired

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

Show allowed values

"stripe""apple""google"

nativeOfferobjectOptional

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

Show child fields
offerKindenumRequired

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

Show allowed values

"none""introductory""promotional"

offerIdstring | nullRequired

ID of an offer claimed by this customer; mutually exclusive with promotionCode.

discountMinorintegerRequired

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

min: 0 · max: 100000000

trialDaysinteger | nullRequired

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

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"

linesarrayRequired

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

minItems: 1 · maxItems: 20

Show child fields
lineIduuidRequired

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

productVersionIduuidRequired

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

productNamestringRequired

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

minLength: 1 · maxLength: 80

intervalenumRequired

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

Show allowed values

"free""week""month""year""one_time"

intervalCountintegerOptional

Charging interval count: up to 156 weeks, 36 months or 3 years; omitted means 1. Not accepted for free or one_time. Allowance resets remain independent.

min: 1 · max: 156

baseAmountMinorintegerRequired

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

min: 0 · max: 100000000

seatsarrayRequired

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

maxItems: 20

Show child fields
keystringRequired

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

minLength: 1 · maxLength: 64 · pattern: ^[a-z][a-z0-9_]*$

quantityintegerRequired

Use the declared field type for business quantity. Credit operations use decimal strings to avoid floating-point error. quote/reserve/confirm/refund require positive quantities; consume can record zero-cost events.

min: 0 · max: 10000

includedQuantityintegerRequired

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

min: 0 · max: 10000

maximumQuantityintegerRequired

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

min: 0 · max: 10000

unitAmountMinorintegerRequired

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

min: 0 · max: 100000000

prepaidarrayOptional

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

maxItems: 100

Show child fields
itemKeystringRequired

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

pattern: ^paid:feature:[a-f0-9]{8}-[a-f0-9]{4}-[1-8][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$

internal_feature_iduuidRequired

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

includedAmountstringRequired

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

pattern: ^(0|[1-9]\d{0,11})(\.\d{1,6})?$

quantityintegerRequired

Use the declared field type for business quantity. Credit operations use decimal strings to avoid floating-point error. quote/reserve/confirm/refund require positive quantities; consume can record zero-cost events.

min: 0 · max: 10000

termsobjectRequired

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

pricingobjectOptional

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

unitAmountMinorintegerRequired

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

min: 0 · max: 100000000

productIdstring | nullRequired

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

priceIdstring | nullRequired

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

catalogAmountMinorintegerRequired

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

min: 0 · max: 100000000

trialobject | nullRequired

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

Show child fields
daysintegerRequired

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

min: 1 · max: 730

cardRequiredbooleanRequired

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

catalogAmountMinorintegerRequired

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

min: 0 · max: 100000000

automaticTaxbooleanRequired

The automaticTax 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
invoiceModeobjectOptional

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

Show child fields
enabledbooleanRequired

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

enable_plan_immediatelybooleanRequired

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

default: false

finalizebooleanRequired

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

default: true

invoice_template_idstringOptional

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

net_terms_daysintegerOptional

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

max: 9007199254740991

appendobjectOptional

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

Show child fields
subscriptionIdstringRequired

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

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

customerIdstringRequired

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

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

sourceItemsarrayRequired

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

minItems: 1 · maxItems: 100

prorationDateintegerRequired

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

min: 0 · max: 9007199254740991

amountMinorintegerRequired

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

max: 9007199254740991

periodStartMsnumberRequired

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

periodEndMsnumberRequired

The periodEndMs 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.

executorenumRequired

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

Show allowed values

"indiana""merchant"

accountIdstringRequired

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

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

modeenumRequired

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

Show allowed values

"payment""subscription"

lineItemsarrayRequired

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

minItems: 1 · maxItems: 100

Show child fields
pricestring | nullRequired

Price in the requested or existing billing currency; null when unavailable, without currency substitution.

quantityintegerRequired

Use the declared field type for business quantity. Credit operations use decimal strings to avoid floating-point error. quote/reserve/confirm/refund require positive quantities; consume can record zero-cost events.

min: 1 · max: 10000

priceIduuidRequired

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

productNamestringRequired

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

minLength: 1 · maxLength: 80

amountMinorintegerRequired

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

min: 0 · max: 100000000

currencystringRequired

Currency code supported by the published price.

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

intervalenumRequired

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

Show allowed values

"week""month""year""one_off"

intervalCountintegerRequired

Charging interval count: up to 156 weeks, 36 months or 3 years; omitted means 1. Not accepted for free or one_time. Allowance resets remain independent.

min: 1 · max: 52

slotenumRequired

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

Show allowed values

"stripe_price_id""stripe_empty_price_id"

tiersobject | nullRequired

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

discountsarrayRequired

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

maxItems: 1

Show child fields
couponstringRequired

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

pattern: ^[A-Za-z0-9_-]{1,200}$

termsobjectRequired

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

trialPeriodDaysinteger | nullRequired

The trialPeriodDays 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
grooveCheckoutIduuidRequired

The grooveCheckoutId 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.

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