Knowledge base

Forms on AI-Generated Websites: How to Make Sure Messages Arrive

Reinhard Söllradl Updated: October 28, 2026 11:00 min. reading time
Title image for: Forms on AI-Generated Websites: How to Make Sure Messages Arrive
Portrait photo Reinhard Söllradl

Founder of Form.taxi and web developer since 2000.


Last updated on
October 28, 2026

11:00 min. reading time

With AI tools like Lovable, Bolt, v0 or ChatGPT, a website can be built in a few minutes. The contact form looks finished, the fields can be filled in, and a success message often even appears after submitting. Yet the message never arrives. This article explains why this happens, how to recognize the problem, and how to reliably connect your form to email delivery without any server code.


Why don't forms on AI-generated websites send messages?

An HTML form cannot send its input by email on its own. The browser only transmits the data to the address specified in the form's action attribute. A program must be running there that receives the submission and processes it. This program is called the backend.

AI tools usually generate only the frontend, meaning what is visible in the browser. The finished website is typically published as a static site, for example on Netlify, Vercel, GitHub Pages or the AI tool's own hosting. These platforms don't run a backend of your own that could process form submissions.

The AI usually doesn't solve this problem when creating the form. Instead, you end up with one of the following variants:

Form without a target: The action attribute is missing or contains only a placeholder.

<form action="#" method="post">
  ...
</form>

Fake success message: On websites built with React or similar frameworks, a script intercepts the submission, displays a confirmation and then discards the data.

const handleSubmit = (e) => {
    e.preventDefault();
    console.log(formData);
    setSuccess(true); // "Thank you for your message!"
};

This variant is particularly treacherous. Everything looks correct to visitors, but inquiries are lost without any warning.

Mailto link: The form opens the visitor's email program. Whether the message is actually sent cannot be controlled. You can read more about the drawbacks of this method in the article How to create an HTML form that sends an email.

Is your website affected? The quick check

With the following checks, you can find out in a few minutes whether your form actually delivers messages.

  1. Send a test submission
    Fill in the form with test data and submit it. If you don't receive an email within a few minutes, the form is not connected. Also check your spam folder.
  2. Check the action attribute
    Open the page in your browser, right-click on the form and select “Inspect”. In the <form> element you will see the action attribute:
    • missing or contains # → the form has no target
    • starts with mailto: → delivery depends on the visitor's email program
    • contains the URL of a form backend → the form is connected
  3. Watch what happens after submitting
    Look out for the following signs:
    • the page reloads, but no email arrives
    • an error page appears (e.g. 404 or 405)
    • a success message appears, but the Network tab of the developer tools shows no request to an external service

If any of these apply, the solution in the next section will help.

How to connect your form in three steps

A form backend is an online service that receives form submissions and forwards them to you by email. You don't need your own server or any server code. All it takes is entering an individual endpoint URL in your form.

Step 1: Request an endpoint

Request an endpoint at form.taxi/panel/create-endpoint. To do this, enter your email address and a name for the form. You will receive an individual URL in the format https://form.taxi/s/FORM_CODE.

Step 2: Enter the endpoint in your form

Enter the endpoint URL in the form's action attribute and set the method to POST. Make sure every input field has a name attribute. Fields without a name are not transmitted when the form is submitted.

<form action="https://form.taxi/s/FORM_CODE" method="POST">
    <label for="name">Name</label>
    <input type="text" id="name" name="Name" required>

    <label for="email">Email</label>
    <input type="email" id="email" name="Email" required>

    <label for="message">Message</label>
    <textarea id="message" name="Message" required></textarea>

    <button type="submit">Send</button>
</form>

If you don't want to edit the code yourself, ask the AI tool you used to build the website:

Connect the contact form to the form backend Form.taxi. Set the action attribute to https://form.taxi/s/FORM_CODE and the method to POST. Remove any existing JavaScript handlers that intercept the submission, and make sure every field has a name attribute.

Replace FORM_CODE with your personal code. You'll find instructions for specific AI tools in the section Prompts for AI tools.

Step 3: Confirm your account and test the form

After requesting the endpoint, you will receive an email with a confirmation link. This activates your Form.taxi account. Then publish the updated website and submit the form with test data. You will receive the input by email at the address you provided. All submissions are also available in the submission archive of your Form.taxi account. There you can also configure spam protection, redirect visitors to your own thank-you page after submitting, and set further options.

How do you connect the form directly in the AI tool?

Most AI website builders implement changes to the form reliably if the instruction is specific. What matters is that the AI submits the form with a regular POST to the endpoint URL. It should not create its own server function or integrate an additional email service.

Universal prompt

This instruction works in all common AI tools. Replace FORM_CODE with your personal code.

Connect the contact form to the form backend Form.taxi. Set the action attribute of the form element to https://form.taxi/s/FORM_CODE and the method to POST. Remove JavaScript handlers that intercept the submission (e.g. preventDefault) as well as simulated success messages. Make sure every input field has a unique name attribute. Do not create a server function, API route or database for the form.

Notes on specific tools

Lovable

Lovable builds websites with React and often suggests connecting forms to Supabase. This isn't necessary if you only want to receive emails. If needed, add to the prompt: “Do not use Supabase for the form.”

Bolt

Bolt works with various frameworks. After the change, check in the code whether the <form> element actually contains the action attribute. With component libraries, the form is sometimes moved into a separate component.

