Skip to content
UseWait Docs
Esc
navigateopen⌘Jpreview
On this page

Turnstile and BYOD

Manage custom Cloudflare Turnstile keys and connect your own Postgres or MySQL database over the API.

Two per-waitlist integrations round out full API control: custom Cloudflare Turnstile keys (spam protection on custom domains) and bring-your-own-database (signups stored in your own Postgres or MySQL).

Custom Turnstile keys

On a custom domain, UseWait’s own Turnstile keys cannot serve the widget, so you bring your own from the Cloudflare dashboard. Requires a plan with the custom-domain capability.

curl https://usewait.com/api/v1/waitlists/acme-robotics/turnstile \
  -H "Authorization: Bearer uw_live_YOUR_KEY"
curl -X PUT https://usewait.com/api/v1/waitlists/acme-robotics/turnstile \
  -H "Authorization: Bearer uw_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "siteKey": "0x4AAA...", "secretKey": "0x4AAB..." }'
curl -X DELETE https://usewait.com/api/v1/waitlists/acme-robotics/turnstile \
  -H "Authorization: Bearer uw_live_YOUR_KEY"
  • PUT is partial: omit a field to leave it unchanged, pass null to clear just that field. You can rotate the secret without re-entering the site key.
  • Secrets are never returned. Status responses only expose hasCustomSiteKey / hasCustomSecretKey booleans.

Bring your own database

Store signups in your own Postgres or MySQL instead of (from that point on) the internal database. Requires a plan with the database capability. Setup creates a table named waitlist_<slug> (hyphens become underscores) with columns id, email, name, position, referral_code, referred_by, metadata, created_at.

Test the connection

curl -X POST https://usewait.com/api/v1/waitlists/acme-robotics/database \
  -H "Authorization: Bearer uw_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "dbType": "postgres",
    "connectionString": "postgres://user:pass@host:5432/db",
    "testOnly": true
  }'

Run the setup

Same request without testOnly. On success the table is created and the connection persisted; new signups land in your database.

Detach when needed

curl -X DELETE https://usewait.com/api/v1/waitlists/acme-robotics/database \
  -H "Authorization: Bearer uw_live_YOUR_KEY"

Future signups return to the internal database. Rows already in your database stay yours.

GET on the same path reports the current state: dbType (internal, postgres, or mysql), whether a connection string is stored, and the table name.

White-label

White-label has no endpoint because it is a plan capability, not a setting: accounts with it may simply omit the “Made with UseWait” branding from their page code. Check it via GET /api/v1/me under capabilities.whiteLabel.

Was this page helpful?