Skip to main content
POST
Send Drip
The Try it panel runs against production (https://app.tuco.ai) with the key you paste into it. There is no sandbox — a request from this page queues a real message from one of your lines.
Use this instead of POST /api/messages for bulk sends (HubSpot/CRM parallel enrollment, list blasts). Same request body — change only the URL. It never 429s a blast, acks 202 immediately, and drips the sends out safely per line. Full guide: Drip.

Authentication

Pass your workspace API key as a Bearer token (same key as /api/messages).

Request body

Identical to POST /api/messages — the fields below are the ones a bulk enrolment actually uses. Everything else that endpoint accepts works here too.
string
The text to send. Required unless attachmentUrls is provided.Send the finished text — merge fields are not substituted here. A body still containing {{firstName}} is rejected with 400 MALFORMED_NAME_TEMPLATE.
string
The phone number to text, in E.164 format (e.g. "+14155551234"). This is how you address a drip send. Required unless you pass recipientEmail.
string
Only for messageType: "email", or an Apple ID you already know is reachable. Prefer recipientPhone. Required unless you pass recipientPhone.
string
default:"imessage"
imessage, sms or email. Anything else returns 400 Invalid messageType. Must be email, sms, or imessage.
string[]
Public URLs to attach. Only http/https entries are kept. When present, message may be empty.
boolean
default:"false"
Deliver a single audio attachment as a native iMessage voice note.
string
Pin the sending line. Omit to round-robin across the workspace’s active lines.
string
Your own id for this send, echoed back in the 202 and in every webhook. Also accepted as the x-correlation-id header, which wins. Omit and Tuco generates one (drip_…).
string
IANA timezone for the send window, e.g. "America/New_York". Required if you set a window.
string
Earliest send time, HH:mm. Must be HH:mm or the request returns 400 Invalid time format.
string
Latest send time, HH:mm.
number[]
Days sending is allowed. 0 = Sunday, 6 = Saturday.
string
HubSpot contact id, for linking the send back to the CRM record.
string
HubSpot portal id.
string
GoHighLevel contact id.
string
GoHighLevel location id.

Example

Success (202 Accepted)


Errors


How it differs from /api/messages

  • Not rate-limited — exempt from the 60/min send limit; a bulk blast is never rejected.
  • Always 202 — the request is buffered and the message is created a moment later, then sent still later (paced per line by the ban protector: ~7 new/hr, ~50 new/day, 150 total/day).
  • Response is 202 { status, correlationId, scheduledDate, jitterMs } — no messageId (the message doesn’t exist yet at ack time); use correlationId to correlate in your webhooks.
  • Idempotency-Key header is honored (HubSpot retries return the first ack).
For low-volume, send-now traffic where you want the real delivery status back immediately, use POST /api/messages instead.