Every install connects back to a control plane.
Double-gated auth: Bearer token (constant-time compare) plus per-token IP/CIDR whitelist.
Bearer + IP/CIDR. Two gates, zero exceptions.
Tokens are generated per admin user under Settings → Master API. Each token carries its own whitelist. A request must pass both gates to proceed.
Bearer token
hash_equals constant-time string comparison. Timing attacks don't leak token prefixes.
IP / CIDR whitelist
Per-token IPv4 or CIDR entries. X-Forwarded-For chain walked with trusted-proxy list.
CORS + Debug
Debug mode returns full request payloads. OPTIONS preflight returns per-origin Allow headers.
6 resources × 12 endpoints.
Every write requires a POST/PUT/DELETE with a valid token and an IP in the whitelist. GET is read-only but still double-gated.
Site
2 endpoints
/wah-api/v1/siteFetch site identity, post/page counts, active theme slug.
/wah-api/v1/siteUpdate site name, description, admin email, posts_per_page.
Posts
2 endpoints
/wah-api/v1/postsList posts with status, author, date filters. Pagination via ?page=2.
/wah-api/v1/postsCreate a published post with title, content, excerpt, tags array.
Pages
2 endpoints
/wah-api/v1/pagesList or get a single page by slug. Includes parent menu_order.
/wah-api/v1/pages/:idUpdate page content, template, menu order, published status.
Users
2 endpoints
/wah-api/v1/usersList all users with role, user_status, display_name, email_hash.
/wah-api/v1/users/:idSoft-delete (suspend) a user. Reassign posts to another user_id.
Themes
2 endpoints
/wah-api/v1/themesList installed themes with versions, active flag, screenshot URL.
/wah-api/v1/themesInstall a theme via zip_b64 payload OR zip_url TLS-validated pull.
Options
2 endpoints
/wah-api/v1/optionsBulk fetch autoloaded options. Pass ?keys=k1,k2 for filtered fetch.
/wah-api/v1/optionsBulk set key/value pairs. Types preserved via mixed serialization.
Two push-pull paths into the API.
The POST /wah-api/v1/themes endpoint accepts two mutually-exclusive payload shapes. One pushes a base64 zip, the other pulls from a signed URL.
zip_b64 push
Control plane base64-encodes the zip and ships it inline. Best for small themes (< 4 MB). Max payload size matches upload_max_filesize.
zip_url TLS-validated pull
WahPress fetches the zip itself over HTTPS. Certificate chain validated against system CA store. 30-second connect timeout.
A 200 OK from the Site resource.
Same styled monospace block as the home page integration section. Every endpoint responds with ok, a data envelope, and request_id for tracing.
Want us to build a connector?
We ship first-party SDKs in Node, PHP, and Go. Need a custom connector for your provisioning system, billing panel, or CI/CD pipeline? We build them.