Confirm payment completion
Step 2A: Confirms and completes a pending purchase that was previously registered. IMPORTANT: Expects HTTP error status (3xx, 4xx, 5xx) codes for failed purchases.
Versioned HMAC-SHA256 signature for server-to-server communication between game backends and Stash services. Recommended over the deprecated legacyHmac scheme for the best security. Header format: v1;{shopId};{unixMillisTimestamp};{base64Signature} (semicolon-delimited). {base64Signature} is the base64-encoded HMAC-SHA256 of the string {unixMillisTimestamp}.{requestBody} signed with your Egress API key, where {requestBody} is the compact request JSON. The timestamp must be within 5 minutes of Stash server time. Your shopId is your immutable shop identifier; it and your Egress API key are available in Stash Studio under Project Settings > API Secrets.
In: header
Request to confirm and complete a pending purchase that was previously registered.
The user confirming the purchase
Transaction identifier to confirm
Optional checkout link identifier if purchase was made through a checkout link
The originating Stash shop identifier (mirrors the shopId sent in webhooks)
Payment environment for the request
"PAYMENT_ENVIRONMENT_UNSPECIFIED""PAYMENT_ENVIRONMENT_UNSPECIFIED" | "PAYMENT_ENVIRONMENT_TEST" | "PAYMENT_ENVIRONMENT_PRODUCTION"Currency code (ISO-4217 code, e.g., 'USD', 'EUR')
CLDR fraction-digit count for this ISO 4217 currency; applies to tax, total, and line-item minor units. Value comes from public CLDR supplemental data for this currency code. Always sent, including the literal 0 for zero-decimal currencies (e.g. JPY, KRW).
int64Tax as integer minor units per CLDR for this ISO 4217 currency (e.g. 99 for $0.99 in USD; can be 0)
int64Total including tax, as integer minor units per CLDR for this ISO 4217 currency (e.g. 1098 for $10.98 in USD)
int64Timestamp when the purchase was completed (milliseconds since Unix epoch)
int64Payment method used for this purchase (e.g., card, Apple Pay, Google Pay)
"PAYMENT_METHOD_TYPE_UNSPECIFIED""PAYMENT_METHOD_TYPE_UNSPECIFIED" | "PAYMENT_METHOD_TYPE_CARD" | "PAYMENT_METHOD_TYPE_APPLE_PAY" | "PAYMENT_METHOD_TYPE_GOOGLE_PAY" | "PAYMENT_METHOD_TYPE_PAYPAL" | "PAYMENT_METHOD_TYPE_KLARNA"List of items in this purchase
Platform making the purchase
"PURCHASE_PLATFORM_UNSPECIFIED""PURCHASE_PLATFORM_UNSPECIFIED" | "PURCHASE_PLATFORM_IOS" | "PURCHASE_PLATFORM_ANDROID" | "PURCHASE_PLATFORM_WEBSTORE"Browser information for web purchases (e.g., 'Chrome/91.0', 'Firefox/89.0', 'Safari/14.1', 'any')
Device identifier for tracking and fraud prevention (can be generated client-side)
Source of the purchase for analytics
"PURCHASE_SOURCE_UNSPECIFIED""PURCHASE_SOURCE_UNSPECIFIED" | "PURCHASE_SOURCE_CART" | "PURCHASE_SOURCE_DIRECT" | "PURCHASE_SOURCE_BUY_NOW"Customer IP address for fraud prevention and compliance
Region/country code using ISO-3166-1 alpha-2 code (e.g., 'US', 'CA', 'GB')
Customer email for the purchase
Optional flag indicating if customer opted in to email marketing
Optional list of bonus items to be granted with the purchase
Response Body
curl -X POST "https://loading/api/v1/purchase/confirm" \ -H "Content-Type: application/json" \ -d '{ "playerId": "string", "transactionId": "string", "currency": "string", "decimalPlaces": 0, "tax": 0, "total": 0, "timeMillis": "string", "items": [ { "guid": "string", "productId": "string", "quantity": 0, "cents": 0 } ] }'{
"results": [
{
"guid": "string",
"productId": "string"
}
]
}{
"code": 0,
"message": "string",
"details": [
{
"@type": "string",
"property1": null,
"property2": null
}
]
}How is this guide?
Cancel pending payment POST
Step 2B: Cancels a pending purchase that was previously registered. IMPORTANT: Always expects HTTP 200 OK response with inline error codes in the body.
Register payment intent POST
Step 1: Registers a purchase intent with the game backend. The game backend is expected to reserve inventory for the purchase. IMPORTANT: Always expects HTTP 200 OK response with inline error codes in the body.