RevKeen Docs
Using RevKeen

Products and Pricing

Define products, configure pricing models, and create discount codes

Products define what you sell and how you price it. RevKeen supports one-time purchases, recurring subscriptions, and usage-based billing. This page covers products, prices, and discounts.

What is a Product?

A Product represents something you sell. Products don't have prices directly attached to them. Instead, you create one or more Prices for each product, which allows you to offer:

  • Multiple pricing tiers (e.g., Basic, Pro, Enterprise)
  • Different billing intervals (monthly vs. annual)
  • Various currencies for international customers
  • One-time and recurring options for the same product

Product Types

KindDescriptionUse Case
one_timeSingle purchaseSetup fees, one-off services
subscriptionRecurring billingMonthly plans, memberships
serviceService or packageTreatment packages, service bundles

Product Fields

FieldTypeDescription
namestringDisplay name shown to customers
descriptionstringDetailed product description
fulfillment_typeenumphysical, digital, or none (service)
is_activebooleanWhether product is available for sale
mediaarrayProduct images and media files
metadataobjectCustom key-value data for your use

Fulfillment Types

The fulfillment type determines how the product is delivered to customers:

TypeUse CaseExamples
physicalShipped items requiring deliveryBooks, merchandise, equipment, hardware
digitalDownloads or digital accessSoftware, e-books, courses, digital files
noneServices with no deliveryConsulting, subscriptions, memberships

Creating Products

Via Dashboard

  1. Navigate to Product > Catalogue
  2. Click + New Product
  3. Fill in product details (name, description, fulfillment type)
  4. Add product images (optional)
  5. Add benefits/features (optional)
  6. Save the product
  7. Add one or more prices to the product

Via API

Recurring Product (Subscription)

const product = await client.products.create({
  productId: 'pro_monthly',
  name: 'Pro Plan',
  description: 'Full access to all features',
  kind: 'subscription',
  pricingModel: 'recurring',
  amountMinor: 2900, // $29.00
  currency: 'USD',
  interval: 'month',
  intervalCount: 1,
  trialDays: 14,

  // Optional: Features list for checkout display
  features: [
    'Unlimited projects',
    'Priority support',
    'Advanced analytics',
  ],
});

One-Time Product

const product = await client.products.create({
  productId: 'setup_fee',
  name: 'Setup Fee',
  description: 'One-time onboarding and configuration',
  kind: 'one_time',
  pricingModel: 'fixed',
  amountMinor: 9900, // $99.00
  currency: 'USD',
});

Listing Products

// List all active products
const products = await client.products.list({
  isActive: true,
});

// Filter by kind
const subscriptions = await client.products.list({
  kind: 'subscription',
  isActive: true,
});

Updating Products

const product = await client.products.update('prod_xxxxxxxx', {
  name: 'Pro Plan (2024)',
  amountMinor: 3900, // Price increase
});

Updating a product's price doesn't affect existing subscriptions. New subscriptions will use the updated price.

Archiving Products

// Archive a product (hide from new purchases)
const product = await client.products.update('prod_xxxxxxxx', {
  isActive: false,
});

Product Benefits

Benefits describe what's included with a product. They appear on checkout pages to help customers understand the value of what they're purchasing.

Benefits are displayed as a feature list on checkout pages. Add 3-5 key benefits to highlight the most important features.

Example benefits:

  • Unlimited users
  • 24/7 email support
  • Advanced analytics dashboard
  • Custom integrations
  • Priority feature requests

Product Best Practices

  1. Use clear, descriptive names -- Names should be instantly recognizable to customers (e.g., "Pro Plan" not "SKU-12345").
  2. Write compelling descriptions -- Explain the value proposition, not just technical specs.
  3. Offer multiple price options -- Monthly AND annual pricing can increase conversions by 20-30%.
  4. Add quality images -- Use high-resolution product photos or illustrations.
  5. Highlight key benefits -- List 3-5 benefits that matter most to your customers.

Prices

Prices define how much a product costs and how it's billed. A single product can have multiple prices, enabling flexible pricing strategies like offering both monthly and annual billing options.

Price Types

One-Time Price -- A single payment for a product. Perfect for physical goods, digital downloads, or services with a fixed scope. Example: Software license for $299.

Recurring Price -- Repeated billing at a specified interval. Used for subscriptions, memberships, and ongoing services. Billing intervals: Daily, Weekly, Monthly, Yearly, or custom intervals (e.g., every 3 months, every 6 weeks).

Pay-What-You-Want -- Let customers choose their own price. You can set minimum and suggested amounts. Great for donations, tips, or flexible pricing experiments. Example: Minimum $5, suggested $25.

Price Fields

FieldTypeDescription
amount_minorintegerPrice in minor units (cents). $29.99 = 2999
currencystringISO currency code (USD, EUR, GBP, etc.)
typeenumone_time, recurring, or pay_what_you_want
billing_intervalenumday, week, month, year (recurring only)
billing_interval_countintegerNumber of intervals between charges (default: 1)
trial_period_daysintegerFree trial duration in days (recurring only)
is_activebooleanWhether price is available for new purchases

Creating Prices

One-Time Price

const price = await client.prices.create({
  productId: 'prod_xxxxxxxx',
  amountMinor: 29900, // $299.00
  currency: 'USD',
  type: 'one_time',
});

console.log(price.data.id); // price_xxxxxxxx

Monthly Subscription

const monthlyPrice = await client.prices.create({
  productId: 'prod_xxxxxxxx',
  amountMinor: 2900, // $29.00/month
  currency: 'USD',
  type: 'recurring',
  billingInterval: 'month',
  billingIntervalCount: 1,
  trialPeriodDays: 14, // 14-day free trial
});

