{"id":155,"date":"2026-10-16T07:39:05","date_gmt":"2026-10-16T07:39:05","guid":{"rendered":"https:\/\/www.yeevu.com\/guides\/?p=155"},"modified":"2026-10-16T07:39:05","modified_gmt":"2026-10-16T07:39:05","slug":"connect-website-form-to-yeevu-contacts","status":"publish","type":"post","link":"https:\/\/www.yeevu.com\/guides\/connect-website-form-to-yeevu-contacts\/","title":{"rendered":"Connect Website Form to Yeevu Contacts"},"content":{"rendered":"<p>Connect website form to Yeevu Contacts and every sign-up or enquiry lands straight in a contact list. There are four ways to do it: share the hosted form every list comes with, embed it on your site, connect a form you already have (no API key needed), or send contacts from your own server. Yeevu Contacts is part of the <a href=\"https:\/\/www.yeevu.com\/platform\/\">Yeevu platform<\/a>, and the same guide is in the app at <a href=\"https:\/\/app.yeevu.com\/contacts\/help\/forms\">app.yeevu.com\/contacts\/help\/forms<\/a>.<\/p>\n<section id=\"choose\">\n<h2>Which Way to Connect a Website Form to Yeevu Contacts?<\/h2>\n<div>\n<table>\n<thead>\n<tr>\n<th>Option<\/th>\n<th>Best for<\/th>\n<th>Code needed<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Hosted page<\/td>\n<td>A sign-up or contact page you can share as a link, with no website needed<\/td>\n<td>None<\/td>\n<\/tr>\n<tr>\n<td>Embed<\/td>\n<td>Putting the Yeevu form on your own website as a frame, a button or plain HTML<\/td>\n<td>Paste one snippet<\/td>\n<\/tr>\n<tr>\n<td>Your own form<\/td>\n<td>Keeping the form you already have and its design, and sending entries to Yeevu<\/td>\n<td>A few lines of JavaScript<\/td>\n<\/tr>\n<tr>\n<td>API<\/td>\n<td>Your server, app or automation tool adding contacts, with tags and extra fields<\/td>\n<td>A server-side request with an API key<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section>\n<section id=\"setup\">\n<h2>Set Up the Yeevu Contacts List First<\/h2>\n<p>The hosted page, the embeds and your own form all post into one list, and that list&#8217;s form must be switched on.<\/p>\n<ol>\n<li>Open <strong>Lists<\/strong> and create a list for this form, or open an existing one.<\/li>\n<li>Go to the list&#8217;s <strong>Form \/ Landing Page<\/strong> tab and tick <strong>Enable hosted page<\/strong>.<\/li>\n<li>Choose the fields to collect. Email is always required. You can add <strong>Name<\/strong>, <strong>Company<\/strong>, <strong>Phone<\/strong> and <strong>Message<\/strong>. If you add Message, it becomes required.<\/li>\n<li>Write your <strong>Success message<\/strong> (shown after someone submits), then save.<\/li>\n<li>Set up alerts and an automatic reply on the <strong>Notifications<\/strong> tab. See <a href=\"#notify\">Alerts and replies<\/a>.<\/li>\n<\/ol>\n<p>The list&#8217;s ID is in its address bar, after <code>\/contacts\/lists\/<\/code>. You need it for your own form.<\/p>\n<\/section>\n<section id=\"hosted\">\n<h2>Share the Hosted Yeevu Contacts Form Page<\/h2>\n<p>Every list with its form switched on has its own page:<\/p>\n<pre>https:\/\/app.yeevu.com\/contacts\/f\/&lt;your list ID&gt;<\/pre>\n<ul>\n<li>Find the exact link under <strong>Share \/ Embed<\/strong> \u2192 <strong>Link<\/strong> on the Form \/ Landing Page tab.<\/li>\n<li>Pick a template (Blank, Newsletter signup, Contact us or Full landing page), then add your title, logo, description, button text and colour. Add a headline, image or feature list to turn it into a full landing page.<\/li>\n<li>Set a <strong>Redirect URL<\/strong> to send people to your own thank-you page after they submit.<\/li>\n<li>Turn on <strong>Require Cloudflare Turnstile<\/strong> if you get spam. It works on the hosted page, the frame and the button.<\/li>\n<\/ul>\n<\/section>\n<section id=\"embed\">\n<h2>Embed the Yeevu Contacts Form on a Website<\/h2>\n<p>Open <strong>Share \/ Embed<\/strong> on the list&#8217;s Form \/ Landing Page tab and copy the snippet you want. Your list ID is already filled in.<\/p>\n<h3>Frame Embed for Form Layouts<\/h3>\n<p>Shows the form inside your page.<\/p>\n<pre>&lt;iframe src=\"https:\/\/app.yeevu.com\/contacts\/f\/&lt;your list ID&gt;\" width=\"100%\" height=\"520\"\n  loading=\"lazy\"&gt;&lt;\/iframe&gt;<\/pre>\n<h3>Pop-up Button Embed<\/h3>\n<p>Adds a button that opens the form in a pop-up and closes it after a successful submit. Change the label with <code>data-button<\/code>, and the colours with <code>data-color<\/code> and <code>data-text-color<\/code>.<\/p>\n<pre>&lt;script src=\"https:\/\/app.yeevu.com\/contacts\/widget.js\" data-list=\"&lt;your list ID&gt;\" data-button=\"Contact us\"&gt;&lt;\/script&gt;<\/pre>\n<h3>HTML Form Embed<\/h3>\n<p>A complete form with its own styling, which you can restyle to match your site. It matches the fields you chose and includes spam protection.<\/p>\n<div><strong>Turn Turnstile off for the HTML snippet.<\/strong> Turnstile only works on the hosted page, the frame and the button. With it on, submissions from the HTML snippet are refused.<\/div>\n<p>The frame and button are for form layouts. For a full landing page, share the link instead.<\/p>\n<\/section>\n<section id=\"own\">\n<h2>Connect Website Form to Yeevu Contacts With JavaScript<\/h2>\n<p>Keep your own form and send each entry to your list with a few lines of JavaScript. Switch the list&#8217;s form on first, and tick every field you want to keep.<\/p>\n<pre>POST https:\/\/app.yeevu.com\/contacts\/api\/f\/&lt;your list ID&gt;\/submit\nContent-Type: application\/json<\/pre>\n<div><strong>Send JSON from JavaScript.<\/strong> A plain HTML form that posts directly to the address above won&#8217;t work, because the endpoint only accepts JSON. It can be called from any website, so you don&#8217;t need an API key.<\/div>\n<h3>Fields a Connected Website Form Can Send<\/h3>\n<div>\n<table>\n<thead>\n<tr>\n<th>Field<\/th>\n<th>Notes<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>email<\/code><\/td>\n<td>Required.<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>Kept when Name is ticked on the Form tab.<\/td>\n<\/tr>\n<tr>\n<td><code>company<\/code><\/td>\n<td>Kept when Company is ticked.<\/td>\n<\/tr>\n<tr>\n<td><code>phone<\/code><\/td>\n<td>Kept when Phone is ticked.<\/td>\n<\/tr>\n<tr>\n<td><code>message<\/code><\/td>\n<td>Kept, and required, when Message is ticked.<\/td>\n<\/tr>\n<tr>\n<td><code>subject<\/code><\/td>\n<td>Optional. Becomes the subject of your alert email, so send a fixed value such as &#8220;Quote request&#8221;.<\/td>\n<\/tr>\n<tr>\n<td><code>honeypot<\/code><\/td>\n<td>Spam trap. Send the value of a hidden field people never fill in. If it has a value, the entry is quietly dropped.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Other fields are ignored. To keep extra answers, such as a budget or a website address, add them to <code>message<\/code>, or use the <a href=\"#api\">API<\/a>.<\/p>\n<h3>Example Website Form Connected to Yeevu Contacts<\/h3>\n<pre>&lt;form id=\"enquiry\"&gt;\n  &lt;input name=\"name\" placeholder=\"Your name\"&gt;\n  &lt;input name=\"email\" type=\"email\" placeholder=\"Email\" required&gt;\n  &lt;textarea name=\"message\" placeholder=\"How can we help?\" required&gt;&lt;\/textarea&gt;\n  &lt;input name=\"website\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\"&gt;\n  &lt;button type=\"submit\"&gt;Send&lt;\/button&gt;\n  &lt;p id=\"enquiry-status\" role=\"status\"&gt;&lt;\/p&gt;\n&lt;\/form&gt;\n&lt;script&gt;\n  document.getElementById('enquiry').addEventListener('submit', async (e) =&gt; {\n    e.preventDefault();\n    const f = e.target, status = document.getElementById('enquiry-status');\n    const res = await fetch('https:\/\/app.yeevu.com\/contacts\/api\/f\/&lt;your list ID&gt;\/submit', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify({\n        email: f.email.value, name: f.name.value, message: f.message.value,\n        subject: 'Website enquiry', honeypot: f.website.value\n      })\n    });\n    const data = await res.json().catch(() =&gt; ({}));\n    if (res.ok) { f.reset(); status.textContent = 'Thanks, we have your message.'; }\n    else { status.textContent = data.error || 'Something went wrong. Please try again.'; }\n  });\n&lt;\/script&gt;<\/pre>\n<h3>Submit Endpoint Responses and Errors<\/h3>\n<div>\n<table>\n<thead>\n<tr>\n<th>Status<\/th>\n<th>Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>200<\/td>\n<td><code>{\"ok\":true}<\/code>: saved. A repeat sign-up from the same address also returns this, without creating a duplicate.<\/td>\n<\/tr>\n<tr>\n<td>400<\/td>\n<td><code>{\"error\":\"Valid email required\"}<\/code> or <code>\"Message required\"<\/code>. Show the error to the visitor.<\/td>\n<\/tr>\n<tr>\n<td>404<\/td>\n<td><code>{\"error\":\"Form not found\"}<\/code>: the list&#8217;s form isn&#8217;t switched on, or the list ID is wrong.<\/td>\n<\/tr>\n<tr>\n<td>429<\/td>\n<td>Too many submissions in a short time. Wait a minute and try again.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>When someone who is already in your contacts submits again, Yeevu fills in any of their details that are blank and never overwrites what you already have.<\/p>\n<\/section>\n<section id=\"api\">\n<h2>Add Contacts From a Server With the Yeevu Contacts API<\/h2>\n<p>Use the API when your own server, app or automation tool adds contacts. It can also set tags and keep any extra fields.<\/p>\n<ol>\n<li>Go to <strong>Settings<\/strong> \u2192 <strong>API Keys<\/strong>, enter a name and choose <strong>Create API Key<\/strong>. Keys start with <code>yc_<\/code>.<\/li>\n<li><strong>Settings<\/strong> \u2192 <strong>Developer<\/strong> shows your API address and ready-made examples.<\/li>\n<li>Send each contact with the key in the <code>Authorization<\/code> header.<\/li>\n<\/ol>\n<div><strong>Keep your key on your server.<\/strong> An API key gives full access to your account. Never put it in a web page or browser code; for website forms, use <a href=\"#own\">your own form<\/a> instead.<\/div>\n<pre>curl https:\/\/app.yeevu.com\/contacts\/api\/v1\/contacts \\\n  -H \"Authorization: Bearer yc_your_key\" \\\n  -H \"Content-Type: application\/json\" \\\n  -H \"User-Agent: my-app\/1.0\" \\\n  -d '{\n    \"email\": \"jane@example.com\",\n    \"list_id\": \"&lt;your list ID&gt;\",\n    \"name\": \"Jane Doe\",\n    \"company\": \"Doe Bakery\",\n    \"phone\": \"+1 555 0100\",\n    \"source\": \"website\",\n    \"tags\": [\"quote-request\"],\n    \"budget\": \"2-5k\",\n    \"message\": \"We need a new website.\"\n  }'<\/pre>\n<ul>\n<li><code>email<\/code> and <code>list_id<\/code> are required.<\/li>\n<li><code>name<\/code>, <code>company<\/code>, <code>phone<\/code> and <code>source<\/code> are saved on the contact. Any other field (such as <code>budget<\/code> above) is kept with the contact as an extra field.<\/li>\n<li><code>tags<\/code> adds tags; ones that don&#8217;t exist yet are created.<\/li>\n<li>The same email updates the existing contact instead of creating a new one. Fields you send replace the old values, fields you leave out are kept, and tags are added.<\/li>\n<li>The reply is <code>201 {\"ok\":true,\"contact_id\":123,\"merged\":false}<\/code> for a new contact, or <code>200<\/code> with <code>\"merged\":true<\/code> for an existing one.<\/li>\n<li>Send a <code>User-Agent<\/code> header from server code; requests without one can be refused.<\/li>\n<li>Automation tools that can make an HTTP request (for example a Zapier or Make HTTP step) can use the same call.<\/li>\n<\/ul>\n<div><strong>The API doesn&#8217;t send the automatic reply.<\/strong> Replies go only to people who use the hosted page, an embed or your own form. You still get an alert for new contacts if you turn it on.<\/div>\n<\/section>\n<section id=\"notify\">\n<h2>Form Alerts and Automatic Replies<\/h2>\n<p>Set both on the list&#8217;s <strong>Notifications<\/strong> tab. Changes save as you make them.<\/p>\n<h3>Alerts for New Form Submissions<\/h3>\n<ul>\n<li>Tick <strong>Email me about form submissions<\/strong>. Leave <strong>Send to<\/strong> blank to use your login email, or enter another address.<\/li>\n<li>Forms with a Message field send you an alert for every message.<\/li>\n<li>For sign-up forms without a message, and for contacts added through the API, also tick <strong>Also when a new contact is added<\/strong>. You&#8217;ll get an alert for each new contact.<\/li>\n<\/ul>\n<h3>Automatic Reply to the Person Who Submitted<\/h3>\n<ul>\n<li>Connect a mailbox first, so the reply comes from your own address.<\/li>\n<li>Tick <strong>Send a reply when someone submits the form<\/strong>, choose the mailbox, then pick a template or write a message.<\/li>\n<li>Personalise it with <code>{{first_name|there}}<\/code>, <code>{{name}}<\/code>, <code>{{company|your company}}<\/code>, <code>{{email}}<\/code> and <code>{{phone}}<\/code>. The text after <code>|<\/code> is used when the field is empty.<\/li>\n<li>Each address gets at most one reply per list every 24 hours, and each list sends up to 100 replies a day. Replies are never sent to contacts you&#8217;ve suppressed.<\/li>\n<\/ul>\n<\/section>\n<section id=\"privacy\">\n<h2>Privacy and Consent on Website Forms<\/h2>\n<p>The hosted form doesn&#8217;t include a consent checkbox. Add a short line near your form explaining how you&#8217;ll use the details, with a link to your privacy policy. If you collect consent yourself, send it through the <a href=\"#api\">API<\/a> as an extra field, such as <code>\"consentGiven\": true<\/code>, and it&#8217;s kept with the contact.<\/p>\n<\/section>\n<section id=\"trouble\">\n<h2>Troubleshooting a Website Form Connected to Yeevu Contacts<\/h2>\n<div>\n<table>\n<thead>\n<tr>\n<th>Problem<\/th>\n<th>Fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>&#8220;Form not found&#8221;<\/td>\n<td>Tick <strong>Enable hosted page<\/strong> on the list&#8217;s Form \/ Landing Page tab and save, then check the list ID in your code.<\/td>\n<\/tr>\n<tr>\n<td>Name, company or phone missing on the contact<\/td>\n<td>Tick those fields on the Form tab. Fields that aren&#8217;t ticked are ignored.<\/td>\n<\/tr>\n<tr>\n<td>Your own form does nothing<\/td>\n<td>It must send JSON with JavaScript (see the example). A plain HTML form post won&#8217;t work.<\/td>\n<\/tr>\n<tr>\n<td>Embedded HTML form says &#8220;Captcha required&#8221;<\/td>\n<td>Turn off <strong>Require Cloudflare Turnstile<\/strong>, or use the frame or button instead.<\/td>\n<\/tr>\n<tr>\n<td>No alert for a new sign-up<\/td>\n<td>Tick <strong>Also when a new contact is added<\/strong>. Alerts go only for new contacts, not repeat sign-ups.<\/td>\n<\/tr>\n<tr>\n<td>API returns 401<\/td>\n<td>The key is wrong or was rotated. Copy it again from <strong>Settings<\/strong> \u2192 <strong>API Keys<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>API returns 404 &#8220;List not found&#8221;<\/td>\n<td>The <code>list_id<\/code> isn&#8217;t one of your lists. Copy it from the list&#8217;s address bar.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section>\n<p>For more on building and emailing your lists, see the <a href=\"https:\/\/www.yeevu.com\/guides\/\">Yeevu guides<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Connect website form to Yeevu Contacts: share the hosted form, embed it, send your own form with no API key, or use the API. Website form to CRM, step by step.<\/p>\n","protected":false},"author":1,"featured_media":158,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-155","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-email-marketing"],"_links":{"self":[{"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/posts\/155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/comments?post=155"}],"version-history":[{"count":2,"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/posts\/155\/revisions"}],"predecessor-version":[{"id":157,"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/posts\/155\/revisions\/157"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/media\/158"}],"wp:attachment":[{"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/media?parent=155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/categories?post=155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yeevu.com\/guides\/wp-json\/wp\/v2\/tags?post=155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}