Each website form in your workspace has a public address that accepts enquiries. Every enquiry becomes a contact and a deal without anyone typing it in. This page describes that address for developers who post to it from their own HTML form, a form plugin or a server. Creating forms on the screen is covered in Website forms.
Before you start
- Website forms are available when your plan includes Website forms.
- An owner or administrator creates the form: open Deals in the sidebar, then Website forms, and select Create form. Each form has a Hosted form link and a Code for your website box.
- The form's address contains its key, 32 lower-case hexadecimal characters. It is written here as
FORM_KEY. The key is not a secret, because it appears in your web page. Protection comes from the limits below.
The address
POST https://rutbacrm.com/intake/FORM_KEY
The same address with GET shows the hosted form page. Add ?lang=ar, ?lang=en, ?lang=tr or ?lang=fr to choose the language of the page and of its error messages. The hosted page cannot be shown inside an iframe on another site.
The address accepts a normal form post (application/x-www-form-urlencoded or multipart/form-data) and JSON. There is no CSRF token to send and no API key.
Fields
| Field | Required | Rules |
|---|---|---|
name |
Yes | Up to 160 characters |
email |
One of the two | A valid address, up to 254 characters |
phone |
One of the two | 6 to 15 digits with an optional +, after spaces, dashes and brackets are removed. Arabic digits are accepted, and a leading 00 becomes + |
message |
No | Up to 2000 characters. Saved as a note on the contact |
consent |
Yes | Must be accepted: 1, yes, on or true |
page |
No | The page the visitor was on, up to 500 characters |
utm_source, utm_medium, utm_campaign |
No | Up to 100 characters each |
crm_trap |
Never fill | The spam trap. Keep it in your form, hidden from people |
crm_vid |
No | The visitor ID from the tracking script, which links the visits to the new contact. The script adds it for you |
If page carries campaign tags in its address, such as ?utm_campaign=ramadan-sale, and you did not send the tags separately, they are read from it.
A field named website is an ordinary field and no longer stops the enquiry. Code copied from Code for your website before the trap was renamed has a hidden website field: it still delivers enquiries but no longer stops spam, so copy the code again.
Field names from form plugins
You can keep the field names your form plugin already uses. These names are recognised, without regard to capital letters:
| Field | Also accepted |
|---|---|
name |
full_name, fullname, your-name, your_name, first_name, الاسم, الاسم الكامل, اسمك, ad, ad soyad, nom, nom complet |
email |
e-mail, your-email, your_email, email_address, البريد, البريد الإلكتروني, الايميل, الإيميل, e-posta, courriel |
phone |
tel, mobile, your-phone, your-tel, your_phone, phone_number, whatsapp, الجوال, رقم الجوال, الهاتف, رقم الهاتف, واتساب, telefon, téléphone |
message |
your-message, your_message, comments, comment, details, الرسالة, رسالتك, التفاصيل, mesaj, votre message |
consent |
Any filled field whose name starts with consent, acceptance, agree, privacy, gdpr, الموافقة, أوافق, onay or accord |
page |
page_url, referer, referrer, written exactly so, in lower case |
Nested plugin data is read too: fields under fields or form_fields, by their ID or their title, with raw_value or value, and the page address under meta. Up to 50 nested fields are read.
Send an enquiry from a server
curl -X POST https://rutbacrm.com/intake/FORM_KEY \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name": "Layla Hassan", "email": "layla@example.com", "phone": "+966500000003", "message": "Do you ship to Jeddah?", "consent": "1", "page": "https://shop.example.com/contact?utm_source=google&utm_campaign=ramadan-sale"}'
Send Accept: application/json to get JSON answers. Without it, the address answers with the hosted thank-you page or the form with its errors, which is what a plain HTML form wants.
A server, or a form plugin on your website's server, sends every enquiry from one address. Enter that server's public IP address in the form's Your website server's address (optional) and click Save address, so the per-address hourly limit below does not hold it back. Only a public IPv4 or IPv6 address is accepted.
Responses
| Status | JSON body | Meaning |
|---|---|---|
200 |
{"status": "received"} |
Accepted |
422 |
{"errors": {"consent": ["Please agree before sending."]}} |
A field is missing or invalid. Each key lists its messages |
404 |
The key is wrong or was replaced, the form is turned off, the company is suspended, or the plan does not include Website forms | |
429 |
Too many enquiries, see the limits below |
The answer is the same 200 whether the person was new or already known, so a visitor cannot use the form to find out whether an email is on file.
What happens to an enquiry
The enquiry is matched against active contacts by email or phone, and existing details are never overwritten:
| Situation | Result | Shown as |
|---|---|---|
| No match | A new contact (source website, status lead) and a new deal in the form's stage. Fires A new lead arrives | New lead |
| A match with no open deal in the form's pipeline | A new deal for the existing contact | Known contact, new deal |
| A match with an open deal in that pipeline | No new deal, only the note | Repeat enquiry |
The deal is named after the form and the person, and goes to the person chosen under Assign new deals to, or else to the contact's owner. The message becomes a note. The consent time, page and campaign tags are kept with the enquiry. The visitor's IP address is not stored.
Limits
| Limit | Value | When exceeded |
|---|---|---|
| Posts from one address | 10 a minute | 429 |
| Enquiries from one address to one form | 30 an hour, except from the form's saved server address | 429 |
| Enquiries to one form in total | 120 an hour | 429 |
| Enquiries about the same email or phone to one form | 5 an hour | Answered 200, but nothing is saved |
A filled crm_trap field |
Answered 200, but nothing is saved |
Good to know
- There are no CORS headers. A browser script on another site cannot read the answer, and a JSON post from a browser is blocked before it is sent. From a web page, use a normal form post. Use JSON from servers.
- The Replace the link button gives the form a new key at once. The old address answers
404from then on, so update your site straight away. - File uploads are not stored, and fields other than those above are ignored.
Troubleshooting
| Problem | What to check |
|---|---|
422 on consent |
Your form has no consent field, or its name does not match. Name it consent and send 1 when ticked |
422 on email and phone |
Neither a valid email nor a phone was sent. Check the field names against the alias table |
404 |
Copy the address again from Website forms. The link may have been replaced, or the form turned off |
| Posts succeed but nothing appears | The hidden crm_trap field was filled, often by browser autofill, or the same person sent more than 5 enquiries in an hour |
Last updated 2026-11-08