Annual Subscription (with discount)

// Annual price with 2 months free (10 months = $290 instead of $348)
const annualPrice = await client.prices.create({
  productId: 'prod_xxxxxxxx',
  amountMinor: 29000, // $290.00/year
  currency: 'USD',
  type: 'recurring',
  billingInterval: 'year',
  billingIntervalCount: 1,
});

Quarterly Billing (Custom Interval)

// Bill every 3 months
const quarterlyPrice = await client.prices.create({
  productId: 'prod_xxxxxxxx',
  amountMinor: 7500, // $75.00 every 3 months
  currency: 'USD',
  type: 'recurring',
  billingInterval: 'month',
  billingIntervalCount: 3, // Every 3 months
});

Trial Periods

For recurring prices, you can offer a free trial period. During the trial:

  • Customer gets full access to the product
  • No payment is collected
  • Subscription status is trialing
  • At trial end, the first invoice is generated and charged

Trial periods are set on the Price, not the Product. This means you can offer different trial lengths for different pricing tiers.

Multiple Prices per Product

A single product can have multiple prices. Common patterns include:

PatternExampleBenefit
Monthly + Annual$29/mo or $290/yrCapture both preference types
Multiple tiersBasic $19, Pro $49, Enterprise $199Different feature levels
Multi-currency$29 USD, 27 EUR, 24 GBPLocalized pricing
One-time + Recurring$99 setup + $29/moSetup fee with subscription

Pricing Best Practices

  1. Always offer annual pricing -- Annual plans with a discount (typically 15-20% off) improve cash flow and reduce churn.
  2. Use trial periods strategically -- 7-14 day trials work best for most SaaS products.
  3. Price in minor units -- Always use cents/minor units to avoid floating point issues ($29.99 = 2999).
  4. Archive, don't delete -- Set is_active: false instead of deleting prices to preserve history.

Billing Intervals

IntervalintervalCountDescription
day1Daily billing
week1Weekly billing
week2Bi-weekly billing
month1Monthly billing
month3Quarterly billing
year1Annual billing

Discounts

Discounts let you offer promotional pricing to customers. Create discount codes that customers can apply at checkout, or apply discounts directly to orders and subscriptions.

Discount Types

Percentage Off -- Reduce the total by a percentage (e.g., 20% off). Example: $100 with 20% off = $80.

Fixed Amount -- Reduce the total by a specific amount (e.g., $25 off). Example: $100 with $25 off = $75.

Free Trial -- Extend the trial period for subscriptions (e.g., 30-day trial instead of 14). Example: Add 30 days free trial period.

Discount Fields

FieldTypeDescription
codestringDiscount code customers enter (e.g., SUMMER20)
typeenumpercentage, fixed, or free_trial
amount_offintegerFixed amount in minor units (for fixed type)
percent_offnumberPercentage discount (for percentage type)
trial_daysintegerTrial period in days (for free_trial type)
max_redemptionsintegerMaximum number of times discount can be used
expires_atdatetimeWhen the discount code expires
is_activebooleanWhether discount is currently usable

Discount Scope

Control what the discount applies to:

ScopeDescription
entire_orderApplies to the total order/subscription amount
specific_productsOnly applies to selected products
subscription_onlyOnly valid for recurring purchases
one_time_onlyOnly valid for one-time purchases

Creating Discounts

Via Dashboard

  1. Navigate to Product > Discounts
  2. Click + New Discount
  3. Enter discount code (e.g., SUMMER20)
  4. Select discount type and amount
  5. Configure scope and limits
  6. Save the discount

Via API

// Percentage discount
const discount = await client.discounts.create({
  code: 'SUMMER20',
  type: 'percentage',
  percentOff: 20,

  // Optional limits
  maxRedemptions: 100,
  expiresAt: '2026-08-31T23:59:59Z',

  // Optional: Limit to specific products
  productIds: ['prod_xxx', 'prod_yyy'],
});

// Fixed amount discount
const fixedDiscount = await client.discounts.create({
  code: 'SAVE25',
  type: 'fixed',
  amountOff: 2500, // $25.00
  currency: 'USD',
});

// Free trial extension
const trialDiscount = await client.discounts.create({
  code: 'FREETRIAL30',
  type: 'free_trial',
  trialDays: 30,
});

Using Discounts at Checkout

For checkout links, enable discount codes in the link settings:

  1. Edit the checkout link
  2. Enable Allow discount codes
  3. Customers will see a discount code input field
  4. Valid codes are applied automatically

Using Discounts via API

// Apply discount to a subscription
const subscription = await client.subscriptions.create({
  customerId: 'cus_xxx',
  items: [{ priceId: 'price_xxx' }],
  discountId: 'disc_xxx', // Apply the discount
});

// Apply discount to an order
const order = await client.orders.create({
  customerId: 'cus_xxx',
  lineItems: [{ priceId: 'price_xxx', quantity: 1 }],
  discountId: 'disc_xxx',
});

Tracking Redemptions

Track how discounts are being used:

  • Redemption count -- How many times the code has been used
  • Total discounted -- Sum of all discount amounts applied
  • Revenue impact -- How much revenue was affected

View discount analytics in Product > Discounts by clicking on any discount.

Discount Best Practices

  1. Use memorable codes -- SUMMER20, WELCOME10, BLACKFRIDAY are easy to remember and type.
  2. Set expiration dates -- Create urgency and prevent indefinite discount usage.
  3. Limit redemptions -- Control promotion costs by capping total uses.
  4. Track performance -- Monitor redemption rates and revenue impact.
  5. Deactivate, don't delete -- Set is_active: false to preserve history.

On this page