Skip to main content
Orders capture purchase transactions from creation through fulfillment. Podium supports four checkout methods, each suited to different use cases — from traditional card payments to fully autonomous agent transactions.

Choosing a Checkout Method


Order Lifecycle

Create an Order

Orders start as OPEN and can have products added to them. Creating an order with a product in a single call:
Response:

Get Open Order

Retrieve the current open order for a user (only one open order at a time):

Add Product to Order

Remove Item from Order


Order Status Flow


Stripe Checkout

The most common flow for consumer-facing applications. Creates a Stripe PaymentIntent and returns a clientSecret for completing payment on the frontend.
Request Body: Response:

How It Works

1

Create PaymentIntent

POST /checkout creates a Stripe PaymentIntent for the order total (minus any points discount). If a PaymentIntent already exists and points haven’t changed, the existing one is reused. If points changed, the old intent is cancelled and a new one is created.
2

Complete Payment

Use the clientSecret on the frontend with Stripe.js or Stripe Elements to collect payment. The user enters their card and confirms.
3

Webhook Confirmation

Stripe sends payment_intent.succeeded to /webhooks/stripe/payment-intent/succeeded. Podium updates the order to PAID, decrements inventory, and publishes an OrderConfirmationEvent.
4

Finalize Points

If points were applied, call PUT /user/{userId}/order/{orderId}/points/finalize to commit the point spend. If the payment failed, call POST /user/{userId}/order/{orderId}/points/revert to return the points.

x402 Checkout (USDC)

Machine-native payment for autonomous agents. No authentication required — the agent pays with USDC on Base via the x402 protocol. See x402 Payments for the full protocol spec.

How It Works

1

Request Requirements

Agent calls the pay endpoint without an X-PAYMENT header. The server returns 402 Payment Required with the order amount in USDC, the payTo address, and the network (Base).
2

Sign and Send Payment

Agent constructs a USDC transfer, signs it, and re-calls the endpoint with the X-PAYMENT header containing the base64-encoded payment proof.
3

Verify and Settle

Podium decodes the payment, verifies the amount matches the order total, and confirms the on-chain transfer via the x402 facilitator. On success: creates/updates an X402Payment record, moves the order to PAID, and decrements inventory.
x402 checkout requires the organization to have x402PayToAddress configured in their settings. The payment amount is converted from the order’s cent-based total to USDC (6 decimal places).

Embedded Wallet Checkout

For automated crypto checkout using Privy server-managed wallets. The transaction is executed server-side — no user interaction required during payment.
Request Body:

How It Works

  1. Your backend initiates a USDC transfer from the user’s Privy embedded wallet
  2. After the transaction confirms on-chain, call this endpoint with the txHash
  3. Podium verifies the wallet, creates a CryptoPaymentIntent (status CONFIRMED), updates the order to PAID, and decrements inventory
  4. An OrderConfirmationEvent is published if an email is provided

Coinbase Commerce Checkout

Multi-token crypto checkout via Coinbase Commerce:

Discounts and Points

Apply Points Discount

Points are held in a pending state until finalized after payment or reverted on failure.

Apply Discount Code

Finalize Points

After successful payment, commit the point spend:

Revert Points

On payment failure, return held points to the user:

Shipping

Podium integrates with Shippo for shipping rate calculation and label generation.

Get Shipping Quote

Returns available shipping rates and updates the Stripe PaymentIntent amount to include shipping:

Generate Shipping Label

Creates a Shippo shipping label and sends a tracking email to the customer.

Guest Checkout

Anonymous buyers can place orders without creating a Podium account.

Create Guest Order

Guest Stripe Checkout

Returns a Stripe PaymentIntent clientSecret — same flow as authenticated checkout but without user context.

Guest Coinbase Checkout


Record Payment Failure

If payment fails on the client side (before webhook), notify the server:

Order Model

Endpoint Summary