Skip to main content

External Steps

An external step is a step of the funnel that lives on a site you host: your own landing page, a WooCommerce product page, a quiz on your marketing site. TagadaPay mounts no plugin for it, creates no CDN route, and never rewrites its URL. It keeps its own address and appears on the canvas like any other block, so the flow reads end to end instead of stopping at your domain boundary. Two things to do:
  1. Declare it — the block exists on the canvas, with its URL and, if you want, its named exits.
  2. Report it — every time a visitor reaches the page, converts on it, or does something you care about, tell TagadaPay so analytics and routing see it.
Reporting is enough to make the block appear. A step the funnel has never seen, reported with an https:// URL, is turned into an add step.external command on its own — you do not have to declare it first. Three things decide whether you actually see it:
  • the report must carry a url, and it must be https://. Without one the event is still tracked, and the block is skipped with reported-step-needs-url — no address is ever invented;
  • the store’s canvas must be in live mode. In shadow the command is journalled and the funnel is not written, so nothing is drawn yet;
  • the block arrives unconnected. Nothing knows which exit it should hang from, so wire it with a connect command or from the canvas screen.
Reporting the same stepId again never adds a second block: the command id is derived from the store and the step, and replaying it returns the original reply.
A report that carries a funnelSessionId has no URL to mount. Page context is only kept for a standalone event: as soon as the report ties itself to a funnel run, url is dropped before the event leaves, so the block is skipped with reported-step-needs-url however carefully you filled the field. Send the first report of a page without funnelSessionId — or declare the step once at deploy time — and then report inside the session as much as you like.

Declare the step

On the canvas, an external step is an add command of kind step.external:
url must be an absolute https:// address. exits names up to ten outcomes of your page.
Named exits are drawn on the canvas and never lost, but the runtime cannot branch on them yet. Their wires are written as default wires, so the path actually taken is the highest-priority one leaving the step. Use a rule block if you need the funnel to fork on a condition today.
The step type also exists in the funnel config directly — see Funnel Pages for the whole list of types and what each one unlocks.

Report what happens

One endpoint does all of it.
Authenticate with a CRM API key as a Bearer token. The key decides the account; the account must own the storeId you send. The reply is small and has no envelope:

With the Node SDK

@tagadapay/node-sdk 3.18.0 and later ship two helpers on funnels.
declareSteps sends one declaration per step and does not stop on the first failure — read steps[] in the result to see which were accepted.
Running declareSteps again is safe, but it does not yet update a block that already exists. A declaration for a step the canvas has already drawn is recognised as such and nothing is written — so no duplicate block, and no rename either. Change a name, a URL or the exits of a drawn step with a set command on the canvas, or on the canvas screen.
The tracking endpoint has no exit field. reportStep sends event as eventType, and an exit as eventType: 'custom' with the exit name in customEventName. Passing exit therefore always sends a custom event, whatever event says — which is exactly what the custom-event curl below does by hand.

curl

A conversion on your own page carries the order:
A named exit — and anything else worth recording — is a custom event:

From a Next.js route handler

Report from your server, never from the browser with an API key in it. This handler takes the browser’s word for the page and nothing else, and keeps the key server-side.
app/api/tagada/step/route.ts
Call it from the page with a plain fetch('/api/tagada/step', …).

From the browser

If you would rather not run a server at all, the CDN tracker does the same job with no key: it sends anonymous page events tied to a store and a step.
Its options, the npm build and the session rules are on the External Page Tracker page. Use the tracker for page views and the server route for anything involving an order.

When it does not work

Send the same stepId on every call for a given page. It is the key everything else is grouped by: change it and you start a second block on the canvas with none of the history of the first.

Next

Funnel Canvas

The five commands, the exits, and the error catalogue.

External Page Tracker

The browser tracker in full.