Your sub-account is connected. The next step is connecting a Zoom account, which is step 2 below.
The app is installed and the rest of your sub-accounts are ready to use. The ones that did not connect will be retried the first time a workflow runs in them, so this often resolves itself. If it does not, reinstall from the marketplace listing.
Nothing was connected, so there is nothing to undo. Start the install again from the marketplace listing — if it fails a second time, the app's install link may have expired.
Registration and join links
One link per attendee, instead of one link for everyone. It is what turns attendance from a guess into a fact.
Why bother
Without registration, everyone joins a meeting through the same URL. Zoom then reports each participant by whatever name they typed into the box, and participantEmail arrives empty unless they happened to be signed in.
So a shared link gives you attendance that is real but anonymous: you know three people joined, not which three.
A registrant gets their own link. Zoom then names them on every event about that meeting — who joined, when, for how long. Attendance becomes attributable to a contact instead of to “Guest”.
That is the whole argument. Everything below is mechanics.
Add Registrant is the one action that needs a Licensed Zoom plan. That is Zoom’s own prerequisite for meeting registration, not ours. Webinars have registration on any plan carrying the webinar add-on.
Turning it on
Two steps, in this order.
1. Create the meeting with registration on. Set enableRegistration to on in the Create Meeting step. A meeting created without it cannot have registrants added later.
2. Add the contact as a registrant. Add an Add Registrant step after it, with email mapped to {{contact.email}} and firstName to {{contact.first_name}}.
3. Send {{zwa_add_registrant.joinUrl}}, not the meeting’s own join link.
Leave meetingId blank
This is the counter-intuitive part, and getting it wrong produces a step that silently does nothing.
The obvious wiring is to map {{zwa_create_meeting.meetingId}} into Add Registrant’s meetingId box. It does not work. The workflow builder renders one marketplace action’s output into another marketplace action’s input as an empty string.
Leaving the box blank is the supported path: the app resolves the contact’s current meeting from its own records. Configure nothing and it works.
Supply meetingId only when you need a meeting that is not the contact’s latest — a webinar series, a rescheduled call kept alongside the original, or an id carried in a contact field.
One link, one person
A personal join link belongs to the contact it was issued to. Sending the same one to two people makes both of them the same attendee in every later report, which quietly destroys the attribution you turned registration on to get.
If two people from the same company are attending, register both.
Screening registrants before approving
The second thing registration unlocks: deciding who gets in.
Set manualApproval on in Create Meeting and registrations are held pending instead of being approved on submission. Your workflow can then check whatever it likes — pipeline stage, deal value, whether they are an existing customer — and approve or deny.
A pending registrant has no join link. Zoom issues one on approval. So a workflow that emails the link straight after Add Registrant on a manual-approval meeting sends an empty link.
The order that works:
- Add Registrant with
autoApproveoff - Your own conditions — check the contact against whatever matters
- Update Registrant Status with
action=approve - Send
{{zwa_update_registrant_status.joinUrl}}
Step 4 uses the link from the approval step, because that is the step that caused it to exist.
Denying and cancelling
action takes three values:
approve— issues the link.deny— refuses a pending registration.cancel— revokes one already approved, which invalidates the link Zoom already emailed them.
cancel is the one to use when someone books and then should not attend after all. Denying an already-approved registration does nothing useful.
Checking whether someone is registered
Get Registrant answers it, keyed on email rather than on Zoom’s registrant id — a workflow asking “is this contact registered?” has an email and nothing else.
Set status to pending if you are looking for someone awaiting approval. It defaults to approved, following Zoom’s own list endpoint, so a pending registrant reads as “not registered” — which is exactly the case somebody checking registration status usually cares about most.
Branch on found. It also finds people who registered through Zoom’s own registration page rather than through a workflow, which is useful when you are running both.
Webinars
The same shape, with two differences:
- Registration defaults to on for Create Webinar. Almost nobody runs an open-link webinar, and registration is the point of the format.
- Use Add Webinar Registrant, and
webinarIdis required. Meetings and webinars share no id space, so there is no resolving-from-records shortcut.
See Webinars.