The production routes Quest exposes today.
Use these endpoints to fetch published onboarding payloads and inspect available starter templates. All examples reflect the current server responses in this repo.
Base URL
https://quest.nanocorp.app
Response shape
Quest returns JSON for all documented routes. Error responses use an `error` field with a relevant status code.
Authentication
Published onboarding config
`GET /api/onboarding/[projectId]` requires the published project API key. Send it in the `X-Quest-Api-Key` header. For quick testing, the same value can also be passed as `apiKey` or `api_key` query params.
Templates
`GET /api/templates` does not require a custom auth header. If the request is made from a signed-in Quest session, the response includes workspace upgrade details in the `workspace` field. Otherwise `workspace` is `null`.
GET endpoint
/api/onboarding/[projectId]
Returns published onboarding JSON
Fetch the latest published configuration for a specific Quest project. The route returns only published projects and rejects missing or invalid API keys.
curl https://quest.nanocorp.app/api/onboarding/PROJECT_ID \
-H "X-Quest-Api-Key: quest_live_your_public_key"{
"project_id": "clx123",
"name": "Main onboarding",
"description": "Flow used on first app open",
"published_at": "2026-04-07T12:34:56.000Z",
"screens": [
{
"id": "screen_1",
"name": "Welcome",
"type": "welcome",
"position": 0,
"content": {
"screenType": "welcome",
"title": { "text": "Welcome to your app" },
"subtitle": { "text": "Explain the first value quickly" },
"cta": { "text": "Get started" }
}
}
]
}Success
`200 OK` with the published project payload.
Auth errors
`401` when the API key is missing or invalid.
Missing publish
`404` when the project does not exist or has not been published yet.
GET endpoint
/api/templates
Lists available starter templates
Returns the templates visible in the current Quest instance. When requested from an authenticated browser session, the payload also includes workspace limits for template cloning and upgrade messaging.
curl https://quest.nanocorp.app/api/templates{
"templates": [
{
"id": "7285f9ac-c2c9-4c08-8adc-4046fca3cf11",
"name": "Starter welcome flow",
"description": "Simple intro screens for first-run activation",
"screen_count": 3,
"access_tier": "free",
"category": "Welcome / Intro",
"preview_icon": "Handshake",
"preview_label": "First-run welcome",
"preview_gradient_from": "#0f766e",
"preview_gradient_to": "#0ea5e9"
}
],
"workspace": {
"is_pro": false,
"free_project_limit": 1,
"existing_project_count": 0,
"upgrade_message": "Free workspaces are limited to 1 project. Upgrade to clone another template."
}
}No custom header required
This route can be fetched anonymously. Without an authenticated Quest session, the response still includes `templates` and returns `workspace: null`.
Error behavior
The route returns `500` with { "error": "Database error" } if the backing database query fails.