API reference
PATCHUpdate a website request form
PATCH /v1/forms/{form_id}: Pause or resume, rename, edit the wording, replace the allowed websites, or change the instant preview (on/off; one image per request at 5 credits, images_per_lead 1 or 2 is accepted for compatibility and stored as 1; monthly credit cap 5
https://api.light-ai.app/v1/forms/{form_id}Pause or resume, rename, edit the wording, replace the allowed websites, or change the instant preview (on/off; one image per request at 5 credits, images_per_lead 1 or 2 is accepted for compatibility and stored as 1; monthly credit cap 5–5000; turning previews on without a cap sets 250). expected_updated_at is required (409 stale_state when the form changed). Changing the websites or turning previews on sends the account owners a notice and appears in Developers → Activity. Pro only; test keys are refused. Needs forms:write, which is never part of a preset.
| Scope | forms:write |
|---|---|
| Credential | API key: Authorization: Bearer lai_live_… (or lai_test_…). Partner keys add Light-AI-Organization. |
| Test mode | Live keys only (answers 400 test_mode_unsupported to a test key). |
Path parameters#
form_…). Id prefix form_.Headers#
org_…). Organization keys may omit it. Id prefix org_.2026-11-01.Request body#
active, paused.Response 200#
The updated form.
form_.form.active, paused, archived.christmas_lights, custom.ec_…).https://*.example.com wildcards).surfaces and primary_color, then contact details; the request is sent from the last question.color, choice, multi_choice, toggle, text.slider (default, a draggable before/after divider), flicker, day_night, bloom, sweep or curtain; slider_after hands the five other styles over to the slider when they end. The form's own choice, else the company default. Set in the app.slider, flicker, day_night, bloom, sweep, curtain.Errors#
| Status | Meaning |
|---|---|
400 | Bad request. bad_request, test_mode_mismatch, test_mode_unsupported, unsupported_api_version |
401 | Missing or invalid credential. authentication_required, invalid_api_key, api_key_revoked, api_key_expired, api_key_suspended |
403 | Not allowed. insufficient_scope, plan_upgrade_required, organization_paused, organization_off_season, api_disabled, api_access_not_enabled, ip_not_allowed, forbidden |
404 | Not found (also for objects of other organizations and for organizations without an active grant). |
409 | Conflict. stale_state, conflict, idempotency_in_progress, idempotency_scope_mismatch, quote_already_decided, quote_not_current, billing_review_required |
413 | Request bodies are limited to 256 KB. |
415 | The body is not JSON: send Content-Type: application/json. unsupported_media_type |
422 | Validation failed. idempotency_key_reused |
429 | Rate limited or daily cap reached. See Retry-After and the RateLimit headers. rate_limited, daily_cap_reached |
500 | Unexpected server error. Safe to retry with exponential backoff; quote the Request-Id to support. internal_error |
503 | Temporarily unavailable. Retry with exponential backoff. service_unavailable |