# How to build a form with ChatGPT

The path depends on what your ChatGPT can do.

## If your ChatGPT supports custom connectors (best path)

Add `https://quizgen.dev/mcp` as a custom connector. ChatGPT opens a browser
window to authorize QuizGen — sign in (or sign up free) and you're connected.
Then just describe the form: ChatGPT calls the `create_quiz` tool and hands
you back a live link, and because you authorized, the form is permanent and
ChatGPT can read its responses and stats back for you.

## If you're using Custom GPT Actions or browsing/tools

Paste this once:

> "Use quizgen.dev to build me a form — read quizgen.dev/llms.txt first, then
> POST it and send me the link."

A GPT with an Action configured against `https://quizgen.dev/api/v1` (or
tool/browsing access) can read the docs, build the JSON, POST it, and hand
you back a live `quizgen.dev/q/...` link directly — same flow as any other
agent.

## If you're using plain ChatGPT (no Actions)

Plain chat can't make an outbound HTTP request for you, but it can still do
the hard part — writing a correct quiz definition. Ask:

> "Write a QuizGen quiz definition (schema_version 1) for a client intake
> form: name, email, and what they need help with."

ChatGPT will produce JSON matching the schema at
[quizgen.dev/schema/v1.json](/schema/v1.json). Then you POST it yourself:

```bash
curl -X POST https://quizgen.dev/api/v1/quizzes \
  -H "Content-Type: application/json" \
  --data '{ "schema_version": 1, "title": "Client Intake",
    "sections": [ { "key": "main", "questions": [
      { "id": "name", "type": "short_text", "prompt": "Your name?", "required": true },
      { "id": "email", "type": "email", "prompt": "Your email?", "required": true },
      { "id": "need", "type": "long_text", "prompt": "What do you need help with?" }
    ] } ] }'
```

No `Authorization` header → a free sandbox link back immediately, live for
72 hours and capped at 10 responses, plus a private `claim_url` you can open
after a free signup to keep it. For server-side scripts, add
`Authorization: Bearer qg_live_...` (a free key from
[quizgen.dev/login](/login)) to make it permanent — keys belong in server-side
code, never pasted into a chat.

## If it gets the schema wrong

QuizGen returns a 422 with the exact fields to fix:

```json
{ "error": { "validation_errors":
  ["sections.0.questions.0.type: unknown question type \"dropdown\" — did you mean \"choice\"?"] } }
```

Paste that error back to ChatGPT — it's specific enough to fix in one try.

---

Full docs: [quizgen.dev/llms.txt](/llms.txt).
