Skip to main content

Sandbox API

Endpoints for managing developer sandbox lifecycle.

POST /api/v1/sandbox/provision

Provision a new developer sandbox. No authentication required.

Rate limit: 3 requests per IP per hour.

Request

{
"email": "dev@example.com",
"company_name": "Acme Corp",
"use_case": "Monitoring LLM agents in production"
}
FieldTypeRequiredDescription
emailstringYesWork email (no disposable domains)
company_namestringYesCompany name (2-255 chars)
use_casestringNoWhat you're building (max 1000 chars)

Response (201)

{
"success": true,
"org_id": 42,
"login_url": "https://pilot.owkai.app/org/acme-corp-a1b2c3/login",
"api_key": "ask_sbx_xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"expires_at": "2026-04-24T00:00:00Z",
"dashboard_url": "https://pilot.owkai.app/org/acme-corp-a1b2c3/dashboard",
"docs_url": "https://docs.ascendowkai.com/getting-started/quick-start"
}

Errors

StatusDetail
409Email already registered for a sandbox
422Invalid email or disposable domain
429Rate limit exceeded (3/hour/IP)
500Provisioning failed

GET /api/v1/sandbox/status

Get sandbox status for the current organization.

Authentication: JWT or API key (Authorization: Bearer header).

Response (200)

{
"is_sandbox": true,
"status": "active",
"expires_at": "2026-04-24T00:00:00Z",
"days_remaining": 12,
"usage": {
"agents": { "used": 2, "limit": 3 },
"actions": { "used": 847, "limit": 10000 },
"mcp_servers": { "used": 1, "limit": 2 }
},
"conversion_url": "https://pilot.owkai.app/org/acme-corp-a1b2c3/upgrade"
}

For non-sandbox organizations, returns { "is_sandbox": false, "status": "not_sandbox" }.


POST /api/v1/sandbox/convert

Convert a sandbox to a paid subscription via Stripe checkout.

Authentication: JWT only (human action, not API key).

Request

{
"tier_name": "growth"
}
FieldTypeValues
tier_namestringgrowth, enterprise, mega

Response (200)

{
"success": true,
"checkout_url": "https://checkout.stripe.com/c/pay_xxxxx"
}

Redirect the user to checkout_url to complete payment. After successful payment, the sandbox is converted: is_sandbox is set to false, limits are upgraded, and the expiry is removed.

Errors

StatusDetail
400Not a sandbox organization
403No organization context or API key auth (JWT required)
500Failed to create checkout session