SudoMock
GET

Plans

Retrieve all available subscription plans with pricing, credit allowances, and concurrency limits. Use this to build pricing pages or validate plan capabilities.

GET/api/v1/packages/plans
Public endpoint

No Authentication Required

This is a public endpoint. No API key or authentication headers are needed. Plans are returned sorted by monthly price (ascending).

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

Get Plans
bash
1curl -X GET "https://api.sudomock.com/api/v1/packages/plans"

Response

Success Response

200OK
Response 200 OK
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": null
15 },
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

plansarrayRequired

Array of all active subscription plans, sorted by price_monthly ascending

plans[].idstringRequired

Unique plan identifier (UUID)

plans[].namestringRequired

Display name of the plan (e.g., 'Starter 5K', 'Pro 25K', 'Scale 50K')

plans[].slugstringRequired

URL-friendly identifier for programmatic use (e.g., 'starter-5k', 'pro-25k')

plans[].tierenumRequired

Plan tier level: free, starter, pro, or scale

plans[].descriptionstring

Human-readable plan description (may be null)

plans[].price_monthlynumberRequired

Monthly price in USD. Paid plans start at $17.49/mo

plans[].price_yearlynumberRequired

Yearly price in USD (discounted annual billing)

plans[].credits_per_monthintegerRequired

Number of render credits included per month

plans[].max_concurrent_requestsintegerRequired

Maximum number of parallel render requests allowed

plans[].max_concurrent_uploadsintegerRequired

Maximum number of parallel PSD uploads allowed

plans[].stripe_price_idstring

Stripe Price ID for checkout integration (null for free tier)

Plan Tiers

Plans are organized into four tiers, each designed for different usage levels:

TierStarting PriceBest For
starter$17.49/moSmall stores, side projects, testing integrations
pro$37.49/moGrowing businesses with higher volume needs
scale$74.99/moHigh-volume production, enterprise workflows

Annual Billing Saves ~17%

Use the 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:

Dynamic Pricing Page
1const response = await fetch("https://api.sudomock.com/api/v1/packages/plans");
2const { plans } = await response.json();
3
4// Filter to paid plans for your pricing page
5const paidPlans = plans.filter(p => p.tier !== "free");
6
7paidPlans.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:

Stripe Checkout with Plan Price ID
1// After user selects a plan
2const selectedPlan = plans.find(p => p.slug === "pro-10k");
3
4// Use stripe_price_id for Checkout
5const 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

500Internal Server Error
json
1{
2 "detail": "Failed to fetch subscription plans"
3}
Plans API Endpoint | SudoMock Docs