Products & Features
Define what you sell. Create products with one or more variants, attach reusable features for entitlement-based access control.
Proyecta Commerce uses three concepts: products, variants, and features.
- Product — the thing you sell (e.g. “Pro Plan”, “T-shirt”, “Strategy Call”)
- Variant — a pricing tier or configuration of a product (e.g. “Pro Monthly $29”, “Pro Annual $290”, “T-shirt – Large”)
- Feature — a reusable entitlement key your app checks at runtime (e.g.
pro_features,unlimited_projects,api_access)
A product can have multiple variants. A product also has one or more resources attached — usually features — that grant access when a customer subscribes.
Creating a product
Section titled “Creating a product”In Dashboard > Commerce > Products, click Create product (or ask the AI: "Create a Pro plan at $29/month and a Business plan at $99/month."). Each product needs:
- A display name (e.g. “Pro”)
- At least one variant
Variants
Section titled “Variants”Each variant carries its own pricing:
| Field | Notes |
|---|---|
name | Display label for the variant (“Monthly”, “Annual”, “Large”) |
currency | Three-letter ISO code — USD, EUR, GBP, JPY, BRL, MXN, INR… (the SDK supports 130+) |
unit_amount | Price in the smallest currency unit (cents). 2900 = $29.00 |
recurring | Optional — { interval: 'day' | 'week' | 'month' | 'year', interval_count?: number }. Omit for one-time prices. |
is_default | Mark one variant as the default checkout option |
media | Attach images or videos by CDN file ID (see Files) |
Pricing is immutable. Once a variant is created, its price can’t be changed — create a new variant instead. This protects existing subscribers from accidental price changes.
Features (entitlements)
Section titled “Features (entitlements)”Features are the access-control primitive. Create a feature once, then attach it to one or more products.
// Create a featureconst pro = await proyecta.commerce.features.create({ name: 'Pro features', description: 'Unlocks the Pro tier capabilities', // optional custom id, must start with 'feat_'});When you create a product, you attach features to it via “resources”. Customers who subscribe to a product gain access to every feature attached to it.
Then, in your app, check whether a customer has access:
const { has_access } = await proyecta.commerce.check({ customer_id: 'cus_123', resource_id: pro.id,});This is how you gate Pro-only pages, API endpoints, or features in your app code.
Common product shapes
Section titled “Common product shapes”SaaS subscriptions
Create products: Free ($0/month), Pro ($29/month, $290/year), Business ($99/month, $990/year).Attach a 'pro_features' feature to Pro and Business so I can gate access in my code.Physical goods
Create a T-shirt product with three variants: Small, Medium, Large at $25 each.Digital goods
Create a course product with a single one-time variant at $149.Donations
Create a donation product with three variants: $25, $50, $100 — all one-time.Inventory
Section titled “Inventory”Proyecta Commerce does not currently track inventory for physical products. If you sell stocked items, manage stock counts in your app’s database and check them in your checkout flow.
Coming soon
Section titled “Coming soon”- Checkout field customization — collect additional info from buyers
- Pay-what-you-want pricing
- Built-in inventory tracking for physical products