api | install-astro | install-caddy | install-cloudflare | install-express | install-js-tag | install-netlify | install-nginx | install-shopify | install-squarespace | install-sveltekit | install-vercel-next | install-webflow | install-wix | install-wordpress | mcp | outcomes | privacy | quickstart | troubleshooting
Goal: a site sending events to Ambit Signal, verified, in about five minutes.
Sign in at https://signal.ambit.agency (magic link), open API keys, create one. It starts with sk_live_. Store it as AMBIT_SIGNAL_API_KEY in your shell or your agent's environment. Never commit it.
curl -s -X POST https://signal.ambit.agency/v1/sites \
-H "Authorization: Bearer $AMBIT_SIGNAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"example.com"}'
Response: {"ok": true, "site_id": "st_...", "domain": "example.com", "secret": "ss_..."}.
site_id is public. It goes in the JS tag.secret is shown once. Store it immediately as the AMBIT_SIGNAL_SECRET secret in the host's environment (Vercel, Cloudflare, Netlify, server env). Never commit it, never ship it to a browser.With MCP instead: create_site(domain="example.com", platform="vercel-next") returns the site, the secret and the install snippet with the secret already filled in.
| The site runs on | Use |
|---|---|
| Anything behind Cloudflare (proxied) | Cloudflare Worker |
| Vercel / Next.js | Next.js middleware |
| Node server | Express, Astro, SvelteKit |
| Netlify | Edge Function |
| WordPress | Plugin |
| Own server | nginx, Caddy |
| Webflow, Squarespace, Wix, Shopify, static host | JS tag (humans only) |
Or fetch the steps for your stack, pre-filled:
curl -s -H "Authorization: Bearer $AMBIT_SIGNAL_API_KEY" \
"https://signal.ambit.agency/v1/sites/st_YOURSITEID/snippet?platform=vercel-next"
Deploy through the project's normal process. Open any page on the live domain (not localhost, not a preview URL).
curl -s -H "Authorization: Bearer $AMBIT_SIGNAL_API_KEY" \
https://signal.ambit.agency/v1/sites/st_YOURSITEID/status
"receiving": true means it works. classes_seen shows what arrived (human, ai_crawler, ...). A JS-tag-only install never shows bot classes; that is expected. If nothing arrives within a few minutes, see troubleshooting.