Forms & Booking
Forms and booking share one data model (a flow), so they share one set of endpoints, distinguished by the flow's kind (form or booking). Authoring requires a bearer token; the public render and submit endpoints need no auth.
Flow management (bearer)
GET /dashboard/flows?kind=form— list your flows.GET /dashboard/flows/{slug}— a flow's detail.POST /booking/flows— create a flow (setkindtoformorbooking).PATCH /booking/flows/{flow_id}— update a flow (fields, logic, screens, theme).POST /booking/flows/{flow_id}/publish— publish (draft → active). Gated.Versioning + locking: list versions, restore a version, lock/unlock — mirroring the page-locking model.
A flow's flow object holds its flow (steps + fields), logic, variables, hidden_fields, welcome_screens, thankyou_screens, and theme. See Building a Form for the field and logic model.
Public render (no auth)
GET /api/v1/booking/{flow_id}/render— returns the flow's render projection (fields, logic, variables, screens), honoring theAccept-Languageheader.
The customer-facing page for a flow is served by the renderer at
https://<your-site>/f/<flow_id>— that is the canonical URL to share or embed. The/renderAPI endpoint above is the data the renderer consumes. Never construct/book/<id>for akind='form'flow.
Public submit (no auth)
POST /api/v1/booking/{flow_id}/submit— submit answers for any flow kind. Idempotent (safe to retry). For bookings, this holds and books the slot and sends the calendar invite.
Example — submit answers:
curl -X POST "https://spideriq.ai/api/v1/booking/FLOW_ID/submit" \
-H "Content-Type: application/json" \
-d '{
"answers": { "email": "lead@example.com", "company": "Acme" },
"hidden_fields": { "utm_source": "newsletter" }
}'Submissions are written to your results store and synced into your CRM (per-tenant norm_cli_* schemas) within about a minute, based on each field's CRM mapping.
Submissions (bearer)
GET /dashboard/booking/flows/{flow_id}/submissions— list responses (paginated).GET /dashboard/booking/flows/{flow_id}/submissions.csv— export to CSV.
Templates (bearer)
GET /dashboard/booking/templates/global?kind=form— browse the global form-template library.POST /dashboard/booking/templates/clone— clone a template into your account as a draft.
The shipped form templates are contact-form, lead-gen-quiz, nps-survey, event-rsvp, and job-application.
Embedding
Forms embed three ways — standalone /f/<flow_id>, inline, and popup — using the loader at embed.spideriq.ai/v1/loader.js. See Embedding Forms for the snippets, or use the form_get_embed_snippet MCP tool / spideriq form embed-snippet CLI command to generate them.
Next steps
API Overview — base URL, auth, and the dry-run / confirm flow.
Building a Form — the field and logic model behind a flow.
Embedding Forms — standalone, inline, and popup snippets.
Booking — the booking variant of a flow.