# Quickstart

> Point any HTML form at Ikiform and receive your first submission in two minutes.

Ikiform is the backend for every form. You keep your own markup, framework and styles. Point the form at an Ikiform endpoint and Ikiform validates each post, filters spam, stores it in your workspace, emails you and delivers it to your systems by signed webhook.

Code samples in these docs use the sample form id `frm_xxxxxxxxxxxxxxxx`. Replace it with your own form's id, which you find on the form's overview in the dashboard.

## Pick how you send

Every form gets one public endpoint, `https://ikiform.com/f/<formId>`. Anything that can send an HTTP POST can use it.

| You send from | Use | Guide |
| --- | --- | --- |
| A plain HTML page or a site builder | `<form action>` | [HTML forms](https://ikiform.com/docs/html.md) |
| React, Next.js, Vue, Svelte, Astro | `fetch` or `submit` from the SDK | [Guides](https://ikiform.com/docs/guides/nextjs.md) |
| A backend, script or integration | JSON over HTTPS with a secret key | [From a server](https://ikiform.com/docs/guides/server.md) |
| A shadcn/ui project | The registry component | [shadcn/ui component](https://ikiform.com/docs/shadcn.md) |

## Quickstart

### Step 1: Create a form

Sign in to the [dashboard](https://ikiform.com/dashboard), create a workspace and add a form. Its overview shows the endpoint URL and ready-made snippets for HTML, JavaScript and React.

### Step 2: Point your form at the endpoint

Set the form's `action` to the endpoint and `method` to `post`. Every input with a `name` becomes a field of the submission.

`contact.html`:

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <input name="name" required />
  <input name="email" type="email" required />
  <textarea name="message"></textarea>
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send</button>
</form>
```

The hidden `_gotcha` input is a honeypot. People never see it; bots that fill it in are stored as spam. See [Spam protection](https://ikiform.com/docs/spam.md#honeypot).

### Step 3: Submit it

Open the page and send the form. The browser lands on Ikiform's thank-you page, or on your own page if you set a redirect. You can also post JSON from a terminal:

`Terminal`:

```bash
curl https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada","email":"ada@example.com","message":"Hello"}'
```

A JSON request gets a JSON answer with status `201`:

`201 Created`:

```json
{ "ok": true, "id": "sub_01k7v2c9t3e8m5q4x6z0a1b2c3" }
```

### Step 4: See it arrive

The submission shows up in the dashboard right away. From there, add a [webhook](https://ikiform.com/docs/webhooks.md) to send each one to your app, or read them with the [REST API](https://ikiform.com/docs/api.md).

## Try it

The interactive request builder on this page composes a submission from field rows and shows the matching curl, fetch and SDK code. With the sample form id it only shows code; with your own form id it can send one real POST to `https://ikiform.com/f/<formId>` and print the status and JSON response. The request it builds looks like this:

```bash
curl https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada","email":"ada@example.com","message":"Hello"}'
```

## Next steps

- [How it works](https://ikiform.com/docs/how-it-works.md) walks through every check a post goes through.
- [Define fields](https://ikiform.com/docs/fields.md) so Ikiform rejects bad data with clear field errors.
- [Turn on a human check](https://ikiform.com/docs/spam.md#human-check) and restrict the form to your domains.
- [Verify webhook signatures](https://ikiform.com/docs/webhooks.md#verify) in your backend.
