Docs / API

Build with the API

Your apps, deployments and services. One API.

Create an API token

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 JSON

From source to live app

  1. Create an app: POST /apps.
  2. Select it: POST /apps/{id}/switch.
  3. Start its trial or request plan checkout.
  4. Poll the app until hosting is ready.
  5. Upload source or connect GitHub.
  6. 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 API

Requests 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 '{}'