Quickstart
Set up Control Plane and make your first API call in under 15 minutes.
brew install node or from nodejs.org.1Create your account
Head to console.aaronchangai.org and sign up with GitHub or email. No credit card required, and you can use Control Plane in test mode for as long as you like.
Open the Console2Create your app
In the Console, navigate to Settings and click Create app. An app represents one of your SaaS products — each one gets its own isolated Stripe integration and webhook endpoint, so test and production stay completely separate.
Common pattern: create two apps — my-saas-dev and my-saas-prod — and point each at its own Stripe account.
3Connect your payment provider
Navigate to Settings → your app → Configure Stripe. The flow has four parts: get your secret key, save it (which generates your webhook URL), register the webhook in Stripe, then save the signing secret back in the Console.
- 1Stripe Dashboard → Developers → API keys: copy your
sk_test_…(orsk_live_…) secret key. - 2Paste it into the Secret Key field in the Console and click Save. A Webhook URL will appear — copy it.
- 3Stripe Dashboard → Developers → Webhooks → Add endpoint. Paste your Webhook URL and select the three
customer.subscription.*events. - 4Stripe shows a Signing Secret (
whsec_…) only once. Paste it into the Webhook Secret field in the Console. Save.
4Create your first organization
Organizations represent your customers' workspaces. Create one from the Console dashboard to test your setup before going live — it takes about ten seconds.
cp.orgs.create() from a Stripe checkout.session.completed handler to provision workspaces the moment a customer subscribes.5Get an API key
API keys let your backend call the Control Plane API on behalf of an organization. They're scoped per-org and per-environment (live or test).
6Install the SDKPrivate beta
The TypeScript SDK is currently in private beta. Request access from your dashboard and we'll flip the flag on your account. If you'd rather skip the SDK, every endpoint below has an equivalent curl example you can use with any HTTP client.
7Initialize the client
Instantiate the client once at boot and reuse it across requests. The token is read from your environment so it never ships to the browser.
Or hit the REST API directly with any HTTP client:
8Invite a team member
The first real API call: invite a teammate to the org you created in step 4. Grab your org ID from the Console URL (console.aaronchangai.org/orgs/[orgId]).
Or with curl:
cp.members.list(orgId).9Billing syncs automatically
With Stripe connected (step 3), subscription events are automatically routed to the right organization. Control Plane handles plan updates, seat-limit enforcement, entitlement changes, and the full audit trail. No code required.
- Plan updates when a customer upgrades or downgrades
- Seat limit enforcement based on subscription quantity
- Entitlement changes on trial start, expiry, or cancellation
- Full audit trail of every billing event
Trigger a test sync from your terminal using the Stripe CLI:
10Embed the team management UIPrivate beta
Drop pre-built React components into your app and let customers manage their own teams without leaving your product. Components ship with zero global CSS — styling is isolated under a cp-Tailwind prefix so they can't conflict with your design system.
That's it. You're shipping.
You now have organizations, members, roles, billing sync, and embeddable UI — wired end-to-end. Pop into the Console anytime to inspect live state, or jump to the SDK reference for everything else.