Plans
Retrieve all available subscription plans with pricing, credit allowances, and concurrency limits. Use this to build pricing pages or validate plan capabilities.
/api/v1/packages/plansNo Authentication Required
Request
Send a GET request with no parameters. The endpoint returns all active subscription plans.
Headers
No headers required. The endpoint is publicly accessible.
Code Examples
1curl -X GET "https://api.sudomock.com/api/v1/packages/plans"
Response
Success Response
1{2 "plans": [3 {4 "id": "a1b2c3d4-...",5 "name": "Free",6 "slug": "free",7 "tier": "free",8 "description": "Try SudoMock with limited credits",9 "price_monthly": 0,10 "price_yearly": 0,11 "credits_per_month": 500,12 "max_concurrent_requests": 1,13 "max_concurrent_uploads": 1,14 "stripe_price_id": null15 },16 {17 "id": "e5f6g7h8-...",18 "name": "Starter 5K",19 "slug": "starter-5k",20 "tier": "starter",21 "description": "For small stores and side projects",22 "price_monthly": 17.49,23 "price_yearly": 174.90,24 "credits_per_month": 5000,25 "max_concurrent_requests": 3,26 "max_concurrent_uploads": 3,27 "stripe_price_id": "price_xxx"28 },29 {30 "id": "i9j0k1l2-...",31 "name": "Pro 25K",32 "slug": "pro-25k",33 "tier": "pro",34 "description": "For growing businesses with high volume",35 "price_monthly": 67.49,36 "price_yearly": 674.90,37 "credits_per_month": 25000,38 "max_concurrent_requests": 10,39 "max_concurrent_uploads": 10,40 "stripe_price_id": "price_yyy"41 }42 ]43}
Response Fields
plansarrayRequiredArray of all active subscription plans, sorted by price_monthly ascending
plans[].idstringRequiredUnique plan identifier (UUID)
plans[].namestringRequiredDisplay name of the plan (e.g., 'Starter 5K', 'Pro 25K', 'Scale 50K')
plans[].slugstringRequiredURL-friendly identifier for programmatic use (e.g., 'starter-5k', 'pro-25k')
plans[].tierenumRequiredPlan tier level: free, starter, pro, or scale
plans[].descriptionstringHuman-readable plan description (may be null)
plans[].price_monthlynumberRequiredMonthly price in USD. Paid plans start at $17.49/mo
plans[].price_yearlynumberRequiredYearly price in USD (discounted annual billing)
plans[].credits_per_monthintegerRequiredNumber of render credits included per month
plans[].max_concurrent_requestsintegerRequiredMaximum number of parallel render requests allowed
plans[].max_concurrent_uploadsintegerRequiredMaximum number of parallel PSD uploads allowed
plans[].stripe_price_idstringStripe Price ID for checkout integration (null for free tier)
Plan Tiers
Plans are organized into four tiers, each designed for different usage levels:
| Tier | Starting Price | Best For |
|---|---|---|
starter | $17.49/mo | Small stores, side projects, testing integrations |
pro | $37.49/mo | Growing businesses with higher volume needs |
scale | $74.99/mo | High-volume production, enterprise workflows |
Annual Billing Saves ~17%
price_yearly field to display annual pricing to your users. Annual billing provides significant savings compared to monthly.Common Use Cases
Building a Pricing Page
Fetch plans dynamically to keep your pricing page always in sync:
1const response = await fetch("https://api.sudomock.com/api/v1/packages/plans");2const { plans } = await response.json();34// Filter to paid plans for your pricing page5const paidPlans = plans.filter(p => p.tier !== "free");67paidPlans.forEach(plan => {8 console.log(plan.name);9 console.log(` Monthly: $${plan.price_monthly}`);10 console.log(` Yearly: $${plan.price_yearly} ($${(plan.price_yearly / 12).toFixed(2)}/mo)`);11 console.log(` Credits: ${plan.credits_per_month.toLocaleString()}/mo`);12 console.log(` Parallel renders: ${plan.max_concurrent_requests}`);13});
Stripe Checkout Integration
Use the stripe_price_id to create Stripe Checkout sessions directly:
1// After user selects a plan2const selectedPlan = plans.find(p => p.slug === "pro-10k");34// Use stripe_price_id for Checkout5const session = await stripe.checkout.sessions.create({6 mode: "subscription",7 line_items: [{8 price: selectedPlan.stripe_price_id,9 quantity: 1,10 }],11 success_url: "https://yourapp.com/success",12 cancel_url: "https://yourapp.com/pricing",13});
Error Responses
1{2 "detail": "Failed to fetch subscription plans"3}