API Reference
Base URL: https://api.warpweb.ai. All requests require Bearer authentication. All bodies are JSON.
Endpoints
Discovery
| Method | Path | Purpose |
|---|---|---|
POST | /v1/businesses/search | Disambiguate a business name against Google Places before building (free). Quickstart sends you here first. |
Sites
| Method | Path | Purpose |
|---|---|---|
POST | /v1/sites | Create a new site (research + build + deploy, async). |
GET | /v1/sites | List your sites. Use as a free auth-check too — a fresh account returns { "sites": [] }. |
GET | /v1/sites/:id | Get a site’s status and metadata. |
POST | /v1/sites/:id/revisions | Request a natural-language revision. |
POST | /v1/sites/:id/refresh | Refresh a free-subdomain site (free, idempotent). |
GET | /v1/sites/:id/export | Download the site as a ZIP — every page, image, favicon (free, 10/day/site). |
POST | /v1/sites/:id/logo | Swap the nav + footer logo image (free, deterministic). |
POST | /v1/sites/:id/favicon | Swap the favicon source image without touching the nav logo (free, deterministic). |
Domains
| Method | Path | Purpose |
|---|---|---|
POST | /v1/sites/:id/domains | Attach a domain you already own (5 credits). |
DELETE | /v1/sites/:id/domains/:domain | Detach a custom domain — stops paid hosting on that one site, keeps the free subdomain (free). |
POST | /v1/domains/check | Check domain availability and price (free). |
POST | /v1/domains/register | Buy a new domain and auto-attach (50 credits + registrar fee). |
Webhooks (per-site + customer-level)
| Method | Path | Purpose |
|---|---|---|
POST | /v1/sites/:id/webhooks/forms | Configure form-submission webhook for a site (free). |
POST | /v1/sites/:id/webhooks/forms/test | Fire a synthetic test submission (free). |
POST | /v1/sites/:id/webhook/test-ping | Fire any lifecycle event type at the per-site URL — exercises your event-type router (free). |
POST | /v1/sites/:id/webhook/regenerate-secret | Rotate the per-site form-webhook signing secret (free). |
GET | /v1/customer/webhook | Read the customer-level lifecycle webhook config. |
PUT | /v1/customer/webhook | Set the lifecycle webhook URL. |
POST | /v1/customer/webhook/regenerate-secret | Rotate the lifecycle signing secret. |
POST | /v1/customer/webhook/test-ping | Send a synthetic lifecycle event. |
PATCH | /v1/customer/webhook/subscriptions | Pick which lifecycle event types to receive. |
See Webhooks for the event catalog and payload shapes.
Common conventions
IDs. Site IDs and revision IDs are UUIDs. Always treat them as opaque strings.
Field naming varies by surface. Field naming follows whichever surface you’re touching — see the per-endpoint Request and Response sections, which are authoritative. (Quickstart Step 3 includes a short cheat sheet for the camelCase/snake_case split when you chain create → get.)
Timestamps. ISO 8601 UTC, e.g. 2026-05-17T14:23:11Z.
Async operations. POST /v1/sites and POST /v1/sites/:id/revisions return immediately with an id and status: "generating" / status: "pending". The final result arrives via lifecycle webhook (preferred) or by polling GET /v1/sites/:id.
Idempotency.
POST /v1/sites/:id/refresh— idempotent (safe to retry any number of times).POST /v1/sites/:id/webhooks/formswith the samewebhook_url— idempotent; won’t re-issue the secret unlessrotate_secret: true.POST /v1/sites/:id/domains(external attach) — idempotent at the CDN layer; safe to retry.POST /v1/sites— not idempotent; each call kicks off a fresh build. Dedupe on your side byplaceId(ormapsUrl, normalized) if you need it.- Webhook deliveries — dedupe on
event_id(UUID, stable across retries).
Errors. Non-2xx responses return JSON with an error field:
{
"error": "Site not found"
}See Error shapes for the full envelope reference (optional hint, reason, suggestion, quota fields and which endpoints emit them).
| Status | Meaning |
|---|---|
| 400 | Malformed request body or invalid parameters. |
| 401 | Missing or invalid API key. |
| 402 | Insufficient credits — top up at app.warpweb.ai/billing. |
| 403 | Authenticated but not authorized for this resource. |
| 404 | Resource not found, or path outside V1 scope (we return the same 404 for both to avoid leaking which endpoints exist). |
| 422 | Validation failed, or the agent ruled the request out of scope (revisions). For out-of-scope revisions the body is { "error": "out_of_scope", "reason": "<human-readable explanation>", "suggestion": "<in-scope alternative>" } — surface suggestion to your user. |
| 429 | Rate-limit or quota exceeded. See Authentication → Rate limits. |
| 500 | Unexpected error. Safe to retry with exponential backoff. |
| 502 | Upstream (DNS / CDN) failure during domain operations. |
| 503 | Temporary maintenance, or registrar transient (rate limit / WHOIS rejection). |
Credit-eligible operations deduct from your balance on success. Failed operations don’t charge. See Pricing & Credits for the cost table.