LaunchSurface API
Drive the Operator from your own code: create a venture, read the prospects and intent signals it finds, and decide the outreach it drafts.
Base URL and authentication
Every endpoint lives under https://api.launchsurface.ai. Requests and responses are JSON, including errors. Authenticate with a session JWT in the Authorization header. Endpoints documented as public need no token.
curl https://api.launchsurface.ai/ventures \
-H "Authorization: Bearer $LAUNCHSURFACE_TOKEN"Creating a venture
A venture is the unit Operator runs on. Create one from a product URL or a plain-language idea, then poll getVentureStatus while research completes.
curl -X POST https://api.launchsurface.ai/ingest \
-H "Authorization: Bearer $LAUNCHSURFACE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
{"ventureId": "…", "slug": "example", "status": "ingesting"}Errors
Failures return JSON with a stable machine-readable code, a human-readable message, a hint describing how to resolve it, and the correlation ID for that request. The same ID is on the X-Correlation-ID response header. Quote it when you contact support.
{
"error": "not_found",
"message": "No route matches GET /venture.",
"hint": "Consult the OpenAPI description at https://api.launchsurface.ai/openapi.json for the available operations.",
"correlationId": "e0ab8126-6ddd-4521-a08f-2e270d38f578"
}Rate limiting
Rate-limited endpoints return the RateLimit header family on every response, so a client can pace itself from the live counters rather than guessing. A rejected request returns 429 with Retry-After in seconds. Read the headers rather than hard-coding limits: they are the authority and they change.
RateLimit-Limit: 30
RateLimit-Remaining: 28
RateLimit-Reset: 47
RateLimit-Policy: ingest;q=30;w=60
# on a 429, additionally:
Retry-After: 47Operations
Each operation below carries a unique operation ID, typed parameters, and a response schema in the specification, so it can be loaded directly into a function-calling tool definition or a client generator.
| Operation | Endpoint | Summary |
|---|---|---|
| getHealth | GET /health | Service health (public) |
| createVenture | POST /ingest | Create a venture from a product URL or idea |
| listVentures | GET /ventures | List the authenticated user's ventures |
| getVenture | GET /ventures/{ventureId} | Get one venture |
| getVentureStatus | GET /ventures/{ventureId}/status | Get research and operator progress |
| listProspects | GET /ventures/{ventureId}/prospects | List discovered prospects |
| listIntentSignals | GET /ventures/{ventureId}/signals | List buying-intent signals |
| listPendingApprovals | GET /ventures/{ventureId}/approvals/pending | List approvals awaiting a decision |
| decideApproval | POST /ventures/{ventureId}/approvals/{approvalId}/decide | Approve or deny one pending approval |
| getVisibilityOverview | GET /ventures/{ventureId}/visibility/overview | Get AI-search visibility rollup |
| getCurrentUser | GET /auth/me | Get the authenticated user |
| listNotifications | GET /notifications | List notifications |
| resolveLaunchHost | GET /launch/resolve-host | Resolve a landing-page hostname to its venture (public) |
Machine-readable files
Agents can discover everything below without scraping a page. Any HTML page on this site also serves markdown when you send an Accept: text/markdown header, and blog posts additionally answer at their /md path.
- /openapi.jsonOpenAPI 3.1 description of the API surface.
- /llms.txtPlain-text site summary for language models.
- /.well-known/api-catalogRFC 9727 linkset pointing at the spec, docs, and status endpoint.
- /sitemap.xmlEvery indexable URL, with last-modified dates.
- /robots.txtCrawl policy, including explicit AI-agent permissions.
Support
Questions about the API, a schema that does not match what you received, or an endpoint you need that is not described yet: write to hello@launchsurface.ai with the correlation ID and we will take a look.