Skip to content
Install

Add Latch to your website.

Connect a website form, forward an inbox, or both. Pick whichever option matches your setup — the workflow, review queue, and record are the same regardless of how submissions arrive.

Website forms

Pick your frontend.

Use the browser script for new forms. If you need to call the endpoint directly, send the same wrapper payload the script sends.

Fastest · browser script

Paste into your page head.

One line

Load client.js once, then call window.latchIngest.submit(fields). Your form HTML, field names, and submit handler stay the same.

Next.js App Router
// app/layout.tsx
<head>
  <script
    src="https://meta-task.latchworkflow.com/api/v1/public/website-ingest/client.js"
    data-form-id="azimut-web"
    defer
  />
</head>
Do not post raw fields
{
  "name": "Jane",
  "email": "jane@example.com",
  "message": "Hello"
}
Recommended call
await window.latchIngest.submit({
  name: "Jane",
  email: "jane@example.com",
  message: "Hello"
})

Full migration guide: switching from EmailJS or Formspree →

Plain HTML · static site

Keep the form markup.

Load client.js, intercept submit, and pass the field object to Latch. The public SDK endpoint expects JSON, not a browser form post.

HTML
<form id="contact-form">
  <input name="name" type="text" required>
  <input name="email" type="email" required>
  <textarea name="message" required></textarea>
  <button type="submit">Send</button>
</form>

<script
  src="https://meta-task.latchworkflow.com/api/v1/public/website-ingest/client.js"
  data-form-id="azimut-web"
  defer
></script>
React · Next.js

Call the browser API.

After the script is in the page head, call window.latchIngest.submit(fields) from your submit handler. Use dryRun: true to validate without creating a ticket.

TypeScript
const handleSubmit = async (e) => {
  e.preventDefault()
  await window.latchIngest.submit({ name, email, message }, { dryRun: false })
}
Astro

Works in a client script.

Load client.js and call the browser API from a page script. No package install is required.

Astro
<form id="contact-form">
  <!-- your fields -->
</form>

<script>
  document.getElementById('contact-form')
    .addEventListener('submit', async (e) => {
      e.preventDefault()
      const data = Object.fromEntries(new FormData(e.target))
      await window.latchIngest.submit(data)
    })
</script>
Webflow · Framer

One snippet in custom code.

Paste the Latch script into your site's head or custom code area, then call window.latchIngest.submit(fields) from the form submit action.

Site footer (custom code)
<script
  src="https://meta-task.latchworkflow.com/api/v1/public/website-ingest/client.js"
  data-form-id="azimut-web"
  defer
></script>
On your form element
window.latchIngest.submit({
  name,
  email,
  message
})
Existing form provider · webhook

Already using Typeform or Tally?

Configure your form tool to forward submissions to your Latch webhook URL. Latch normalises the payload before creating a case. Works with any tool that can POST to a URL — Typeform, Tally, Gravity Forms, and others.

HTTP API · any backend or language

POST the wrapper payload.

Direct fetch is supported when you send the same wire format as client.js. Do not post raw field objects directly.

curl
curl -X POST \
  https://meta-task.latchworkflow.com/api/v1/public/website-ingest/sdk/submit?formId=azimut-web \
  -H 'Content-Type: application/json' \
  -d '{
    "provider": "latch",
    "protocol": "website-ingest-browser",
    "publicKey": "",
    "formId": "azimut-web",
    "fields": {
      "name": "Sarah Chen",
      "email": "sarah@acmecorp.com",
      "message": "We'd like to book a demo."
    },
    "dryRun": true
  }'
Dry-run response · 200 OK
{
  "success": true,
  "message": "Website Ingest payload accepted",
  "dryRun": true,
  "formId": "azimut-web"
}
Email intake

Forward an inbox to Latch.

Connect an existing address — support@, hello@, sales@, or any inbox that receives requests — and emails arrive as cases in the same queue as your website submissions.

Your team reviews everything in one place. Website form or email — Latch handles both the same way.

Option A · forward an existing inbox

Add a forwarding rule to your current email address. Emails land in Latch as cases. No change to your public-facing address.

Option B · dedicated inbound address

Use a Latch-provided inbound address as your public contact address. Emails go straight into Latch without any forwarding setup.

Attachments and threads

Attachments become case evidence. Email threads stay attached to the case so your team has the full context during review.

After you connect.

Once a submission arrives, two more things to set up in your Latch workspace.

Step 1

Map your fields

Tell Latch which field is name, which is email, and so on. Unmapped fields are still kept on the case under "raw submission" — nothing is lost.

Step 2

Connect actions

Add the integrations your team will use: Slack, a CRM, a support tool, or an internal API. These become the available actions when your team reviews a case.

Install questions

Common questions

Quick answers to the most common setup questions.

Do I need to change my form HTML?

No. Your form fields, labels, and layout stay the same. You only change where the form sends data — to Latch instead of an email address or form backend.

What is the form ID?

You create a form in your Latch workspace and get a form ID. That ID tells Latch which case type to use and which field mapping to apply.

Can I have multiple forms pointing at different case types?

Yes. Each form ID maps to a specific case type — contact inquiries, demo requests, support requests, and so on. Different forms on the same site can use different form IDs.

How do I set up email intake?

Forward an existing inbox to your Latch inbound address, or set up a dedicated address. Latch creates a case for each email that arrives, same as for website form submissions.

What happens to attachments?

File attachments from website forms and email are kept on the case as evidence. Your team can view them during review.

Ready to connect

Get your workspace set up.

Connect a form, forward an inbox, or both. Your team will have a review queue in minutes.