Funnels
Funnels are the multi-step landing pages, order forms, upsells, and thank-you pages you build in your SMBcrm account to move a visitor toward a purchase or signup. Most of this API is read-oriented: list the funnels and pages that already exist so you can look up IDs, report on performance, or link out to them from your own systems. The exception is redirects, which you can create, update, and delete through the API.
Base URL: https://services.smbcrm.com · Version header: v3 ·
Scopes: funnels/funnel.readonly (list funnels), funnels/page.readonly (list pages),
funnels/pagecount.readonly (count pages), funnels/redirect.readonly (list redirects),
funnels/redirect.write (create, update, or delete a redirect). See
Scopes.
List funnels
Section titled “List funnels”locationId is required. Filter with name, type, category, or parentId, and page
through results with limit and offset.
Each funnel’s identifier comes back as _id. Pass it as funnelId to the page endpoints
below. steps[].pages holds the IDs of the pages in each step, and url is the funnel’s
path. count and traceId are always in the response.
curl "https://services.smbcrm.com/funnels/funnel/list?locationId=<location_id>&limit=20&offset=0" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "funnels": [ { "_id": "<funnel_id>", "name": "Webinar Signup", "type": "funnel", "url": "/webinar-signup", "locationId": "<location_id>", "deleted": false, "dateAdded": "2026-07-01T12:00:00.000Z", "dateUpdated": "2026-07-01T12:30:00.000Z", "updatedAt": "2026-07-01T12:30:00.000Z", "steps": [ { "id": "<step_id>", "name": "Registration", "sequence": 1, "type": "optin_funnel_page", "url": "/register", "pages": ["<page_id>"] } ] } ], "count": 1, "traceId": "<trace_id>"}List pages in a funnel
Section titled “List pages in a funnel”locationId, funnelId, limit, and offset are required. Filter to one page by name with
the optional name parameter. See Pagination.
curl "https://services.smbcrm.com/funnels/page?locationId=<location_id>&funnelId=<funnel_id>&limit=20&offset=0" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"[ { "_id": "<page_id>", "locationId": "<location_id>", "funnelId": "<funnel_id>", "name": "Registration", "stepId": "<step_id>", "deleted": false, "updatedAt": "2026-07-01T12:00:00.000Z" }, { "_id": "<page_id_2>", "locationId": "<location_id>", "funnelId": "<funnel_id>", "name": "Thank You", "stepId": "<step_id_2>", "deleted": false, "updatedAt": "2026-07-01T12:05:00.000Z" }]Count pages in a funnel
Section titled “Count pages in a funnel”locationId and funnelId are required. Narrow the count to a single page with the optional
name parameter.
curl "https://services.smbcrm.com/funnels/page/count?locationId=<location_id>&funnelId=<funnel_id>" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "count": 2}Redirects
Section titled “Redirects”Redirects send visitors who hit an old domain-and-path combination to a funnel, a website page, or a URL instead. Use them when you retire a funnel step, change a path, or need a vanity URL to point somewhere else.
Invalid or incomplete input, such as a missing target or an action outside the allowed
values, returns 422 Unprocessable Entity. When a create or update request fails this way,
the response body has statusCode, message (an array with one entry per failed check),
and error fields. See Errors.
locationId, limit, and offset are required. Filter with the optional search
parameter. See Pagination.
The redirects are in data.data, and data.count is the number of redirects.
curl "https://services.smbcrm.com/funnels/lookup/redirect/list?locationId=<location_id>&limit=20&offset=0" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "data": { "count": 1, "data": [ { "id": "<redirect_id>", "locationId": "<location_id>", "domain": "example.com", "path": "/old-webinar", "pathLowercase": "/old-webinar", "type": "Permanent", "target": "https://example.com/webinar-signup", "action": "url" } ] }}locationId, domain, path, target, and action are required. action sets what the
redirect points to and must be one of funnel, website, url, or all. The response
includes a type field (for example Permanent or Temporary). You don’t send type in
the request.
curl -X POST https://services.smbcrm.com/funnels/lookup/redirect \ -H "Authorization: Bearer <token>" \ -H "Version: v3" \ -H "Content-Type: application/json" \ -d '{ "locationId": "<location_id>", "domain": "example.com", "path": "/old-webinar", "target": "https://example.com/webinar-signup", "action": "url" }'{ "data": { "id": "<redirect_id>", "locationId": "<location_id>", "domain": "example.com", "path": "/old-webinar", "pathLowercase": "/old-webinar", "type": "Permanent", "target": "https://example.com/webinar-signup", "action": "url" }}locationId, target, and action are required. action must be one of funnel,
website, url, or all. domain and path aren’t part of an update. Delete the redirect
and create a new one to change either.
curl -X PATCH https://services.smbcrm.com/funnels/lookup/redirect/<redirect_id> \ -H "Authorization: Bearer <token>" \ -H "Version: v3" \ -H "Content-Type: application/json" \ -d '{ "locationId": "<location_id>", "target": "https://example.com/new-webinar-signup", "action": "url" }'{ "data": { "id": "<redirect_id>", "locationId": "<location_id>", "domain": "example.com", "path": "/old-webinar", "pathLowercase": "/old-webinar", "type": "Permanent", "target": "https://example.com/new-webinar-signup", "action": "url" }}locationId is required as a query parameter.
curl -X DELETE "https://services.smbcrm.com/funnels/lookup/redirect/<redirect_id>?locationId=<location_id>" \ -H "Authorization: Bearer <token>" \ -H "Version: v3"{ "data": { "status": "ok" }}