splitforms.com
All articles/ INTEGRATIONS9 MIN READPublished June 21, 2026

How to Send Form Submissions to Kit (ConvertKit) in 2026

Add form subscribers to Kit (formerly ConvertKit) without Zapier — own your form HTML and deliver via a signed splitforms webhook and a small proxy to the Kit API.

✶ Written by
splitforms.com / blog

Founder of splitforms — the form backend API for developers. Writes about form UX, anti-spam, and shipping web apps without backend code.

Why route Kit signups through your own form

Kit (formerly ConvertKit) is a great email platform, and its embeddable forms are fine for a quick newsletter box. But the moment you want a form that's fully on-brand, fast-loading, spam-protected, and logged in a dashboard you control, the hosted embed gets in the way.

Own the HTML and route it through splitforms: you get a custom form, an AI spam classifier, email notifications, and a submission dashboard — while Kit stays your email home. A small proxy turns each signed webhook into a Kit subscribe call, with the tags and sequence you want.

Step 1 — Get your Kit API credentials and target IDs

In Kit, open Settings → Advanced → API and copy your API key (and API secret if you use endpoints that require it). Decide where new subscribers should land — a specific form or sequence — and copy its numeric ID from the URL when editing it. Optionally grab tag IDs from Subscribers → Tags.

Store the API key, form/sequence ID, and tag IDs as environment variables on your proxy host. Never put them in the browser.

Step 2 — The splitforms → Kit proxy

splitforms fires a signed webhook to your endpoint; the proxy holds the API key and subscribes the contact to your chosen form. Cloudflare Worker version:

export default {
  async fetch(req, env) {
    if (req.method !== "POST") return new Response("Method Not Allowed", { status: 405 });

    // 1. (Recommended) verify the splitforms HMAC signature header here.

    const submission = await req.json();
    const f = submission.data ?? submission;
    if (!f.email) return new Response("no email", { status: 400 });

    // 2. Subscribe to a Kit form (v3 endpoint; still served at api.convertkit.com)
    const res = await fetch(
      `https://api.convertkit.com/v3/forms/${env.KIT_FORM_ID}/subscribe`,
      {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          api_key: env.KIT_API_KEY,
          email: f.email,
          first_name: (f.name ?? "").split(" ")[0],
          fields: { last_message: f.message ?? "", source: f.source_page ?? "website" },
          tags: env.KIT_TAG_IDS ? env.KIT_TAG_IDS.split(",").map(Number) : undefined,
        }),
      }
    );

    if (!res.ok) return new Response(await res.text(), { status: 502 });
    return new Response("ok", { status: 200 });
  },
};

Deploy the Worker and paste its URL into your form's webhook settings in the splitforms dashboard. To subscribe to a sequence instead of a form, swap the URL to the sequences subscribe endpoint. Always verify the webhook signature — see send form data to a webhook.

Step 3 — The form

Your public form only talks to splitforms with the public access key. Swap YOUR_ACCESS_KEY for the one from your free account.

<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
  <input name="name" placeholder="First name" />
  <input name="email" type="email" required placeholder="Email" />

  <label><input type="checkbox" name="consent" required /> Subscribe me to the newsletter</label>

  <!-- honeypot -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off" />
  <button type="submit">Subscribe</button>
</form>

What to do next

FAQ

Is Kit the same as ConvertKit?

Yes. ConvertKit rebranded to Kit in 2024. Accounts, data, and the API carried over — the API is still served from api.convertkit.com and existing keys keep working. This guide uses the standard subscribe endpoint, which is unchanged by the rename.

Why not just use a Kit-hosted form or embed?

Kit's own forms are fine for a newsletter box, but they're styled within Kit's constraints, load Kit's script, and don't give you spam protection or a submission dashboard you control. If you want a fully custom form that matches your site, loads fast, and filters spam, own the HTML, route it through splitforms, and have a small proxy add the subscriber to Kit via the API. You keep Kit as your email platform without its form limitations.

Is it safe to put my Kit API key in the form?

No. Treat the Kit API key/secret as a secret and keep it server-side. In this setup the browser only ever sends the public splitforms access key; splitforms fires a signed webhook to your proxy, and the proxy — which holds the Kit credentials — subscribes the contact. The key never appears in client code.

Can I add subscribers to a specific form, sequence, or tag?

Yes. Kit's API lets you subscribe to a specific form or sequence and apply tags. Pass the target form/sequence ID and any tag IDs in your proxy. A common pattern: subscribe to a welcome sequence and tag by lead source (e.g. 'website-contact') so your automations can branch on where the subscriber came from.

Will this respect double opt-in?

It follows your Kit account and form settings. If the target form has double opt-in enabled, Kit sends the confirmation email as usual; the subscriber isn't active until they confirm. If you need explicit consent capture, add a consent checkbox to your form and only call the proxy when it's checked — and keep a record, which the splitforms dashboard does automatically.

About the author
✻ ✻ ✻

Get your free contact form API key in 60 seconds.

500 free form submissions per month. No credit card. No SDK, no PHP, no plugin. Drop one POST endpoint in your form and submissions land in your dashboard. Starter adds inbox delivery.

Generate access key →Read the docs
founders pricing locked in · early access open