Scopes
Every read endpoint accepts either scope. Every write endpoint requires
routing_forms:write.
Build a routing form
A routing form is built in three calls, because the questions and the routes replace as whole lists:- Create a Routing Form writes the routing form with its name and its page settings. The new routing form holds no question and one fallback route that shows the default thank-you page.
- Replace Routing Form Questions writes the questions. The response carries the id of each question.
- Replace Routing Form Routes writes the routes. A rule names its question by that id, in the
inputIdfield.
The two resources
Routing forms
GET /routing-forms returns one entry per routing form. GET /routing-forms/{id} adds two lists to that entry:
inputsholds the questions. A question carries itstype, itsoptions, and the CRM attribute it maps onto.routesholds the routes. A route carries its destination and therulesthat select it. Exactly one route of a routing form is the fallback, which takes every submission that matches no other route.
inputId on both surfaces. The read endpoints return that key and the write endpoints accept it.
Submissions
The submissions of every routing form sit in one feed.GET /routing-form-submissions returns that feed, and routingFormId narrows it to one routing form. Filter further by creation time with minCreatedAt and maxCreatedAt, and by destination with routeType.
Read the answers
Each answer ships twice, and the two values serve different consumers:
For a question that maps onto a CRM select attribute,
rawAnswer is the canonical {"id","value","color"} JSON that identifies the option. The id in it is the value that your CRM needs. answer holds the label alone.
questionsAndAnswers repeats the same answers as a flat map from question text to display value. It matches the map that the routing_form.submitted webhook ships, so one parser reads both surfaces.
Identifiers
Every id in this API is a UUID.A malformed id answers
404, not 422. An id that names a resource outside your workspace answers 404 as well, so the response never tells you that the resource exists.Timestamps
Every timestamp in a response is in ISO 8601 format with a UTC offset, for example2026-04-10T08:30:00+00:00. The minCreatedAt and maxCreatedAt filters accept the same format.