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
- Other email tools: Brevo · ActiveCampaign · Mailchimp
- Webhook fundamentals: send form data to a webhook
- Consent + privacy: GDPR-compliant submissions
- Ready to set it up: get a free access key
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.