After setting up your product and plans in the dashboard, you can bring them into your app using the ParityDeals SDKs and UI components.
Note: In this guide we use the Node SDK and React SDK as examples.
Other SDKs like Python, JavaScript, are also available — the steps are the same.

1. Create a customer (optional)

Typically, you create a customer record when someone signs up in your app. When they subscribe in Stripe, ParityDeals maps that subscription to the customer record automatically. This is optional, but creating a customer in ParityDeals makes it easy to track subscriptions and usage in the dashboard.

Install the Node SDK

npm install @paritydeals/node-sdk
import { ParityDeals } from "@paritydeals/node-sdk";

// API keys are under Settings → Developers in the dashboard
const client = new ParityDeals({
  accessToken: process.env.PARITYDEALS_SERVER_API_KEY!,
});

// Create a customer on signup
const newCustomer = await client.customers.create({
  customerId: "unique-customer-001",
  email: "customer@example.com",
  name: "Node SDK User",
});

2. Pricing table and offerings

You can build your own checkout flow, or you can use the prebuilt Pricing Table. The Pricing Table reflects changes from the dashboard automatically.

Create a Pricing Table

  1. In the dashboard, go to Monetization → Pricing tables
  2. Click Create pricing table
  3. Give it a name and link it to your product
  4. Customize if needed, then Save

Create an Offering

An Offering bundles a Pricing Table with rules. Any updates in the dashboard are reflected instantly in your app without code changes.
  1. In the dashboard, go to Monetization → Offerings
  2. Click Create offering
  3. Select a Pricing Table and give it a name
  4. Click Create

3. Embed the Pricing Table in your app

Install the React UI SDK:
npm install @paritydeals/react-ui
Wrap your app with the provider:
import { ParityDealsProvider, PDPricingTable } from '@paritydeals/react-ui';
import '@paritydeals/react-ui/dist/pd-react-ui.css';

export default function App() {
  return (
    <ParityDealsProvider
      accessToken="YOUR_ACCESS_TOKEN"    // from dashboard → settings → developers
      offeringId="YOUR_OFFERING_ID"      // from dashboard → offerings
      customerId="unique-customer-001"   // required when embedding in-app, links existing subscriptions
    >
      <PDPricingTable />
      <OtherComponents />
    </ParityDealsProvider>
  );
}
✅ Passing customerId is required if you embed the Pricing Table inside your app. This ensures existing subscriptions are recognized, and upgrades/downgrades work correctly for that user.

4. Check feature access

Once a customer subscribes, their entitlements are available in the SDK. You can check feature access in the frontend (React SDK) or backend (Node SDK). In all examples we’ll keep using the same customer ID: unique-customer-001.

React: show or hide UI based on entitlements

import { ShowWhenBooleanEntitled } from '@paritydeals/react-sdk';

<ShowWhenBooleanEntitled
  featureKey="enable-dark-mode"
  loadingComponent={<p>Checking…</p>}
  fallback={<p>Dark mode not available</p>}
>
  <button>Toggle Dark Mode</button>
</ShowWhenBooleanEntitled>

React: read all entitlements

import { useAllEntitlements } from '@paritydeals/react-sdk';

function EntitlementsList() {
  const { data: entitlements } = useAllEntitlements();

  return (
    <ul>
      {Object.values(entitlements).map(ent => (
        <li key={ent.featureKey}>
          {ent.featureKey}: {ent.hasAccess ? 'Enabled' : 'Disabled'} ({ent.type})
        </li>
      ))}
    </ul>
  );
}

Backend check with Node

const ent = await client.entitlements.get({
  customerId: "unique-customer-001",
  featureKey: "max_upload_size_mb",
});

if (file.sizeMB > ent.value) {
  throw new Error("Upgrade required");
}

5. Report usage (metered features)

For metered features (like API calls, tokens, or seats), send usage events from your backend.
import { BEHAVIOUR_CHOICES } from '@paritydeals/node-sdk';

await client.reporting.reportUsage({
  customerId: "unique-customer-001",
  featureId: "api_calls",
  value: 1,
  behaviour: BEHAVIOUR_CHOICES.INCREMENT, // or SET
});

Need help?

Have questions, need help with implementation, or want a walkthrough?
Email us at hi@paritydeals.com or book a demo.