Lines
GET /v1/devices: your sending lines with live capacity, warm-up state and queue depth, plus the line health lifecycle.
A line is one managed iMessage sending number. In API field names a line is called a device (device_id, device_name); the two words mean the same thing everywhere in these docs.
List lines
GET https://api.bluereacher.com/v1/devicesReturns every line in the key's workspace with online state, today's cold-outreach usage against its effective daily cap (warm-up aware), and queue depth. Use it to pick a device_id for a send, or to check available capacity before a batch.
curl https://api.bluereacher.com/v1/devices \
-H "Authorization: Bearer brk_your_api_key"{
"success": true,
"devices": [
{
"id": "8c9a4f2e-1d3b-4a6c-9e8f-2b7c5d1a9e3f",
"name": "Line 2",
"number": "+14155550142",
"status": "online",
"sent_today": 212,
"cold_outreach_today": 38,
"daily_cap": 50,
"queue_depth": 6,
"available_today": 12,
"last_seen": "2026-08-31T07:58:12Z",
"warmup": null
}
]
}| Field | Meaning |
|---|---|
status | online or offline. Offline lines cannot take instant sends |
sent_today | All outbound messages today, replies included |
cold_outreach_today | New cold contacts reached today; the only number the cap counts |
daily_cap | Effective new-contact cap today. Warm-up aware: a ramping line shows its current tier, a graduated line shows its full cap |
available_today | daily_cap minus cold_outreach_today |
queue_depth | Drip sends waiting on this line |
warmup | null once graduated; during ramp: { mode, started_at, duration_days, active_days } |
Route around any line where available_today is 0 or status is offline; or skip routing entirely by omitting device_id on sends and letting load-balancing pick.
The cap counts brand-new cold contacts only. Replies, engaged contacts and returning contacts are unlimited and never consume capacity. The full model is in Rate limits and sending capacity.
Warm-up
A new line earns capacity over roughly four weeks of active days, not calendar days: a day banks toward the ramp when the line actually does meaningful sending, and idle days pause progress rather than resetting it. The ramp climbs from a handful of new contacts per day to the line's full cap. warmup.active_days against warmup.duration_days tells you where a line is. Blue Reacher manages the schedule; you never have to pace a ramping line yourself, because daily_cap already reflects its current tier and the drip queue respects it.
Health lifecycle
Deliverability enforcement on iMessage happens at Apple's end, per number. Blue Reacher's job is to keep your lines under those thresholds and to absorb the damage when one gets hit anyway.
- Healthy. The steady state. The drip queue paces sends, quiet hours clamp cold deliveries to the recipient's local daytime, and caps hold new-contact volume in the safe range.
- Cooldown. If Apple rate-limits a number (the typical trigger is too many new cold contacts too fast, or a spike in spam reports), our system pauses cold sends on that line automatically and lets it rest, typically 24 to 72 hours, then re-ramps it. Replies to engaged contacts continue. You will see the pause reflected in
daily_capand, if you subscribe, adevice.health_changedwebhook. - De-registration and replacement. In the worst case Apple de-registers the number from iMessage entirely. The number still works for SMS, but we do not run lines that way: we are an iMessage-first platform, so we replace the line. Replacement is free (once per line per month), typically live within one business day. Conversation history stays in the platform under the line; the new number is a new sender from the recipient's side, so re-opened threads count as new conversations and the replacement line ramps like a new one. Apple bans the number itself, not the account or the platform, which is exactly why the fix is a number swap.
device.status_changed (online/offline) and device.health_changed (can-it-actually-send states like send_outage, imessage_collapse) are separate webhook events, so a line powered down on purpose never shows up as a health incident.
Contacts, opt-out and the AI assistant
Search, upsert and update contacts, read and set opt-out state, and control the AI assistant per contact.
Campaigns and sequencing
How sequencing works over the API: campaigns are a platform feature, and API-driven sequences are built from drip sends plus webhooks.