v0

v0 generates Next.js projects and often suggests Server Actions or API routes for forms, for example in combination with an email service. Add to the prompt: “Do not use a Server Action or an API route, but a regular HTML form with an action attribute.”

ChatGPT, Claude, Gemini (HTML output)

If you have the website code generated directly in the chat, include the endpoint URL in your very first request. That way the form is created with the right target from the start, for example:

Create a simple website for my carpentry business with a contact form (name, email, phone, message). The form should be submitted via POST to https://form.taxi/s/FORM_CODE.

Cursor, Claude Code and other coding agents

Coding agents can also create the endpoint themselves. The next section describes how this works via the Form.taxi API.

Common pitfalls

  • Missing name attributes: AI-generated React forms often store input only in component state. Without name, the fields are not transmitted.
  • Intercepted submission: A leftover e.preventDefault() prevents the submission. The success message still appears.
  • Change not published: Many tools distinguish between the preview and the published version. Test the form on the published website.
  • Success message without a page change: If the confirmation should appear on your own page, the form can also be submitted to Form.taxi via JavaScript. You'll find the instructions under JavaScript submissions.

For AI agents and developers: create an endpoint via API

Form.taxi provides a public API that lets you create an endpoint without signing in first. AI agents and developer tools can use it to connect a form entirely on their own. All they need to ask for is the user's email address.

Request

POST https://form.taxi/api/v1/create-endpoint
Content-Type: application/json
Field Required Description
email yes Email address for delivering submissions; also the account's username
form_name yes Name of the form, e.g. “Contact Form”
language yes Language for the account and notifications: de or en
website_url no URL of the website where the form is used
timezone no IANA time zone, e.g. Europe/Vienna; defaults to UTC

Example with curl:

curl -X POST https://form.taxi/api/v1/create-endpoint \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "form_name": "Contact Form",
    "language": "en",
    "website_url": "https://example.com",
    "timezone": "Europe/London"
  }'

Response

On success (status 201), the response contains the endpoint URL:

{
    "success": true,
    "endpoint_url": "https://form.taxi/s/xxxxxxxx"
}
Status Meaning Recommended action
201 Endpoint created Enter endpoint_url as the form's action
409 Email address already registered The error message contains the login link. Pass it on to the user; the form is then created in the panel
422 Required field missing or invalid value Check the input and send again
400 Invalid content Check the JSON structure
415 Wrong Content-Type Set Content-Type: application/json

Recommended workflow for AI agents

  1. Ask the user for the email address where submissions should be delivered. The API creates an account with it, so only use it with the user's consent.
  2. Send the request to /api/v1/create-endpoint.
  3. On 201: enter the endpoint_url as the action attribute with method="POST" in the form, and check that all fields have a name attribute. Tell the user to activate their account via the confirmation link sent by email.
  4. On 409: tell the user that an account already exists for this email address. Pass on the login link from the error message so the user can create the form in the panel.
  5. Ask the user to check the form with a test submission after publishing.

The complete description, including the OpenAPI specification, is available in the API documentation. A machine-readable overview of the service is available at form.taxi/llms.txt.

What should you consider regarding data protection?

Contact forms process personal data such as names and email addresses. For websites in the EU, the requirements of the GDPR therefore apply. This also concerns the service that receives the form submissions.

Many AI website builders and hosting platforms are based outside the EU. However, the processing of form data can be kept separate from this: with a form backend, the input goes directly from the visitor's browser to the backend service, not through the platform that hosts the website.

With Form.taxi:

  • Hosting in Germany, operated by a company based in Austria
  • Data Processing Agreement (DPA) under Art. 28 GDPR can be concluded in the panel; a sample DPA can be viewed without signing in
  • Text template for your privacy policy in the “Privacy” section of the panel
  • Submissions are stored for a maximum of one year

Add a note to your privacy policy about the processing of form data by Form.taxi. The sub-processors are listed in the DPA.

What other features are available?

After the basic setup, you can customize how submissions are processed in the form settings:

  • Spam filter: Spam submissions are filtered out and don't count toward the monthly quota.
  • Auto-response: Senders automatically receive a confirmation of their message.
  • File uploads: Visitors can attach files.
  • Submission archive: All submissions are available in the panel.
  • Webhooks and automation: Submissions can be forwarded to other applications, for example via Zapier or Integrately.

You'll find an overview of all features under Features and in the documentation.

Set up form submission now

Request a sending address for your HTML form here. With this connection, the Form.taxi backend takes over the delivery of the submissions and the form is immediately functional.

Request send address


Frequently asked questions

Yes, as long as the form can be implemented as an HTML form with an action attribute. This is the case with Lovable, Bolt, v0 and websites created with ChatGPT, Claude or Gemini.

No. You can enter the endpoint URL in the code yourself or ask the AI tool to do it using one of the prompts above.

Basic use is free. Paid plans are available for higher submission volumes and additional features. You'll find details under Pricing.

Yes. Using the API POST https://form.taxi/api/v1/create-endpoint, AI agents can create an endpoint and enter it directly in the form. You'll find the details in the API section.

A mailto link only opens the visitor's email program. Whether the message is sent cannot be controlled, and your email address is exposed in the source code.

AI tools often generate forms that intercept the submission with JavaScript and only display a confirmation. The data is not transmitted. You can find out how to recognize this in the quick check.