/

Troubleshooting

The things that actually go wrong, roughly in the order people hit them.

A step reports success but nothing happened

You almost certainly mapped {{zwa_create_meeting.meetingId}} into its meetingId box.

The workflow builder renders one marketplace action’s output into another marketplace action’s input as an empty string. The step receives a blank id, and blank has a meaning here — it resolves the contact’s current meeting from our records — so it does not fail, it just may not do what you meant.

Fix: clear the meetingId box. Leaving it blank is the supported path.

Add Registrant returned a registrant with no joinUrl

The meeting is on manual approval, and a pending registrant has no link. Zoom issues one on approval.

Check approved on the output. If it is false, add an Update Registrant Status step with action = approve and send {{zwa_update_registrant_status.joinUrl}} instead.

Update Attendance ran but the booking did not change

Check appointmentUpdated and appointmentSource on the output.

This action deliberately returns success with a warning rather than failing, because a failing step stops the entire run and “we could not find the appointment” should not stop your follow-up email going out.

appointmentSource tells you what happened:

  • none — no booking was found. Either the meeting was not created from a workflow, or appointmentId was never mapped and start-time matching found nothing.
  • matched — found by searching the contact’s appointments. It worked, but it is inference. Map {{appointment.id}} into Create Meeting’s appointmentId to make it a direct lookup.
  • recorded / provided — resolved by id. This is the good case.

A trigger never fires

The filter matches nothing

The builder’s trigger filters offer String, Select, Multi-select and Dynamic — no boolean type. A filter on a true/false field compares the text "false" against a real false and matches nothing, which looks exactly like the trigger not firing.

Where it matters there is a string spelling of the same fact. participantRole is host or guest; filter on that, and keep isHost for workflow conditions where booleans behave normally.

It fires for the wrong meetings

Triggers fire for everything on the connected Zoom account, including calls nobody created through a workflow. That is deliberate — it is what catches a rep booking directly in Zoom.

To restrict a workflow to app-created calls, gate on createdByThisApp.

It fires endlessly

A workflow triggered by Meeting Created whose action is Create Meeting creates a meeting, hears about it, and creates another, indefinitely. Same for Webinar Created and Create Webinar.

Gate the workflow on createdByThisApp being false.

Errors from Zoom

“This API endpoint is not recognized” (code 2300)

A join link was put into a meeting id field. The slashes turn the request path into something matching no route, and Zoom’s message never mentions the field you got wrong.

meetingId wants a number like 83044779424, not a URL. It is an easy mistake because meetingId and joinUrl are adjacent outputs of the same Create Meeting step.

The app catches this before it reaches Zoom and names the field, so if you are seeing Zoom’s raw version the id came from somewhere the app could not check.

An id copied from Zoom’s interface

Zoom displays ids as 839 4477 9424. Pasting that verbatim works — spaces are stripped, because there is exactly one thing that value can mean.

The daily cap

Zoom allows 100 create or update calls per user per day, resetting at midnight UTC, and an update spends the same allowance as a creation. See Daily limits.

A webinar action fails immediately

The connected Zoom account does not have the webinar add-on. It is a separate purchase from a paid plan, and the app cannot grant it. See Webinars.

Add Registrant fails

Registration on meetings requires a Licensed Zoom plan. That is Zoom’s prerequisite, not ours. Everything else in the app works without it.

Data that looks wrong

Every meeting reports zero minutes

You are reading Zoom’s own duration field somewhere rather than ours. That field reports the scheduled length and arrives as 0 for instant meetings.

Use actualMinutes from Meeting Ended, which is computed from the start and end times.

attendedMinutes says everyone stayed to the end

The Zoom app is not subscribed to the participant left event. Without a leave time, the figure is computed from the join to the end of the meeting — an upper bound.

attended and attendeeCount are unaffected. Subscribe to that event before making a consequential decision on attendedMinutes.

participantEmail is empty

Zoom reports it only for signed-in participants, so a guest joining from a link is anonymous. This is normal and far more common than expected.

Match on the contact the meeting was created for, which the app already knows. To identify people reliably, use registration so each attendee has their own link — see Registration and join links.

An agenda or topic was wiped

An update step sent a blank value. Every text field on Update Meeting is skipped when blank, so this is usually the toggles, which have no “leave alone” state — hostVideo, participantVideo and waitingRoom always apply whatever they show.

Set them to what the meeting should end up with, not to what you are changing.

Recurring occurrences are indistinguishable

Zoom reuses one meetingId across every occurrence and issues a distinct meetingUuid per occurrence. Key on meetingUuid.

Recordings

You sent downloadUrl. It requires an access token and is not a public link — it exists for workflows piping recordings into their own storage.

Send shareUrl, the viewer-facing page.

Check password. It is the recording’s own passcode, separate from the meeting’s, and when it is set a share link sent without it is useless.

The transcript is empty

Zoom finishes the transcript separately from the recording, often minutes later. A workflow triggered by Recording Completed that expects a transcript alongside it gets nothing.

Use the Transcript Completed trigger, which is a separate event for exactly this reason.

Security

Somebody started the meeting who should not have

startUrl was sent to an attendee. It is a credential, not a link: it embeds a token with a measured lifetime of two hours, and whoever opens it within that window takes the host seat.

It sits next to joinUrl in the variable picker and the two names look interchangeable in a dropdown, which is how this happens. Audit any email or SMS step that touches a Create Meeting output.

Deleting the meeting invalidates it. There is no way to revoke the link on its own.

Still stuck

Check the app’s settings page: it shows the connected Zoom account and the day’s remaining allowance, which together answer a surprising share of “why did nothing happen”.

If the Zoom connection has expired or been revoked on Zoom’s side, reconnecting from that page restores it without touching your workflows.