Skip to main content

Shopify

Podium syncs products and orders with Shopify stores via OAuth and webhooks.

OAuth Installation

1

Initiate OAuth

Redirect the merchant to the Shopify install endpoint:
This generates a Shopify OAuth authorization URL with the required scopes.
2

Authorize

Shopify redirects the merchant to grant permissions. Required scopes:
  • read_products, write_products
  • read_orders, write_orders
  • read_inventory
3

Callback

Shopify redirects to /api/v1/shopify/callback with an access token. Podium stores the token in a ShopifyStore record linked to the creator.
4

Initial sync

After OAuth completes, trigger an initial product sync:
This dispatches a shopify-products-sync event that fetches all products from the Shopify store in the background.

Synced Data Mapping

Product data flows from Shopify into Podium. Order data flows from Podium back to Shopify via the shopify-order-push event.

Webhook Events

Shopify sends webhooks to POST /webhooks/shopify with the X-Shopify-Topic header:

Webhook Verification

Troubleshooting

Stripe Connect

Creators receive payouts through Stripe Connect Express accounts.

Setup Flow

1

Create Stripe account

Creates a Stripe Express account and returns an onboarding URL.
2

Complete onboarding

Redirect the creator to the Stripe onboarding URL. They’ll complete identity verification and bank account setup directly with Stripe.
3

Account activation

Stripe sends an account.updated webhook when onboarding is complete. Podium updates the StripeAccount status to active.

Platform Fee Configuration

Podium takes a platform application fee on every transaction:
The fee is applied when creating the Stripe PaymentIntent:

Payout Flow

  1. Customer pays → Stripe PaymentIntent succeeds
  2. Platform fee deducted automatically
  3. CreatorPayout record created with PENDING status
  4. After hold period → status changes to ELIGIBLE
  5. payouts-sweep cron transfers eligible payouts to creator’s Connect account
  6. transfer.created webhook confirms → status updates to TRANSFERRED

Onboarding Reminders

If a creator doesn’t complete Stripe onboarding within 48 hours, the stripe-onboarding-reminder cron sends an email reminder. The reminder tracks:
  • stripeOnboardingReminderSentAt — when the last reminder was sent
  • stripeOnboardingReminderClaimedUntil — suppresses reminders until this date

Troubleshooting

Privy Wallets

Privy provides embedded wallet infrastructure for both server-side automation and client-side user wallets.

Environment Variables

Server Wallets (Backend / Agents)

Server wallets are platform-managed — your backend controls signing. Used for automated x402 payments, reward minting, and agent-initiated transfers.

Embedded Wallets (Frontend)

Embedded wallets are auto-created for end users on first login, giving them a non-custodial wallet without seed phrase management.

User Linking

Privy users are linked to Podium users via the PrivyUser model: Resolve the link with:

Funding Embedded Wallets

Users can fund their embedded wallets via:
  • Apple Pay / Google Pay (through Privy’s fiat on-ramp)
  • Coinbase transfer
  • Direct USDC transfer from any wallet
  • Points-to-USDC conversion (if enabled)

Troubleshooting

Stream Chat

Podium integrates Stream Chat for real-time messaging between users and creators.

Environment Variables

Setup

1

Generate tokens

Server generates Stream Chat tokens:
or for creator-initiated chats:
2

Client connection

Connect using the Stream Chat SDK with the generated token:
3

Channel creation

Channels are created per user-creator pair. The server creates and manages channels to enforce access control.

Request Body

Shippo Shipping

Podium uses Shippo for shipping rate calculation and label generation.

OAuth Installation

1

Initiate OAuth

2

Callback

Shippo redirects to /api/v1/shippo/callback with an access token. Stored in ShippoAccount linked to the creator.

Get Shipping Quotes

Provide the recipient’s shipping address in the request body to receive available shipping rates from Shippo based on the order’s weight, dimensions, and destination:

Generate Shipping Label

Retrieves the shipping label for an order via Shippo. Returns the label URL and tracking number.

Flat Rate Fallback

Creators can set a flatShippingRate (in cents) on their profile as a default when Shippo quotes aren’t available or desired:

Troubleshooting