---
title: "Agent-initiated onboarding, step 1: submit the founder's site URL + email. The founder gets ONE approval email; nothing runs (and nothing is spent) until they click it. No authentication (this flow is how a key is obtained). Rate limited per IP and per email; one live request per email at a time. Different people may analyse the same public site in separate accounts."
method: POST
path: "/api/v1/onboard/start"
---

# Agent-initiated onboarding, step 1: submit the founder's site URL + email. The founder gets ONE approval email; nothing runs (and nothing is spent) until they click it. No authentication (this flow is how a key is obtained). Rate limited per IP and per email; one live request per email at a time. Different people may analyse the same public site in separate accounts.

`POST /api/v1/onboard/start`

## Request

- Base URL: `https://afterlaunch.io`
- URL: `https://afterlaunch.io/api/v1/onboard/start`
- Auth: none required

## Request body

- object
  - `url` string, required: The founder's site, http(s).
  - `email` string, required: The founder's email; receives the approval link.
  - `agent_label` string: Optional: who is asking (shown to the founder).

## Response `201`

Pending approval. Returns device_code (poll with it), poll_interval_seconds, expires_at.

## Other responses

- `400`: Invalid url or email, or a body that does not match the schema. The body is strict: unknown fields are rejected.
- `404`: Agent onboarding is not open.
- `409`: trial_used (email already had its free trial) or pending_exists (a live request already awaits approval).
- `429`: Rate limited. Honour Retry-After.
- `502`: The approval email could not be sent; nothing was created.

---

[API](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api.md) · [All operations](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api/revisions/d67a599194a4?raw)
