← NovelThread

Website API

The website waitlist form has been removed. Download for Mac instead. The legacy waitlist API contract remains documented here. Discover it through the API catalog or read the OpenAPI specification.

Legacy waitlist endpoint

POST https://novelthread.app/public/v1/waitlist

The former website waitlist form is no longer available. The legacy submission contract requires a same-origin browser request, Content-Type: application/json, and a valid Cloudflare Turnstile token for the website hostname and action waitlist. Agents can discover this contract, but registration still requires the website's verification flow.

The user must explicitly accept the waitlist privacy terms. Do not fabricate consent or Turnstile tokens. There is no API key or unattended registration flow for this endpoint.

Request body

This example shows the required fields. The token placeholder must be replaced with a token from the website verification flow.

{
  "email": "writer@example.com",
  "consent": true,
  "policyVersion": "waitlist-2026-09-05",
  "turnstileToken": "REPLACE_WITH_TOKEN_FROM_WEBSITE"
}

Optional fields are reason (up to 1,000 characters) and workField (up to 120 characters). Omit website or leave it empty; it is an anti-spam field. Unrecognized fields are rejected. The full JSON body must fit within 16 KiB.

Responses and retries

Responses have no body. Repeated submissions for the same email do not overwrite its original entry. The response does not reveal whether an email was already registered.

202
Accepted, already registered, or silently discarded by the anti-spam honeypot. Empty body; does not disclose whether an email is registered.
400
Malformed JSON, invalid fields, missing consent, or outdated policy version.
403
Origin, client IP, or Turnstile verification failed.
405
Method not allowed. Use POST.
410
The waitlist is closed.
413
Request body exceeds 16 KiB.
415
Content-Type must be application/json.
429
Too many attempts. Retry after 60 seconds.
503
Configuration, verification, or storage is temporarily unavailable.

The endpoint allows five attempts per minute per IP. On 429, respect the Retry-After: 60 header. If verification expires, return to the form to obtain a fresh token. A 410 response means the waitlist is closed.

Discovery

GET /.well-known/api-catalog returns application/linkset+json. GET and HEAD responses include a Link header with rel="api-catalog", following RFC 9727. Catalog and specification reads require no login and remain available when the waitlist is closed.

This catalog covers the public website API. It does not grant access to private desktop, console, billing, or administration services. See the privacy policy for how waitlist information is handled.