SendKuy API

Automation

Workflows that run on their own — what starts them, what they can do, and how to see what happened.

A workflow is a small graph. A trigger decides which contacts enter it, and each contact then walks the graph one step at a time, on their own clock.

Four kinds of step exist:

StepWhat it is
TriggerThe event that lets a contact in. Exactly one per workflow.
ActionSomething done to or for that contact — send a message, move them to a group, call your webhook.
ConditionA fork. The contact goes down the Yes branch or the No branch.
WaitA pause. The contact stops here and resumes later.

Triggers

TriggerFires when
new_contactA contact is created — in any group, or in one you pick.
contact_repliedA contact sends you a message on WhatsApp, SMS or email.
no_responseA contact has not replied for N days after a delivered message.
webhookAnother system POSTs to this workflow's URL.
scheduleDaily, weekly on chosen days, or monthly on a chosen date.
birthdayOn a contact's birthday, or N days before it.
manualYou pick the contacts yourself, from the workflow page.

A webhook trigger has its own URL, generated on the server when you save. Treat it as a secret: anyone holding it, with an API key carrying the automation:write scope, can enrol contacts into that workflow. Duplicating a workflow does not copy the URL — the copy gets its own.

Actions

Messaging actions queue through the same sending pipeline your campaigns use, so gateway limits, delays and delivery reports all behave the same way.

Two actions deserve a note, because their names once promised more than they did:

  • Move to group moves the contact. A contact belongs to one group at a time, so there is no way to be in two at once — and nothing is copied.
  • Remove from group moves the contact to Ungrouped. It never deletes them.

Notify me emails the workflow's owner. It cannot send to an arbitrary address; if you need to reach another system, choose the webhook method instead. Outbound webhooks may only target public addresses.

Waits

A wait does not hold a worker open. The contact is parked with a wake-up time and resumes then, so a seven-day wait costs nothing while it runs.

Wait until a date or a time of day uses the timezone set on the step, not the server's.

Personalisation

Placeholders use double braces, in message bodies and in webhook payloads alike:

Hi {{first_name|there}}, we saved your seat.

{{first_name}}, {{last_name}}, {{full_name}}, {{name}}, {{email}}, {{phone}}, {{whatsapp}}, {{whatsapp_contact}}, {{sms_contact}} and {{email_contact}} always exist. {{name}} is the full name, or the contact's number when the contact has no name. {{phone}} is the WhatsApp number, and the SMS number when there is no WhatsApp number; use {{sms_contact}} when you need the SMS number itself. Every custom contact attribute is available under its own name — an attribute called city is {{city}}.

Fallbacks

Write a fallback after a pipe: {{first_name|there}} becomes there when the contact has no first name. A fallback is plain text without {, } or |, and anything past 40 characters is cut off. A placeholder SendKuy does not know is sent as written, unless it carries a fallback — then the fallback is sent. {{name|there}} uses its fallback for a contact without a name, instead of the contact's number. The single-brace form {first_name} is read as well, without a fallback.

When a step fails

Each action carries its own answer to failure:

  • Carry on — log it and move to the next step. The default.
  • Skip this step — the same, stated explicitly.
  • Stop this contact here — that contact's run ends; others are unaffected.

Retries are per step. A retry count of 2 means up to three attempts, spaced by the delay you set.

Limits

Your plan caps three things: how many workflows you may keep, how many steps one workflow may hold, and how many contacts may be enrolled per calendar month. Enrolment stops when the monthly cap is reached; runs already under way finish.

Seeing what happened

Test run walks a workflow against one real contact and reports what each step would do. Nothing is sent, nothing is changed, and no AI credits are spent. Conditions that read an inbound message cannot be simulated — there is no message — and they say so rather than guessing.

Once a workflow is live, its page lists every contact that entered it. Opening a run shows each step, in order, with the gap between them and the reason for any failure. Editing a workflow while contacts are mid-run keeps them on the steps that still exist; contacts standing on a step you delete are stopped, with that reason recorded on their run.

Run history is kept for 90 days.

On this page