Plans and trials
Four plan tiers, 14-day free trial on every plan, and what gets gated where.
Rekomi is paid-only with a 14-day free trial on every plan. There is no free tier. At signup you pick a plan, enter your card, and your trial starts. You won't be charged until the trial ends.
The four tiers
| Tier | Who it is for |
|---|---|
| Starter | Solo founders and small teams running a single campaign. |
| Growth | Growing SaaS companies that need AI features, a custom domain, and white-label embed. |
| Pro | Established subscription businesses with full white-label removal, a custom sending domain, and high volume. |
| Enterprise | Custom pricing, custom limits, SSO, premium support. |
The exact pricing and quotas live on the pricing page. This doc covers behavior, not numbers.
The 14-day trial
When you sign up, you go through Clerk auth and then land on /sign-up/plan to pick a tier (Starter, Growth, or Pro) and complete Stripe Checkout. A card-on-file is required. The Stripe subscription is created with TrialPeriodDays = 14, so Stripe holds your card without charging it for the first 14 days.
Your organization is provisioned with:
PlanTier =whichever tier you picked at checkoutSubscriptionStatus = TrialingTrialEndsAt = signup + 14 daysStripeSubscriptionIdset from the Checkout Session
During the trial you get full feature access on the tier you picked. Tier-gated features like S2S tracking, the AI co-pilot, custom-domain embed, public API, and webhooks are unlocked for trialing orgs regardless of nominal tier. The exceptions are bulk-email surfaces (broadcasts, bulk affiliate invites, and migration auto-notify) which require an active paid subscription and are not available during the trial.
When the trial ends, Stripe charges the card on file and the subscription flips to SubscriptionStatus = Active automatically. Rekomi's daily Hangfire job runs at 09:00 UTC and reconciles any edge cases: if a trial expired without a successful charge (card declined, payment-method removed), SubscriptionStatus flips to None and OnboardingGate redirects the brand back to /sign-up/plan to re-enter a payment method.
Feature gating
Some features are gated to specific plan tiers via the [RequiresPlan] backend attribute. As of today:
- AI co-pilot (
/dashboard/ai-copilot): requires Growth or higher. - White-label embed (
/api/embed/tokens): requires Growth or higher. - Custom domain (first-party tracking plus the affiliate portal on a domain you own, e.g.
affiliates.brand.com): requires Growth or higher. One unified feature; see Custom domain and Settings. The free branded portal at{brand}.rekomi.comis available on every tier; Growth only adds putting it on your own domain. - S2S tracking API (
/api/tracking/s2s): requires Starter or higher. - Public REST API (
/api/v1/programs,/affiliates,/conversions,/payouts,/dashboardviark_live_*keys): requires Starter or higher. The in-app dashboard atapp.rekomi.comis unrestricted on every tier (only programmatic API calls are gated). - Customer-facing webhooks (
/api/webhook-endpoints, the create / rotate / update / test routes): requires Starter or higher. Existing endpoints continue to fire after your trial ends; you just can't add new ones or reconfigure without a paid plan. - Zapier integration: requires Starter or higher. Uses the public REST API + webhook endpoints under the hood, so it inherits the same Starter+ gate. See /docs/developers/zapier.
- Audit log API export (
/api/v1/audit-logvia API keys): requires Pro or higher. The dashboard audit-log view is unrestricted. - Free branded affiliate portal (
{yourbrand}.rekomi.com): available on every tier, including Starter, with no setup. Putting that portal on a domain you own (affiliates.yourbrand.com) requires Growth as part of the unified Custom domain feature. See Settings.
Other features (Campaigns, Affiliates, Sales, Payouts, Reports, Broadcasts) are available on every plan through the in-app dashboard; usage quotas (number of campaigns, number of affiliates, broadcasts per month, and a soft monthly partner-payout volume) vary by tier. The payout-volume figure is a guide, not a hard cap: see Included payout volume.
Team-member limits
Each plan tier caps how many users can join your organization workspace:
| Tier | Team members |
|---|---|
| Starter | 2 |
| Growth | 5 |
| Pro | Unlimited |
| Enterprise | Unlimited |
The cap is enforced when you invite a new team member from /dashboard/settings/team. If you hit the cap, the invite returns HTTP 402 and prompts an upgrade.
If you hit a gated endpoint on a lower plan, the backend returns HTTP 402 with a body like:
{ "error": "plan_tier_required", "required": "Growth", "current": "Starter", "trialing": false }The frontend catches this and shows the upgrade modal automatically.
Included payout volume
Each tier includes a monthly partner-payout volume, measured per calendar month across all campaigns:
| Tier | Included partner payouts / mo |
|---|---|
| Starter | $2,500 |
| Growth | $15,000 |
| Pro | Unlimited |
| Enterprise | Unlimited |
Unlike the team-member cap, this is a soft guide, NOT a hard cap. Payouts are never blocked when you go over, and there is no overage fee: the flat 3% (2.5% on Enterprise) applies to all payout volume regardless of tier. Going over only triggers an upgrade nudge (an in-app banner and an optional email) suggesting more headroom; your payouts keep running unchanged. The billing page shows your month-to-date payout volume against your plan's included amount. Authoritative values live in PlanLimits.IncludedMonthlyPayoutVolumeCents.
Upgrading and downgrading
/dashboard/settings/billing shows your current plan and links to the Stripe Customer Portal (one-click via POST /api/billing/portal) where you can change plan, update payment method, view invoices, or cancel. Stripe handles proration on its side. The double-subscription guard in BillingController returns HTTP 409 if you try to start a second Stripe Checkout while one is already active; for plan changes, use the Customer Portal.
Trial countdown
The dashboard shows a sticky banner during the trial with a countdown to TrialEndsAt. The banner is dismissible except on the final day. A PlanChip in the top nav shows your current tier and trial status at all times.