WaitForge Public API https://waitforge.com Base URL https://waitforge.com Auth none for /api/public/* (a Cloudflare Turnstile token is required on signup) CORS Access-Control-Allow-Origin: * on /api/public/* (embed from any site) Rate limit 120 requests / IP / minute Format JSON in, JSON out Postman/Insomnia collection: https://waitforge.com/api.postman.json OpenAPI 3.1 spec: https://waitforge.com/api.openapi.json ============================================================ GET /api/public/{slug}/config ------------------------------------------------------------ Returns a waitlist's public configuration. Edge-cached 60s. Use it to render your own custom signup form. curl https://waitforge.com/api/public/{slug}/config 200 → { "title": "Acme AI", "description": "Be the first to know.", "theme": { "primary": "#4f46e5", "bg": "#ffffff", "text": "#0f172a", "font": "system", "radius": "soft", "logo_url": "", "hero_image": "" }, "fields": { "name": true, "company": false, "twitter": false }, "branding": true, "turnstile_site_key": "0x4AAAAAAA..." } ============================================================ POST /api/public/{slug}/signup ------------------------------------------------------------ Adds a signup to a waitlist. "email" + "turnstile" are required; "name"/"company"/"twitter" are optional and only stored when the waitlist has that field enabled. "ref" is an optional referrer code. curl -X POST https://waitforge.com/api/public/{slug}/signup \ -H 'Content-Type: application/json' \ -d '{"email":"alice@example.com","name":"Alice","turnstile":"TURNSTILE_TOKEN"}' Request body: { "email": "alice@example.com", "name": "Alice", "company": "Acme Inc", "twitter": "alice", "ref": "AB3CD4EF", "turnstile": "TURNSTILE_TOKEN" } 200 (new) { "ok": true, "position": 47, "ref_code": "XY9ZW8V7", "share_path": "/w/{slug}?ref=XY9ZW8V7" } 200 (duplicate) { "ok": true, "duplicate": true, "position": 47, "ref_code": "XY9ZW8V7" } 400 invalid email / bad JSON / payload too large / honeypot triggered 403 Turnstile failed, or the waitlist is full 404 unknown slug 429 rate limited (120 / IP / min) 500 transient — safe to retry once ------------------------------------------------------------ Notes - Get a Turnstile token client-side using the "turnstile_site_key" from the config endpoint, then pass it in the signup POST. - The authenticated API (/api/waitlists/*, /api/account/*) requires a waitforge_session cookie from the magic-link login and powers the dashboard. It is not part of the public API. Need programmatic access? https://findutils.com/contact