Independent order payment
Independent order payment supports one-time product purchases. This guide covers offer queries, order creation, payment pages, and recovery of the original order's payment.
Prerequisites
Development configuration and testing do not require manual review. Delivered operations features are available in your own application scope. Configure one-time products only when needed; they are not required for login, API, or event testing.
In Developer Console, open the current application's Commerce → Billing and fulfillment page. Select the one-time product and its approved offer, then save for automatic validation. The offer pins a product, price and terms revision. Customer payer eligibility is approved separately; application management or company directory access does not authorize customer payments.
API permissions
Sign in using the application's user OAuth profile and request the independent payment API scopes:
| Scope | Purpose |
|---|---|
commerce.order_payment.catalog.read | Read the approved one-time offer |
commerce.order_payment.order.read | Read original orders and payment state |
commerce.order_payment.checkout.create | Accept an offer and recover original checkout |
When the API permission configuration is ready, obtain the current person's consent for resource type order_payment_product, with the product's Product Code as resource ID. Consent for Token products cannot authorize these operations. A service identity cannot replace the user.
Send the user Bearer and exactly one value for each selection header: X-GV-Organization-ID, X-GV-Application-ID, X-GV-Environment, X-GV-API-Product-ID, X-GV-Delegated-Grant-ID and X-GV-Product-Code. Use the public GOODVISION_API_BASE configuration. Select sandbox|production explicitly; the platform derives the Client and binding.
Create an order and payment
Read
GET /open-platform/v1/order-payment-offers. Display the approved offer's price and terms, and retain itsid,resource_versionandterms_sha256.After the user accepts those terms, call
POST /open-platform/v1/order-payment-orderswith the originalIdempotency-Keyand body below. The platform calculates the amount. The request body cannot supply an amount, financial account or environment.json{ "offer_id": "<approved offer ID>", "offer_version": 3, "quantity": 2, "accepted_terms_sha256": "<SHA256 of the accepted terms>" }Retain the returned original order
id. Acceptance does not initiate payment. CallPOST /open-platform/v1/order-payment-orders/{id}:checkoutwith the original key and{}to create or recover that order's payment. Redirect only when a validcheckout.checkout_urlis returned.After returning, call
GET /open-platform/v1/order-payment-orders/{id}and use itsstatus. A redirect or a hosted page success message does not confirm a paid order.
Errors and recovery
After a timeout or 503, keep the original order, body and key. Recover that order's payment using the same request. Do not change keys to create another payment.
Orders without a checkout have a 30-minute recovery window. If expiry, cancellation or an unknown result returns 409, query the original order and contact support.
Offer withdrawal and price changes preserve the original purchase conditions. Every request still checks application capability, user consent and customer payment eligibility.
| Status | Action |
|---|---|
403 | Check suspended capabilities, revoked consent, and whether product/environment are approved |
429 | The subscription's minute quota is exhausted; wait for Retry-After |
Independent payment handles one-time orders. Use separately enabled APIs for subscriptions, Token allowance and product access.
See User authorization for the complete grant parameters and recovery rules.