Authenticate
Create a token in Settings → API tokens. Send Authorization: Bearer YOUR_TOKEN with each request. Keep it in server-side secrets, never browser bundles.
GET https://launchbase.build/api/v1/me Authorization: Bearer lb_agent_…
Workspace tokens select an app with POST /apps/{id}/switch before app operations. App-bound tokens are fixed to one app. Scopes and app protections apply to every request.
Owner-only endpoints require a browser session and cannot be called with an API token. Use the returned approval or checkout URL when an owner action is needed.
Download OpenAPI JSONFrom source to live app
- Create an app:
POST /apps. - Select it:
POST /apps/{id}/switch. - Start its trial or request plan checkout.
- Poll the app until hosting is ready.
- Upload source or connect GitHub.
- Create a release; poll its status and logs.
Base URL: https://launchbase.build/api/v1.
Responses use {data, requestId}; errors use {error:{code,message,details},requestId}. A 202 means accepted, not finished. Amounts are integer cents. Do not retry payments blindly.
Planning is limited to 120 requests/minute per IP. Authenticated operations also have a 600/minute principal limit; onboarding and individual actions have additional limits. Respect 429 and Retry-After. No broad CORS access: call from your backend.
Try a request
Live APIRequests run against this Launchbase environment. Writes change real data. The token stays in this page and is cleared when you leave.
Request code
Every endpoint
GET Discover Launchbase /discovery
Discover Launchbase.
Access: public
curl -X GET 'https://launchbase.build/api/v1/discovery'
GET Download the OpenAPI reference /openapi.json
Download the OpenAPI reference.
Access: public
curl -X GET 'https://launchbase.build/api/v1/openapi.json'
GET Check your token and workspace /me
Check your token and workspace.
Access: bearer
curl -X GET 'https://launchbase.build/api/v1/me' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
GET List connections and credentials /agents
List connections and credentials.
Access: account:read
curl -X GET 'https://launchbase.build/api/v1/agents' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
POST Create a credential /agents
Owner session only. Tokens cannot mint new credentials. Use Settings → API tokens. Optional appId restricts the token to one app.
Access: owner
curl -X POST 'https://launchbase.build/api/v1/agents' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "CI deployment",
"scopes": [
"app:read",
"deploy:write"
],
"expiresInDays": 90
}'POST Rotate a credential /agents/{principalId}/credentials/{credentialId}/rotate
Revokes the old token immediately; returns the new secret once.
Access: owner
curl -X POST 'https://launchbase.build/api/v1/agents/{principalId}/credentials/{credentialId}/rotate' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Revoke a connection /agents/{principalId}/revoke
Revokes every credential and OAuth token for this connection.
Access: owner
curl -X POST 'https://launchbase.build/api/v1/agents/{principalId}/revoke' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Create an invite /agents/invites
One-time invite for a human-approved connection.
Access: owner
curl -X POST 'https://launchbase.build/api/v1/agents/invites' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "My agent",
"scopes": [
"app:read",
"deploy:write"
]
}'GET List invites /agents/invites
List invites.
Access: owner
curl -X GET 'https://launchbase.build/api/v1/agents/invites' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
POST Start account signup /agent/signup
Sends an owner claim link. Save the returned draft token; the owner must confirm before resources can be provisioned.
Access: public
curl -X POST 'https://launchbase.build/api/v1/agent/signup' -H 'Content-Type: application/json' --data '{
"ownerEmail": "you@example.com",
"name": "Notes",
"description": "A private notes app"
}'POST Create a draft /agent/drafts
Optional ownerEmail and config. This does not provision infrastructure.
Access: public
curl -X POST 'https://launchbase.build/api/v1/agent/drafts' -H 'Content-Type: application/json' --data '{
"name": "Notes",
"description": "A private notes app"
}'POST Connect to an existing account /agent/connect
Open verificationUrl for the owner. Save pollToken securely and poll the connect ID; credentials are returned once. Optional scopes and description.
Access: public
curl -X POST 'https://launchbase.build/api/v1/agent/connect' -H 'Content-Type: application/json' --data '{
"agentName": "My coding agent"
}'GET Poll connection approval /agent/connect/{connectId}
Use the pollToken returned at creation as the Bearer token, not an API credential. Read data.status inside the JSON envelope. Stop the waiting command immediately on approved, save data.token privately and continue the task. Stop on denied, expired or redeemed. A bounded Node helper is available at /agent-connect.mjs.
Access: poll
curl -X GET 'https://launchbase.build/api/v1/agent/connect/{connectId}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Redeem an invite /agent/redeem
Redeem an invite.
Access: public
curl -X POST 'https://launchbase.build/api/v1/agent/redeem' -H 'Content-Type: application/json' --data '{
"code": "REPLACE_WITH_INVITE",
"agentName": "My agent"
}'GET Read your draft /agent/draft
Read your draft.
Access: draft
curl -X GET 'https://launchbase.build/api/v1/agent/draft' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
PATCH Update your draft /agent/draft
Use the draft Bearer token. Optional config.
Access: draft
curl -X PATCH 'https://launchbase.build/api/v1/agent/draft' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "Notes",
"description": "A private notes app"
}'POST Redeem an approved draft /agent/draft/redeem
Returns an API credential after the owner claims the draft. Store it securely.
Access: draft
curl -X POST 'https://launchbase.build/api/v1/agent/draft/redeem' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET Read services and plans /catalog
Read services and plans.
Access: public
curl -X GET 'https://launchbase.build/api/v1/catalog'
GET Read deployment requirements /guide
Read deployment requirements.
Access: public
curl -X GET 'https://launchbase.build/api/v1/guide'
POST Suggest app services /planning/recommend
Suggest app services.
Access: public
curl -X POST 'https://launchbase.build/api/v1/planning/recommend' -H 'Content-Type: application/json' --data '{
"description": "A private notes app with email sign-in"
}'POST Review a configuration /planning/review
No infrastructure is created. Read the catalog for allowed modes and region values.
Access: public
curl -X POST 'https://launchbase.build/api/v1/planning/review' -H 'Content-Type: application/json' --data '{
"config": {
"start": "starter",
"region": "eu-west",
"components": {
"hosting": "managed",
"database": "managed",
"auth": "managed",
"email": "managed"
}
}
}'GET List your apps /apps
List your apps.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
POST Create an app /apps
Creates a draft. Start a trial or ask the owner to subscribe before provisioning. Optional config.components selects managed, byok or disabled per service.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "Notes",
"description": "My notes app",
"config": {
"start": "starter",
"region": "eu-west"
}
}'GET Read an app /apps/{id}
Read an app.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"PATCH Configure an app /apps/{id}
Read the current desiredConfig first and send the full desired configuration. Service removal can require owner approval. confirm is a boolean for acknowledged configuration changes; it does not override app protections.
Access: app:write
curl -X PATCH 'https://launchbase.build/api/v1/apps/{id}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"description": "My updated notes app",
"config": {
"components": {
"hosting": "managed",
"database": "managed",
"auth": "managed",
"email": "managed"
}
}
}'PATCH Rename an app /apps/{id}/name
Changes the display name, not the URL.
Access: app:write
curl -X PATCH 'https://launchbase.build/api/v1/apps/{id}/name' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "My notes"
}'DELETE Request app deletion /apps/{id}
Tokens receive an owner approval action. Only an owner can execute deletion. Immediate removal uses immediate=true; otherwise provisioned resources follow retention.
Access: app:write
curl -X DELETE 'https://launchbase.build/api/v1/apps/{id}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Select the active app /apps/{id}/switch
Workspace tokens must select an app before operating on it. App-bound tokens cannot switch.
Access: app:read
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/switch' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Resume provisioning /apps/{id}/provision
Requires an active entitlement. Returns a background job.
Access: spending:execute
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/provision' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET Review app configuration and plan /apps/{id}/review
Review app configuration and plan.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/review' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"PUT Set the app card preview /apps/{id}/preview
Raw PNG base64 (no data URL prefix), up to 1 MB and 2400 × 1600 pixels. capturedUrl must exactly match the app publicUrl. Do not capture private user data.
Access: app:write
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/preview' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"imageBase64": "REPLACE_WITH_PNG_BASE64",
"capturedUrl": "https://your-app.example.com"
}'GET Read app protections /apps/{id}/agent-policy
Read app protections.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/agent-policy' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"PUT Set service-removal protection /apps/{id}/agent-policy
Owner session only. Values: approval or blocked. SQL migrations are not covered by service-removal protection.
Access: owner
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/agent-policy' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"serviceRemoval": "approval"
}'GET Read connected provider accounts /apps/{id}/byok
Read connected provider accounts.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/byok' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Connect your Railway account /apps/{id}/hosting/byok
Paid app, before provisioning. Optional workspaceId.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/hosting/byok' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"token": "REPLACE_WITH_RAILWAY_TOKEN"
}'POST Connect your Supabase account /apps/{id}/database/byok
Paid app, before provisioning. Optional organization. Auth follows the database account.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/database/byok' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"accessToken": "REPLACE_WITH_SUPABASE_TOKEN"
}'DELETE Disconnect a provider account /apps/{id}/byok/{component}
component is hosting or database. Existing provisioned resources may require migration first.
Access: app:write
curl -X DELETE 'https://launchbase.build/api/v1/apps/{id}/byok/{component}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Apply a SQL migration /apps/{id}/database/migrations
Migration names are idempotent. Add policies for your app users. SQL can drop tables and delete data; app service-removal protection does not prevent this.
Access: database:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/database/migrations' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "001_notes",
"sql": "create table public.notes (id uuid primary key default gen_random_uuid(), title text not null); alter table public.notes enable row level security;"
}'GET List applied migrations /apps/{id}/database/migrations
List applied migrations.
Access: database:write
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/database/migrations' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Run a read-only SQL query /apps/{id}/database/query
Result size and execution time are capped. Writes must use migrations.
Access: database:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/database/query' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"sql": "select current_timestamp",
"limit": 10
}'GET Read this app’s deployment contract /apps/{id}/guide
Read this app’s deployment contract.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/guide' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Validate source files /apps/{id}/sources/validate
No release is created. Optional options overrides detected build/start settings; consult /guide.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/sources/validate' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"files": {
"package.json": "{\"scripts\":{\"start\":\"node server.js\"}}",
"server.js": "require(\"http\").createServer((req,res)=>res.end(\"Hello\")).listen(process.env.PORT || 3000,\"0.0.0.0\")"
}
}'POST Upload small source bundles /apps/{id}/sources/direct
JSON file map. Hosting service must exist. Returns a verified source ID or structured validation errors. Optional options. Never include .env or secrets.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/sources/direct' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"files": {
"package.json": "{\"scripts\":{\"start\":\"node server.js\"}}",
"server.js": "require(\"http\").createServer((req,res)=>res.end(\"Hello\")).listen(process.env.PORT || 3000,\"0.0.0.0\")"
}
}'POST Create a tarball upload intent /apps/{id}/sources
Prefer the standalone folder uploader at /launchbase.mjs; instructions at /docs/deploy.md. Optional sha256 (64 lowercase hex characters) and fileCount. PUT raw gzip tar bytes using the returned signed upload details, then finalize. All sources are limited to 2000 files / 20 MiB decoded; the compressed transport cap is 64 MiB.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/sources' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"sizeBytes": 1024
}'POST Verify an uploaded source /apps/{id}/sources/{sourceId}/finalize
Call after uploading the archive. Optional options controls build settings.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/sources/{sourceId}/finalize' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET List source versions /apps/{id}/sources
List source versions.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/sources' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Get a source download URL /apps/{id}/sources/{sourceId}/download
Returns a temporary signed URL; keep it private.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/sources/{sourceId}/download' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Deploy a verified source /apps/{id}/releases
requestId is required: 8–100 letters, numbers, underscores or hyphens. Reuse it only for retries of this exact deployment. Optional message and options. Returns 202; poll release status and logs.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/releases' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"sourceId": "REPLACE_WITH_SOURCE_ID",
"requestId": "deploy-unique-0001"
}'GET List releases /apps/{id}/releases
List releases.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/releases' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Read release status /apps/{id}/releases/{releaseId}
Read release status.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/releases/{releaseId}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Read build or runtime logs /apps/{id}/releases/{releaseId}/logs
Query: kind=build or runtime; optional before timestamp for earlier logs. Use the returned error details and logs to repair source, then deploy a new release.
Access: logs:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/releases/{releaseId}/logs' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Restore a release /apps/{id}/releases/{releaseId}/restore
Creates a new release from the selected source; does not roll back database migrations.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/releases/{releaseId}/restore' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"requestId": "restore-unique-0001"
}'POST Cancel a release /apps/{id}/releases/{releaseId}/cancel
Cancel a release.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/releases/{releaseId}/cancel' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET List app jobs /apps/{id}/jobs
List app jobs.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/jobs' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Read job progress /jobs/{jobId}
Read job progress.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/jobs/{jobId}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Cancel a job /jobs/{jobId}/cancel
Completed provider actions are not undone.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/jobs/{jobId}/cancel' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET Read repository connection /apps/{id}/repo
Read repository connection.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/repo' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"PUT Connect a GitHub repository /apps/{id}/repo
Fine-grained GitHub token: Contents read, Metadata read, Webhooks read/write. Optional rootDir for monorepos. Stores the token encrypted.
Access: deploy:write
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/repo' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"repository": "owner/repo",
"branch": "main",
"token": "REPLACE_WITH_GITHUB_TOKEN",
"autoDeploy": true
}'DELETE Disconnect GitHub /apps/{id}/repo
Disconnect GitHub.
Access: deploy:write
curl -X DELETE 'https://launchbase.build/api/v1/apps/{id}/repo' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Deploy a repository ref /apps/{id}/repo/deploy
Deploy a repository ref.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/repo/deploy' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"ref": "main"
}'POST Configure app runtime access /apps/{id}/runtime
Injects an app-only credential for verified-user test emails. No secret values are returned. Deploy a release afterwards.
Access: secrets:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/runtime' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET List runtime variable names /apps/{id}/variables
Secret values are never returned.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/variables' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"PUT Set runtime variables /apps/{id}/variables
Reserved platform variables are protected. Values are encrypted and not returned.
Access: secrets:write
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/variables' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"variables": {
"MY_SETTING": "value"
}
}'GET Read billing and card status /billing
Read billing and card status.
Access: billing:read
curl -X GET 'https://launchbase.build/api/v1/billing' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
GET List invoices /billing/invoices
List invoices.
Access: billing:read
curl -X GET 'https://launchbase.build/api/v1/billing/invoices' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
POST Request a balance top-up /billing/topup
Integer USD cents. Returns an owner checkout URL, not a completed payment.
Access: billing:write
curl -X POST 'https://launchbase.build/api/v1/billing/topup' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"amountMinor": 2000
}'POST Request card verification /billing/verify-card
Returns an owner checkout URL. Card details stay with Stripe. A $1 verification hold is released after completion.
Access: billing:write
curl -X POST 'https://launchbase.build/api/v1/billing/verify-card' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET Read usage and limits /apps/{id}/usage
Hosting, Database, Files and Emails; includes freshness, limitations and upgrade links.
Access: billing:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/usage' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Pause a trial app /apps/{id}/billing/trial/pause
Archives the database and stops hosting. Poll jobId until succeeded before reusing the slot. Original trial deadline continues.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/billing/trial/pause' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Resume a trial app /apps/{id}/billing/trial/resume
Reserves a concurrent slot and restores saved data. Does not restart the trial. testing_limit includes card or slot action links.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/billing/trial/resume' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET Check trial eligibility /apps/{id}/billing/trial
Check trial eligibility.
Access: billing:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/billing/trial' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Start the free trial /apps/{id}/billing/trial
Starts provisioning when eligible. Trial lasts 7 days.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/billing/trial' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Request a paid app plan /apps/{id}/billing/checkout
launch, grow or scale. Also requests upgrades for active paid apps; downgrades need a capacity review. Owner confirms the payment in the browser. Poll app status after checkout.
Access: billing:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/billing/checkout' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"plan": "launch"
}'POST Cancel the app subscription /apps/{id}/billing/cancel
Cancels at the end of the billing period; access continues until then.
Access: billing:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/billing/cancel' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'PUT Update usage alerts /apps/{id}/budget
Automatic infrastructure overages and auto top-ups are disabled. This does not raise the app plan limits.
Access: billing:write
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/budget' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"paygEnabled": false,
"autoTopupEnabled": false,
"alertThresholdsPct": [
50,
80,
100
]
}'GET Read email service status /apps/{id}/email
Read email service status.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/email' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Connect your Resend account /apps/{id}/email/byok
Sender domain must be verified in Resend. Optional domain must match fromAddress.
Access: secrets:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/email/byok' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"apiKey": "REPLACE_WITH_RESEND_KEY",
"fromAddress": "hello@example.com"
}'POST Send a transactional email /apps/{id}/email/send
Sends a real email. One recipient; subject ≤200 characters. Provide html and/or text. Optional replyTo and headers. Reuse idempotencyKey only for the same send.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/email/send' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"to": "you@example.com",
"subject": "Hello",
"text": "Hello from my app",
"idempotencyKey": "welcome-unique-0001"
}'DELETE Remove an email suppression /apps/{id}/email/suppressions
Only remove a suppression once the recipient has agreed to receive email again.
Access: app:write
curl -X DELETE 'https://launchbase.build/api/v1/apps/{id}/email/suppressions' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"address": "you@example.com"
}'POST Managed customer billing actions /apps/{id}/payments/actions/{action}
Choose an action from /docs/payments/actions.json. Full request fields, examples, runtime auth and access policy: /docs/payments.md. Supports plans, customers, checkout, cards, portal, subscriptions, invoices, transactions, refunds, events and paid access. Live onboarding and embedded account sessions require an owner.
Access: app:read / app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/payments/actions/{action}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"mode": "test"
}'GET Read customer payment setup /apps/{id}/payments
Read customer payment setup.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/payments' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Start Stripe Connect onboarding /apps/{id}/payments/connect
Returns an owner onboarding link. Business verification cannot be skipped.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/payments/connect' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"country": "GB",
"businessType": "individual"
}'POST Connect your Stripe account /apps/{id}/payments/byok
Optional publishableKey must match test/live mode.
Access: secrets:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/payments/byok' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"secretKey": "REPLACE_WITH_STRIPE_KEY"
}'DELETE Disconnect customer payments /apps/{id}/payments
Service-removal protections apply.
Access: owner
curl -X DELETE 'https://launchbase.build/api/v1/apps/{id}/payments' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET List domain bindings and orders /apps/{id}/domains
List domain bindings and orders.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/domains' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Attach a domain you own /apps/{id}/domains
Returns an ownership TXT record. Add it at your DNS provider before verifying.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/domains' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"domain": "app.example.com"
}'POST Verify domain ownership /apps/{id}/domains/{domain}/verify
Returns the hosting DNS records after ownership is verified.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/domains/{domain}/verify' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Refresh DNS and certificate status /apps/{id}/domains/{domain}/refresh
Refresh DNS and certificate status.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/domains/{domain}/refresh' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'DELETE Detach a domain /apps/{id}/domains/{domain}
Removes the app route, not the domain registration.
Access: owner
curl -X DELETE 'https://launchbase.build/api/v1/apps/{id}/domains/{domain}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Check domain availability and price /domains/quote
Live registrar availability and prices, no Launchbase markup. A quote is not a reservation.
Access: app:read
curl -X POST 'https://launchbase.build/api/v1/domains/quote' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"domains": [
"example.com"
]
}'POST Request domain checkout /apps/{id}/domains/purchase
API tokens receive action_required with an owner URL. Open it or give it to the owner. A saved card alone does not authorize a purchase. Current checkout uses prepaid balance; registration is non-refundable.
Access: domains:purchase
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/domains/purchase' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"domain": "example.com"
}'GET Read migration plan /apps/{id}/migration-plan
Read migration plan.
Access: export:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/migration-plan' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Download migration guide /apps/{id}/migration-guide
Returns text/markdown, not the standard JSON envelope.
Access: export:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/migration-guide' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Create an export /apps/{id}/exports
Optional scope.source, scope.database and scope.auth booleans default true. Inventory and migration guides are always included. Poll status until ready.
Access: export:read
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/exports' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"scope": {}
}'GET List exports /apps/{id}/exports
List exports.
Access: export:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/exports' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Read export status /apps/{id}/exports/{exportId}
Read export status.
Access: export:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/exports/{exportId}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Get export download links /apps/{id}/exports/{exportId}/download
Signed links expire after 10 minutes. Downloads can contain customer data; treat them as secrets.
Access: export:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/exports/{exportId}/download' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET Inspect internal health /ops/health
Launchbase operator session only. Customers can read /status.json instead.
Access: operator
curl -X GET 'https://launchbase.build/api/v1/ops/health' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
GET Inspect provider inventory /ops/reconcile
Launchbase operator session only; read-only reconciliation.
Access: operator
curl -X GET 'https://launchbase.build/api/v1/ops/reconcile' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"
GET Read CDN settings /apps/{id}/cdn
Read CDN settings.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/cdn' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET List recovery points and history /apps/{id}/recovery
Backup restore: Grow and Scale. Point-in-time: Scale with the active $129/month add-on, only within the returned window. Managed database required.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/recovery' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"PUT Manage the optional recovery add-on /apps/{id}/recovery/addon
Scale only. $129/month per app, separately billed. Returns a checkout URL for owner confirmation; agents get an owner approval URL and never purchase directly. enabled:false stops renewal; recovery remains until the paid period ends. Available backups remain included.
Access: billing:write
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/recovery/addon' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"enabled": true
}'POST Continue recovery monitoring or app restart /apps/{id}/recovery/{restoreId}/continue
Retries the existing job without repeating an uncertain restore submission. Submission uncertainty requires support verification.
Access: database:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/recovery/{restoreId}/continue' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Restore database /apps/{id}/recovery/database
Replaces newer database records; app goes offline. For Scale use kind:point_in_time and time: an ISO timestamp with timezone from the available window instead of backupId. Returns jobId; poll it. Stable requestId prevents duplicate restores. Code, file content and external payments are unchanged. Read /docs/recovery.md.
Access: database:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/recovery/database' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"kind": "backup",
"backupId": 123,
"requestId": "restore-unique-0001",
"acknowledgeDataLoss": true
}'PUT Enable or disable CDN /apps/{id}/cdn
Active paid app plan and deployed hosting required. HTML is not cached. Private responses must send Cache-Control: private, no-store. Read /docs/cdn.md.
Access: app:write
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/cdn' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"enabled": true
}'POST Clear cached assets /apps/{id}/cdn/purge
Clears all cached assets. Also cleared after successful deployments.
Access: app:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/cdn/purge' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET Read file capacity /apps/{id}/storage
Read file capacity.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/storage' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"PUT Enable or pause uploads /apps/{id}/storage
Requires provisioned hosting. Pausing uploads retains existing files. Configure runtime access after enabling.
Access: app:write
curl -X PUT 'https://launchbase.build/api/v1/apps/{id}/storage' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"enabled": true
}'GET List files /apps/{id}/files
100 files per page. Pass nextAfter as the after query parameter.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/files' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Create a file upload /apps/{id}/files
Reserves space atomically. PUT the exact file bytes to upload.url with all returned headers, then finalize. Maximum 50 MB per file.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/files' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "document.pdf",
"contentType": "application/pdf",
"sizeBytes": 1234,
"sha256": "REPLACE_WITH_SHA256_HEX",
"requestId": "upload-unique-001"
}'POST Verify an uploaded file /apps/{id}/files/{fileId}/finalize
Verify an uploaded file.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/files/{fileId}/finalize' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'GET Download a private file /apps/{id}/files/{fileId}/download
Returns a signed URL valid for five minutes.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/files/{fileId}/download' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"DELETE Delete a file /apps/{id}/files/{fileId}
Hides the file immediately. Frees storage once outstanding upload URLs have expired.
Access: deploy:write
curl -X DELETE 'https://launchbase.build/api/v1/apps/{id}/files/{fileId}' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"GET List background tasks /apps/{id}/tasks
List background tasks.
Access: app:read
curl -X GET 'https://launchbase.build/api/v1/apps/{id}/tasks' -H "Authorization: Bearer $LAUNCHBASE_TOKEN"POST Deploy a background task /apps/{id}/tasks
Omit schedule for an always-on worker. UTC schedules run at most every five minutes. Uses the app Hosting allowance. Poll the returned release and use release logs. Durable queues and retry logic belong in your app.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/tasks' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{
"name": "daily-report",
"sourceId": "REPLACE_WITH_SOURCE_ID",
"startCommand": "python daily_report.py",
"schedule": "0 9 * * *",
"requestId": "daily-report-001"
}'POST Pause a background task /apps/{id}/tasks/{serviceId}/pause
Pause a background task.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/tasks/{serviceId}/pause' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'POST Resume a background task /apps/{id}/tasks/{serviceId}/resume
Resume a background task.
Access: deploy:write
curl -X POST 'https://launchbase.build/api/v1/apps/{id}/tasks/{serviceId}/resume' -H "Authorization: Bearer $LAUNCHBASE_TOKEN" -H 'Content-Type: application/json' --data '{}'