# Carrd

> Point a Carrd custom form at Ikiform with Send to URL on Pro Plus, or paste an HTML form into an Embed element on Pro Standard.

Carrd's contact and signup forms send submissions to Carrd's own destinations. Custom forms on Pro Plus can send to any URL, which is all Ikiform needs, and Pro Standard can embed your own HTML.

| Carrd plan | How to connect Ikiform |
| --- | --- |
| Pro Plus or higher | A **Form** element of type **Custom** > **Send to URL**. No code. |
| Pro Standard | An **Embed** element with your own HTML form |
| Pro Lite and free | Neither. These plans have no embeds or custom forms. |

## Custom form with Send to URL

### Step 1: Create the form

Click **Add Element** > **Form** and set **Type** to **Custom**, then **Send to URL**.

### Step 2: Set the URL, method and format

`URL`:

```text
https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx
```

| Setting | Value | Why |
| --- | --- | --- |
| **Method** | AJAX | Keeps visitors on the page. Carrd reads any `2xx` as success, and Ikiform answers `201` when it stores the submission. |
| **Format** | Default | Sends a standard form post. JSON works too. |
| **Headers** | None | Ikiform needs no headers from a browser. |

With **POST** instead of AJAX, the browser leaves your Carrd site for Ikiform's thank-you page or your **Redirect after submit** URL, and Carrd's On Success setting doesn't apply. Don't choose **XML**: Ikiform refuses it with `415 unsupported_media_type`.

### Step 3: Set field IDs

Each field's **Submitted ID**, or its **ID** when that's empty, becomes the field name in Ikiform. Carrd generates IDs from labels, so set them yourself: `email`, `name`, `message`. With **Format** set to JSON, a Submitted ID such as `fields.firstname` is sent as a nested object, which Ikiform stores as-is.

- Don't add a **File** field. Ikiform doesn't accept files yet and refuses the post with `422 files_not_supported`.
- **Collect UTM parameters** adds `utm_source`, `utm_medium`, `utm_campaign`, `utm_term` and `utm_content`. If you define [fields](https://ikiform.com/docs/fields.md) in Ikiform, add these too, or the post fails with an Unknown field error.
- A **Hidden** field always has its preset value, so it can't act as a honeypot. Spam scoring still runs on every post.

### Step 4: Choose On Success and On Failure

Pick what Carrd shows after the request. On Failure covers every Ikiform error, such as `422 validation_failed` or `429 rate_limited`; Carrd doesn't display Ikiform's message, so keep your failure text general.

> Leave the form's spam check off. AJAX posts can't show Ikiform's check page, so a form with the check on answers `403 challenge_required` and Carrd shows On Failure every time.

## Embed element on Pro Standard

Click **Add Element** > **Embed**, set **Type** to **Code** and **Style** to **Inline**, and paste a form. Embeds don't render in the builder, so publish to see it.

`Embed`:

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post" target="_top">
  <input name="email" type="email" placeholder="Email" autocomplete="email" required>
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Join the waitlist</button>
</form>
```

This posts as a normal form, so the [human check](https://ikiform.com/docs/spam.md#human-check) works if you turn it on. Style it with a `<style>` block, or start from the fuller [site builder embed](https://ikiform.com/docs/guides/site-builders.md#embed).

## Allowed domains

With either option, the browser sends the post from your Carrd page, so allowed domains work as usual.

| Where the form runs | Add to Allowed domains |
| --- | --- |
| Free or default URL | `your-site.carrd.co` |
| Pro unbranded URL | `your-site.crd.co` |
| Custom domain | `example.com`, which also covers `www.example.com` |

- Never add `carrd.co` or `crd.co` on its own. Every site on that host would match, including other people's.

## Test checklist

1. Publish the site. Forms and embeds only work on the published site.
2. Submit the form and confirm Carrd shows your On Success message, or that the embed lands on the thank-you page.
3. Open the submission in Ikiform and check the field names are the IDs you set, not generated ones.
4. Submit with an email that isn't valid while the form has fields defined, and confirm Carrd shows On Failure.

## Troubleshooting

| What you see | Why | Fix |
| --- | --- | --- |
| Carrd shows On Failure on every submit | Ikiform refused the post: `415` for XML, `422` for an Unknown field or a file, `403 challenge_required` with the check on, or `403 origin_not_allowed` with **Reject** | Use the Default format, match your field IDs, remove File fields, turn the check off and add your domain. |
| Field names in Ikiform look like the labels, not your IDs | **Submitted ID** and **ID** were left empty | Set the IDs and publish again. |
| Submissions arrive under the spam filter with `origin_mismatch` | The page that posted isn't on the form's allowed domains | Add the host from the table above. With **Reject** chosen, the same posts get `403 origin_not_allowed` instead. |
| The embed is blank in the builder | Carrd doesn't run embed code in the builder | Publish and check the live site. |

## Related

- [Site builders](https://ikiform.com/docs/guides/site-builders.md): The embed that works in any builder.
- [HTML forms](https://ikiform.com/docs/html.md): Redirects, reserved fields and the honeypot.
- [Errors](https://ikiform.com/docs/errors.md): Every error code, with its cause and fix.
- [Allowed domains](https://ikiform.com/docs/spam.md#allowed-domains): How origins are matched, and what a mismatch does.
