Create a Routing Form
Create a routing form with the Zeeg API, setting its name, headline, body, submit button and colours, and returning the form with its default fallback route.
curl --request POST \
--url https://api.zeeg.me/v2/routing-forms \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Inbound Lead Qualification"
}
'{
"success": true,
"status": 201,
"routingForm": {
"id": "f1cbafc4-b646-4cf9-af29-193491b555d9",
"name": "Inbound Lead Qualification",
"slug": "inbound-lead-qual",
"url": "https://zeeg.me/RF/inbound-lead-qual",
"isActive": true,
"headline": "Tell us about your team",
"body": null,
"submitBtnText": "Continue",
"styleSettings": {
"bgColor": "#ffffff",
"buttonBgColor": "#1f2937",
"buttonTextColor": "#ffffff"
},
"createdAt": "2026-04-01T09:12:44+00:00",
"updatedAt": "2026-04-01T09:12:44+00:00",
"inputs": [],
"routes": [
{
"id": "2e7f4b90-8a13-4c6d-b5e2-7f0a9c3d1e64",
"type": "CUSTOM_PAGE",
"isFallback": true,
"order": 0,
"customUrl": null,
"headline": "Thank you for your interest",
"body": "We get back to you as soon as possible.",
"eventType": null,
"team": null,
"rules": []
}
]
}
}name is the only required field. It is the internal name, which an invitee never reads.
The new routing form holds no question and one fallback route that shows the default thank-you page. Add the questions with Replace Routing Form Questions and the routes with Replace Routing Form Routes.
slug and url. url is the public address at which an invitee opens the routing form. An inactive routing form accepts no submission at that address.422 and writes no routing form.Authorizations
Body
The body that creates a routing form.
The internal name of the routing form. An invitee never reads it.
200"Inbound Lead Qualification"
The headline above the questions. It holds rich text of at most 200 visible characters.
"Tell us about your team"
The body text below the headline. It holds rich text of at most 2000 visible characters.
"<p>Answer three questions and we send you to the right person.</p>"
The label of the submit button.
200"Continue"
An inactive routing form accepts no submission.
true
The colours of the public routing form page. Each value is a CSS colour of at most 20 characters, or null when the routing form sets no colour. A response always carries the object with all three keys. The write endpoints accept the same shape, so a routing form that you read goes straight back to PATCH /routing-forms/{id} without reshaping.
Hide child attributes
Hide child attributes
Background colour of the page.
20"#ffffff"
Background colour of the submit button.
20"#1f2937"
Text colour of the submit button.
20"#ffffff"
Response
Created
true
201
A routing form with its questions and its routes, as returned when you fetch one routing form.
Hide child attributes
Hide child attributes
"f1cbafc4-b646-4cf9-af29-193491b555d9"
The internal name of the routing form.
"Inbound Lead Qualification"
The slug that addresses the routing form in its public URL.
"inbound-lead-qual"
The public address at which an invitee opens the routing form.
"https://zeeg.me/RF/inbound-lead-qual"
An inactive routing form accepts no submission.
true
The headline that the routing form shows above the questions.
"Tell us about your team"
The body text that the routing form shows below the headline.
null
The label on the submit button of the routing form.
"Continue"
The colours of the public routing form page. Each value is a CSS colour of at most 20 characters, or null when the routing form sets no colour. A response always carries the object with all three keys. The write endpoints accept the same shape, so a routing form that you read goes straight back to PATCH /routing-forms/{id} without reshaping.
Hide child attributes
Hide child attributes
Background colour of the page.
20"#ffffff"
Background colour of the submit button.
20"#1f2937"
Text colour of the submit button.
20"#ffffff"
Time at which the routing form was created, in UTC.
"2026-04-01T09:12:44+00:00"
Time of the last change to the routing form, in UTC.
"2026-04-10T08:30:00+00:00"
The questions of the routing form, which the invitee answers in the given order.
Hide child attributes
Hide child attributes
"f7c82298-6dd9-43bd-98e4-c437b5c0ae47"
The question text that the invitee reads.
"What is your company size?"
The answer control that the routing form shows for this question.
TEXT_INPUT, TEXTAREA, SELECT, RADIO_INPUT, EMAIL, PHONE_NUMBER, NUMBER_INPUT, CRM_ATTRIBUTE "SELECT"
Position of the question in the routing form. The first question carries 0.
0
True when the invitee must answer the question.
true
The routing form hides the question when this is false.
true
The selectable values of the question. A SELECT or RADIO_INPUT question carries plain strings. A CRM_ATTRIBUTE question carries the option objects of the CRM attribute. Every other type carries an empty array.
["1-10 employees", "50-200 employees"]
The CRM attribute that a question maps onto. It is null when the question maps onto no attribute.
The routes of the routing form. Exactly one route is the fallback.
Hide child attributes
Hide child attributes
"c4a1e0d2-5f39-4a7b-8f11-2b6d0c9e7a84"
The kind of destination. EVENT_TYPE opens a scheduling page, TEAM_PAGE opens the page of a team, URL redirects to an external address, and CUSTOM_PAGE shows a message inside the routing form.
EVENT_TYPE, URL, CUSTOM_PAGE, TEAM_PAGE "EVENT_TYPE"
The fallback route takes every submission that matches no other route.
false
Position of the route in the routing form. The first route carries 0. The routing form takes the first route whose conditions hold.
0
Destination address of a URL route. It is null for every other type.
null
Headline of a CUSTOM_PAGE route.
"Thank you"
Body text of a CUSTOM_PAGE route.
"A member of the team contacts you within one working day."
The event type that a route or a submission points at. It is null when no event type is set.
Hide child attributes
Hide child attributes
"80f46bf5-eb01-4c07-960e-a9a3e18aae5e"
"30-Minute Discovery Call"
"30min-discovery-call"
Address of the event type in this API.
"https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e"
The condition tree that selects this route. A node is either a group or a condition. A group holds child nodes under any for OR, or under all for AND. A condition holds inputId, operator and values. The operator is one of equals, does_not_equal, is_any_of, is_not_any_of, contains, does_not_contain, starts_with, ends_with, greater_than, greater_than_or_equal, less_than, less_than_or_equal, is_empty or is_not_empty. The fallback route carries an empty array, because it needs no condition.
{
"all": [
{
"inputId": "f7c82298-6dd9-43bd-98e4-c437b5c0ae47",
"operator": "is_any_of",
"values": ["50-200 employees"]
}
]
}
curl --request POST \
--url https://api.zeeg.me/v2/routing-forms \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Inbound Lead Qualification"
}
'{
"success": true,
"status": 201,
"routingForm": {
"id": "f1cbafc4-b646-4cf9-af29-193491b555d9",
"name": "Inbound Lead Qualification",
"slug": "inbound-lead-qual",
"url": "https://zeeg.me/RF/inbound-lead-qual",
"isActive": true,
"headline": "Tell us about your team",
"body": null,
"submitBtnText": "Continue",
"styleSettings": {
"bgColor": "#ffffff",
"buttonBgColor": "#1f2937",
"buttonTextColor": "#ffffff"
},
"createdAt": "2026-04-01T09:12:44+00:00",
"updatedAt": "2026-04-01T09:12:44+00:00",
"inputs": [],
"routes": [
{
"id": "2e7f4b90-8a13-4c6d-b5e2-7f0a9c3d1e64",
"type": "CUSTOM_PAGE",
"isFallback": true,
"order": 0,
"customUrl": null,
"headline": "Thank you for your interest",
"body": "We get back to you as soon as possible.",
"eventType": null,
"team": null,
"rules": []
}
]
}
}