Subdomains
Every Invoker deployment gets a unique subdomain on invoker.page. This page explains how subdomain routing works.
URL structure
When you deploy a page, it becomes available at:
https://{slug}.invoker.pageFor example, deploying with the slug my-waitlist produces:
https://my-waitlist.invoker.pageCustom vs auto-generated slugs
Custom slugs
You can specify a slug at deploy time. Slugs must be:
- Lowercase letters, numbers, and hyphens only
- No leading or trailing hyphens
curl -X POST https://api.invoker.page/deploy \
-H "Authorization: Bearer inv_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"html": "<h1>Hello</h1>",
"slug": "acme-launch"
}'Result: https://acme-launch.invoker.page
Auto-generated slugs
If you omit the slug field, Invoker generates one automatically. Auto-generated slugs are short random strings.
{
"id": "d_abc123",
"url": "https://kf7x2m.invoker.page",
"slug": "kf7x2m"
}How routing works
Subdomain routing relies on two pieces of infrastructure:
Wildcard DNS
A wildcard DNS record on *.invoker.page points all subdomains to the Cloudflare Worker. Any request to anything.invoker.page reaches the same worker.
Worker routing
When the Cloudflare Worker receives a request, it:
- Extracts the subdomain from the
Hostheader (e.g.,my-waitlistfrommy-waitlist.invoker.page) - Looks up
{slug}/index.htmlin Cloudflare KV - If found, serves the HTML with appropriate headers
- If not found, returns a 404 page
Request: GET https://my-waitlist.invoker.page/
-> Host: my-waitlist.invoker.page
-> Slug: my-waitlist
-> KV lookup: my-waitlist/index.html
-> Serve HTMLReserved subdomains
The following subdomains are reserved and cannot be used as deployment slugs:
| Subdomain | Purpose |
|---|---|
api | API endpoint (api.invoker.page) |
docs | Documentation site (docs.invoker.page) |
www | Main website (www.invoker.page) |
Attempting to deploy with a reserved slug returns a 400 error.
Legacy path routing
For backward compatibility, deployments are also accessible via path-based URLs:
https://invoker.page/s/{slug}This redirects to the subdomain URL. New integrations should use the subdomain format directly.