Framework guide

Expo purchase verification

Verify Google Play and Apple purchases from Expo apps — server-side, via REST API. Use any IAP library; Tierux handles verification from your backend.

1

Pick an IAP library for your Expo app

Tierux is IAP-library agnostic. Use react-native-iap with a dev client or EAS Build — any library that gives you a purchase token. Tierux handles verification server-side.

// Install react-native-iap (with dev client / EAS Build)
npx expo install react-native-iap

// Then rebuild with:
npx expo run:android  # or run:ios
2

Capture the purchase and send to your backend

After a successful purchase, send the token or transaction data to your backend for server-side verification. The client never holds your API key.

// In your Expo app
import RNIap, { PurchaseError } from 'react-native-iap';

// After purchase completes, send token to your backend
const handlePurchase = async (purchase: Purchase) => {
  const result = await fetch('https://your-api.com/verify', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      platform: Platform.OS,
      purchaseToken: purchase.transactionReceipt,
      productId: purchase.productId,
      packageName: 'com.yourapp',
    }),
  });
  await RNIap.finishTransaction({ purchase, isConsumable: false });
  return result.json();
};
3

Verify from your backend

Your backend calls Tierux's REST API. Any backend works — Node, Python, Go, or even Edge Functions.

// Your backend (Node.js example)
app.post('/verify', async (req, res) => {
  const { platform, purchaseToken, productId, userId } = req.body;

  const endpoint = platform === 'android'
    ? '/v1/purchases/google-play/verify'
    : '/v1/purchases/apple/verify';

  const verification = await fetch(
    `https://tierux.com/api${endpoint}`,
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        appId: 'app_123',
        userId,
        packageName: 'com.yourapp',
        productId,
        purchaseToken,
      }),
    }
  );

  const data = await verification.json();
  res.json({ active: data.active, entitlement: data.entitlement });
});
4

Gate features in your Expo app

Your backend returns the entitlement state. Use it in your Expo app to conditionally render premium features.

// In your Expo app — gate premium features
const { active, entitlement } = await result.json();

if (active) {
  // Show premium content
  return ;
}

// Show paywall or limited content
return ;
Related guides

Purchase verification

Deep dive on how Tierux verifies tokens server-side for Google Play and Apple.

React Native verification

Similar REST-first pattern — verify purchases from any React Native app.

Quickstart docs

Full integration path with curl examples and language-agnostic endpoints.

Verify Expo purchases server-side

Free tier — unlimited apps, 1 paywall. No credit card, no revenue share.

Start free