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.

Frequently asked questions

How do I verify purchases from an Expo app with Tierux?
Use react-native-iap (with EAS Build or dev client) to get the purchase token from Google Play or the StoreKit transaction from Apple, then POST it to your backend — which calls Tierux's REST API to verify server-side. Your API key stays on your backend, never in the Expo app bundle.
Does Tierux work with Expo managed workflow?
Yes — since Tierux verifies purchases server-side, there's no native module to link. Your Expo app sends the purchase token to your backend over HTTPS, and your backend calls Tierux's REST API. No native build step required for the verification layer.
Can I use Tierux with Expo EAS Build?
Yes. EAS Build handles the native IAP plugin compilation. Tierux's verification layer is purely server-side — your built Expo binary never touches a Tierux API key, keeping your secrets safe regardless of your build pipeline.

Verify Expo purchases server-side

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

Start free