> ## Documentation Index
> Fetch the complete documentation index at: https://formcarry.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ChatGPT

> ChatGPT writes a form that sends its submissions to formcarry, in Canvas from a chat or, with Codex, into your project.

The prompt goes into that chat or Codex task, and standing rules go into Custom Instructions or a Project in ChatGPT and into `AGENTS.md` for Codex.

## Connect over MCP

<Card title="Connect over MCP" icon="plug" href="/docs/connect" horizontal cta="See how to connect">
  Formcarry's MCP does everything you would do in the dashboard for your forms and submissions: create a form, set its recipients, spam blocker and webhooks, list and search submissions, mark spam, and read where each submission was delivered. Codex connects to it in the desktop app, the CLI and the IDE extension, so it manages the form it built instead of only writing the front end.
</Card>

## Prerequisites

Before you start, you need:

* A formcarry account. [Sign up](https://app.formcarry.com/register) is free.
* A form in the [dashboard](https://app.formcarry.com). Its endpoint is on the form's Setup page. The examples use `https://formcarry.com/s/AbC123xyz`; put yours in its place.
* The form's name and id from its page in the dashboard, for the prompt.

## 1. Provide the instructions

To connect the form, paste this prompt with your form's name and id in the placeholders:

```text theme={null}
Read https://formcarry.com/llms.txt for how the front end setup works, then connect my formcarry form "<form name>" (id <form_id>) to the form in this project, send a test submission and tell me what you changed.
```

In ChatGPT, paste it into a chat and edit the code in Canvas. To have every chat read llms.txt, put its link under Settings, Personalization, Custom Instructions, or into a Project's instructions or files. Inside a Project, the Project's instructions override your Custom Instructions.

In Codex, open the project and paste the prompt as the task. The project opens with `codex` in its directory, in the IDE extension, or as a local project in the ChatGPT desktop app. Rules for every task go into `AGENTS.md` at the repository root, and `/init` creates one. Codex reads it before doing any work.

## 2. Check what it changed

In ChatGPT, the code is in Canvas. In Codex, it is in the diff: the CLI shows the diff as it appears, the IDE extension shows it beside a summary, and the desktop app shows it in its diff pane.

Check the endpoint in the form's `action`, `method="POST"`, a `name` on every field and `email` on the address field. To check a plain HTML form, compare it with this one:

```html theme={null}
<form action="https://formcarry.com/s/AbC123xyz" method="POST">
  <input type="email" name="email">
  <textarea name="message"></textarea>
  <button type="submit">Send</button>
</form>
```

Without `method="POST"` the browser sends a GET and formcarry answers with a page that says GET is not allowed. A field without a `name` is not sent at all. `email` becomes the reply to address of the notification email and the recipient of the auto response.

When it posts from JavaScript, the endpoint is the `fetch` URL and the request also carries `Accept: application/json`:

```js theme={null}
const res = await fetch("https://formcarry.com/s/AbC123xyz", {
  method: "POST",
  headers: { "Accept": "application/json", "Content-Type": "application/json" },
  body: JSON.stringify({ email, message }),
})
const data = await res.json()
```

The keys of the JSON body are the field names formcarry stores. Without the `Accept` header the answer is the thank you page's HTML, so there is no `data.code` to read.

If it wrote a server route instead, reply "post to formcarry from the browser", otherwise no spam blocker token exists.

## 3. Send a test submission

Copy the code out of Canvas into your project and submit it from the browser there. OpenAI's docs do not say whether a Canvas preview can reach an outside URL. With Codex, start the site yourself and submit from the browser.

The submission is on the form's page in the dashboard, and the notification email is in your inbox. With `Accept: application/json`, a stored submission answers with:

```json theme={null}
{ "code": 200, "status": "success", "title": "Thank You!", "message": "We received your submission" }
```

A second test inside 15 seconds gets a `429` that says "Wait 15 seconds before making another request": 1 submission per 15 seconds per form per IP address.

## What Codex cannot do

* Codex asks before using the internet, so approve its test submission or send one yourself. On your machine its test and yours come from one IP address, so wait 15 seconds between them, otherwise the second gets a `429`.
* Codex cloud blocks internet access during the agent phase by default, so a cloud task cannot send the test. Review the diff, open the pull request, and test after you pull.

## What's next

* [What every form needs](/docs/what-every-form-needs): field names, hidden inputs, limits and the answers.
* [Spam protection](/docs/features/spam-protection): add a challenge once the form is live.
* [Connect over MCP](/docs/connect): let the tool manage the form, not only write it.

Stuck? Write to [help@formcarry.com](mailto:help@formcarry.com). Include the form id.


## Related topics

- [Build with AI](/docs/ai/overview.md)
- [Introduction](/docs/introduction.md)
- [Replit](/docs/ai/replit.md)
- [Lovable](/docs/ai/lovable.md)
- [v0](/docs/ai/v0.md)
