Skip to content

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:

ScopePurpose
commerce.order_payment.catalog.readRead the approved one-time offer
commerce.order_payment.order.readRead original orders and payment state
commerce.order_payment.checkout.createAccept 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 ​

  1. Read GET /open-platform/v1/order-payment-offers. Display the approved offer's price and terms, and retain its id, resource_version and terms_sha256.

  2. After the user accepts those terms, call POST /open-platform/v1/order-payment-orders with the original Idempotency-Key and 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>"
    }
  3. Retain the returned original order id. Acceptance does not initiate payment. Call POST /open-platform/v1/order-payment-orders/{id}:checkout with the original key and {} to create or recover that order's payment. Redirect only when a valid checkout.checkout_url is returned.

  4. After returning, call GET /open-platform/v1/order-payment-orders/{id} and use its status. 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.

StatusAction
403Check suspended capabilities, revoked consent, and whether product/environment are approved
429The 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.

Developer documentation. Internal operations access is not required.