Skip to content

Operations of the Turbo Notify node

This page lists what the Turbo Notify node does in a workflow. To install it and send a first message, start with Use Turbo Notify in n8n.

Every field takes a fixed value, a value mapped from an earlier node ({{ $json.phone }}) or any other n8n expression. The node runs once for each input item: with 200 incoming rows it sends 200 messages, each with its own recipient and text.

Number is the number to send from. Pick it from the list, or choose By Alias or ID and type its alias (main for the main number) or its num_... ID, or map it.

OperationWhat it does
Send TextSends a text of up to 4096 characters. @5511977770001 (digits, no +) mentions that person.
Send MediaSends an image, video, audio, document or sticker from a public web address. Caption for image, video and document, file name for document.
Send LocationSends a map location.
Send Contact CardSends a contact card with 1 to 10 phone numbers and optional emails. Set Phones Input to JSON to give the phones as a list from an earlier node, such as {{ $json.phones }}.
Send Calendar EventSends an event invitation. WhatsApp shows the time only on WhatsApp Business accounts. Add Remind Before (Minutes) for a reminder.
Send Link ButtonSends a message with a button that opens a link.
Send Typing IndicatorShows “typing” in a chat while your workflow (or an AI step) prepares the answer, and marks that chat’s unread messages as read. Needs the Lone Wolf plan or higher.
ReplyReplies to an earlier message, quoting it. To answer a message from a trigger, map Message ID to {{ $json.data.id }}.
ReactReacts with an emoji. An empty emoji removes yours. Needs the Lone Wolf plan or higher.
Edit Text, Edit CaptionChanges a message you sent, within 15 minutes of sending.
DeleteDeletes a message you sent. The output has deleted: true, which means Turbo Notify accepted the request. WhatsApp finishes the deletion a moment later.
Get StatusReturns pending, sent, delivered, read or failed, with the reason when it failed.
Get QuotaHow many messages the number can still send in this billing cycle. Run it before a big send.
Get, Get ManyReads messages. Get Many filters by group, contact and direction.

The recipient of a send is one of three things:

  • Phone Number: with the country code and a leading +, such as +5511977770001.
  • Contact or Group: picked from a list, or mapped by ID.
  • Auto-Detect: use it when one value from an earlier node can be any of the three. The node tells a phone number, a ct_ ID and a grp_ ID apart.

Digits without + are refused, never guessed. Build the value with {{ '+' + $json.phone }}. Sending to a group needs the Business plan or higher.

The content sends (everything except Send Text) can quote an earlier message with Quoted Message ID under Additional Fields.

Every message step returns the answer of the API plus:

  • id: the message ID.
  • number_alias, or number_id when you gave a num_... ID. These are the same names Get, Get Many and the triggers use.
  • to: the recipient as sent, for sends and the typing indicator.

{{ $json.id }} feeds Get Status, Reply, React, Edit or Delete after any message step. After a trigger it is {{ $json.data.id }}. status is an object: use {{ $json.status.state }}.

The values of the input row stay available with {{ $('Name of the previous node').item.json.column }}.

ResourceOperations
ContactGet, Get Many. Get Many filters by name, phone, how the contact first appeared and whether you messaged them in the current billing cycle.
GroupGet, Get Many. Get Many can include groups the number has left.
NumberGet reads one number with its connection status, which is handy to check before a bulk send. Get Many lists the main and extra numbers and filters by status to find numbers that need attention.
EventGet Many reads what happened on your numbers, newest first, filtered by type, number and time. Use it to catch up on events a workflow missed while it was off.

Get Many operations return one n8n item per result.

  • Return All follows the API cursor until there is nothing left. Otherwise Limit (50 by default) caps the result.
  • Simplify is on by default and keeps the main fields (at most 10). Turn it off for the full objects. It is on for Get too, and a simplified message keeps its text.
  • A filter that is added must be filled in: an empty one is refused instead of returning everything.
  • Spacing. Each number has a minimum gap between sends that depends on the plan. When Turbo Notify answers that a message came too early, the node waits the time it asks for and tries again, up to 3 times. A quota that is used up is never retried.
  • Checked first. The node reads and checks every item before it sends the first one, so one invalid row stops the run with nothing sent. With Continue On Fail the other rows still go out and the invalid one reports what to fix.
  • No double sends. Retry On Fail in the node settings re-runs the whole node, so on real runs (not when you select Execute step) the node sets an Idempotency Key by itself. It is the same when n8n repeats an item and different for every item, so a repeat inside the same run never sends a message twice.
  • Your own key. Under Options, Idempotency Key should differ for every item, such as the order number from an earlier node. One fixed value sends only the first message, and the node refuses a key that is repeated for a different message in the same run.
  • Retrying an execution. Retrying an execution from the editor creates a new execution and sends the items that already went out again.
  • A new number. Test with a few messages: a number connected today sends a limited volume a day. The table is in Use Turbo Notify in n8n.

Before a big send, a Number > Get step tells you whether the number is connected, and Message > Get Quota how many messages it can still send in the cycle. Plans and quotas are on Billing (opens in a new tab).

The node stops with the reason and what to change. Turn on Continue On Fail in the node settings to keep the workflow going: the failed item then carries the message in error and what to change in hint.

CodeWhat to do
not_authenticatedThe key is wrong, revoked or expired. Create a new one under API keys.
insufficient_scopeThe key lacks a permission. The message names it.
number_not_connectedReconnect the number under Numbers.
messages_quota_exceeded, contact_quota_exceededThe allowance for the billing cycle is used up. It resets when the cycle turns, or when you change the plan under Billing.
warmup_limit_exceededA new number reached its daily volume. The message says how long until the count starts again, at midnight UTC.
feature_not_availableThe plan does not include it, for example sending to groups or the typing indicator.
edit_window_expiredA text or caption can be edited only within 15 minutes.
send_rate_spacing, rate_limit_exceededToo fast for the plan. The node waits and tries again up to 3 times before it stops.

If Turbo Notify cannot be reached or does not answer in time, the message says so. For a send, check Message > Get Many with Direction Sent before you run it again, because the message may have gone out. All codes are in the error reference.