## Typing indicators `POST /send-typing-indicator` Show the iMessage typing indicator (the three dots) to a recipient. Authenticate with a Bearer API key, same as every other endpoint. > **iMessage only, existing conversation required** > > Typing indicators are iMessage-only — SMS recipients never see them. The number must already have a conversation on the sending line; there is no indicator without a prior thread. ### Request body - `phoneNumber` (string (E.164), required) — Recipient phone number in E.164 (e.g. +15551234567). Must already have an existing conversation on the sending line. - `lineId` (string (UUID v4)) — Optional sender line. Use the lineId from GET /get-lines. When omitted, uses the line that owns the existing conversation with this number. The indicator auto-clears on the recipient's device after a short period or when a message arrives. The intended pattern is `send-typing-indicator` → wait about 2–4 seconds → `send-api-message`. ### Response On success the endpoint returns HTTP `200` with `{ status: "SENT" | "ERROR", number, error_message }` — `error_message` is null when `status` is `SENT`. Auth and request-validation failures still use standard 4xx bodies with an `error` field. Treat device-level failures (`status: "ERROR"`) as fire-and-forget — do not retry. **Request — Basic** ```bash curl -X POST https://api.tryprojectblue.com/send-typing-indicator \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "phoneNumber": "+15551234567" }' ``` **Request — Humanized sending** Show typing, wait 2–4 seconds, then send the message. ```bash # 1. Show typing curl -X POST https://api.tryprojectblue.com/send-typing-indicator \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"phoneNumber": "+15551234567"}' # 2. Wait 2–4 seconds so the dots are visible sleep 3 # 3. Send the message curl -X POST https://api.tryprojectblue.com/send-api-message \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "message": "Hey — just following up on our conversation.", "phone": "+15551234567" }' ``` **Response — SENT** ```json { "status": "SENT", "number": "+15551234567", "error_message": null } ``` **Response — ERROR** Fire-and-forget — do not retry on ERROR. ```json { "status": "ERROR", "number": "+15551234567", "error_message": "No existing iMessage conversation with this number on the selected line" } ```