API ReferenceOverview

API Reference

Base URL: https://api.warpweb.ai. All requests require Bearer authentication. All bodies are JSON.

Endpoints

Discovery

MethodPathPurpose
POST/v1/businesses/searchDisambiguate a business name against Google Places before building (free). Quickstart sends you here first.

Sites

MethodPathPurpose
POST/v1/sitesCreate a new site (research + build + deploy, async).
GET/v1/sitesList your sites. Use as a free auth-check too — a fresh account returns { "sites": [] }.
GET/v1/sites/:idGet a site’s status and metadata.
POST/v1/sites/:id/revisionsRequest a natural-language revision.
POST/v1/sites/:id/refreshRefresh a free-subdomain site (free, idempotent).
GET/v1/sites/:id/exportDownload the site as a ZIP — every page, image, favicon (free, 10/day/site).
POST/v1/sites/:id/logoSwap the nav + footer logo image (free, deterministic).
POST/v1/sites/:id/faviconSwap the favicon source image without touching the nav logo (free, deterministic).

Domains

MethodPathPurpose
POST/v1/sites/:id/domainsAttach a domain you already own (5 credits).
DELETE/v1/sites/:id/domains/:domainDetach a custom domain — stops paid hosting on that one site, keeps the free subdomain (free).
POST/v1/domains/checkCheck domain availability and price (free).
POST/v1/domains/registerBuy a new domain and auto-attach (50 credits + registrar fee).

Webhooks (per-site + customer-level)

MethodPathPurpose
POST/v1/sites/:id/webhooks/formsConfigure form-submission webhook for a site (free).
POST/v1/sites/:id/webhooks/forms/testFire a synthetic test submission (free).
POST/v1/sites/:id/webhook/test-pingFire any lifecycle event type at the per-site URL — exercises your event-type router (free).
POST/v1/sites/:id/webhook/regenerate-secretRotate the per-site form-webhook signing secret (free).
GET/v1/customer/webhookRead the customer-level lifecycle webhook config.
PUT/v1/customer/webhookSet the lifecycle webhook URL.
POST/v1/customer/webhook/regenerate-secretRotate the lifecycle signing secret.
POST/v1/customer/webhook/test-pingSend a synthetic lifecycle event.
PATCH/v1/customer/webhook/subscriptionsPick 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/forms with the same webhook_url — idempotent; won’t re-issue the secret unless rotate_secret: true.
  • POST /v1/sites/:id/domains (external attach) — idempotent at the CDN layer; safe to retry.
  • POST /v1/sitesnot idempotent; each call kicks off a fresh build. Dedupe on your side by placeId (or mapsUrl, 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).

StatusMeaning
400Malformed request body or invalid parameters.
401Missing or invalid API key.
402Insufficient credits — top up at app.warpweb.ai/billing.
403Authenticated but not authorized for this resource.
404Resource not found, or path outside V1 scope (we return the same 404 for both to avoid leaking which endpoints exist).
422Validation 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.
429Rate-limit or quota exceeded. See Authentication → Rate limits.
500Unexpected error. Safe to retry with exponential backoff.
502Upstream (DNS / CDN) failure during domain operations.
503Temporary 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.