# A client intake form template that's live before your next call

Most client intake form templates are a document you copy, reformat, and then
retype into some form builder. This one skips all of that: it's a complete,
valid QuizGen definition. POST it as-is and you get a hosted, mobile-friendly,
autosaving intake form at a short URL — or hand it to an AI assistant and say
"take this intake template and adapt it for a wedding photographer" before
posting.

## The template

```json
{
  "schema_version": 1,
  "kind": "form",
  "title": "New client intake",
  "description": "Three minutes now saves the first twenty of our call.",
  "sections": [
    {
      "key": "contact",
      "title": "About you",
      "questions": [
        { "id": "welcome", "type": "statement",
          "title": "Before we talk",
          "body": [
            "A few questions about you and the project so our first call starts at step two.",
            "Answers autosave — you can close the tab and pick up later."
          ] },
        { "id": "full_name", "type": "short_text", "prompt": "What's your name?",
          "required": true, "placeholder": "Jordan Smith" },
        { "id": "work_email", "type": "email", "prompt": "Best email to reach you?",
          "required": true, "placeholder": "you@company.com" }
      ]
    },
    {
      "key": "project",
      "title": "The project",
      "questions": [
        { "id": "service_type", "type": "choice",
          "prompt": "What do you need help with?", "required": true,
          "options": [
            { "value": "new_website", "label": "A new website",
              "detail": "Design and build from scratch" },
            { "value": "redesign", "label": "A redesign",
              "detail": "Existing site, new direction" },
            { "value": "ongoing_support", "label": "Ongoing support",
              "detail": "Retainer or maintenance" }
          ] },
        { "id": "current_site", "type": "short_text",
          "prompt": "What's the current site's address?",
          "placeholder": "https://",
          "show_if": { "question": "service_type", "op": "eq", "value": "redesign" } },
        { "id": "budget", "type": "number", "prompt": "Rough budget?",
          "help": "A ballpark is fine — it tells us which options to bring.",
          "min": 0, "unit": "USD" },
        { "id": "goals", "type": "long_text",
          "prompt": "What does success look like six months in?", "rows": 5,
          "examples": [
            "Double demo signups by Q4",
            "Stop losing mobile visitors at checkout"
          ] },
        { "id": "referral_source", "type": "multi_choice",
          "prompt": "How did you hear about us?", "min": 1, "max": 2,
          "options": [
            { "value": "search", "label": "Search" },
            { "value": "referral", "label": "A referral" },
            { "value": "social", "label": "Social media" },
            { "value": "other", "label": "Somewhere else" }
          ] }
      ]
    }
  ],
  "settings": {
    "completion": { "message": "Thanks — we'll review this before the call." }
  }
}
```

## Why it's shaped this way

The `statement` at the top isn't a question — it's an info panel with a
`title` and a `body` array of paragraphs, and it collects nothing. Use it to
set expectations ("this is short, it autosaves") so people actually finish.

The `current_site` question only appears when someone picks the redesign
option, via `show_if`: one condition referencing an earlier question
(`question` / `op` / `value`). New-build and retainer clients never see it,
and hidden questions are never required — so nobody gets stuck on a field
that doesn't apply to them.

The two sections — contact, then project — each render as their own page, so
the easy identity questions come first and the thinking questions get a screen
of their own.

## Customize it with an AI assistant

Because the template is plain JSON against a documented schema, any AI
assistant that has read [quizgen.dev/llms.txt](/llms.txt) can reshape it
reliably: swap `service_type` options for photography packages, add a date
question for the event, change the budget unit — then POST the result. That's
the whole point of a headless form service: the template is data, not
screenshots of someone else's form builder.

## Want it to qualify leads too?

Intake gathers the details; qualification scores them. If you want this form
to also sort respondents into "book a call now" vs. "nurture," add an
`outcomes` block with points per answer and score buckets — we've written
that up separately in
[the lead-qualification form that scores itself](/blog/lead-qualification-form-that-scores-itself.md),
and the two combine cleanly in one definition.

## Try it without an account

POST the template to `https://quizgen.dev/api/v1/quizzes` with no
`Authorization` header and it goes live immediately as a sandbox quiz: 72-hour
lifetime, capped at 10 responses, no updates or read-back. The response
includes a `claim_url` — keep it, it's the only way to claim the quiz into a
free account and keep its answers (you can also have it emailed by passing
your address in an `X-Creator-Email` header). When you're ready for a
permanent form, sign up free at [quizgen.dev/login](/login) — then open the
`claim_url` to keep this one, or connect `https://quizgen.dev/mcp` and
authorize so every new form is permanent.

---

Full schema, question types, and endpoints: [quizgen.dev/llms.txt](/llms.txt).
