Skip to main content
The Arnio API follows REST principles. You can use it to send outbound iMessages globally.

Supported Endpoints

  • Single message: POST /send-message
  • Group message: POST /send-group-message

Sending Files

You can send media by including the media_url parameter.
  • The URL must point to a publicly accessible image or .caf (for voice notes).
  • File size is capped at 5MB.
  • Signed URLs are not supported; use Arnio’s media object pattern for secure uploads.
Learn more here: https://docs.arnio.co/api-reference/endpoint/send-message

Status Callbacks

Arnio will POST to your status_callback endpoint when a message’s status changes. Possible statuses:
  • QUEUED
  • SENT
  • DELIVERED (iMessage only)
  • READ (iMessage only)
  • FAILED
You must respond to Arnio’s webhook to prevent duplicate notifications.
{
  "accountEmail": "support@arnio.co",
  "content": "Hello world!",
  "is_outbound": true,
  "status": "DELIVERED",
  "error_code": null,
  "error_message": null,
  "message_handle": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
  "date_sent": "2025-09-10T06:15:05.962Z",
  "date_updated": "2025-09-10T06:15:14.115Z",
  "from_number": "+15122164639",
  "number": "+19998887777",
  "to_number": "+19998887777",
  "was_downgraded": false,
  "plan": "enterprise"
}
Note: Your server must return a response to Arnio’s callback to prevent duplicate webhook deliveries.

Callback Body Fields

FieldTypeDescription
accountEmailstringAssociated Arnio account email
contentstringMessage content
is_outboundbooleantrue if sent by your system, false if received from end user
media_urlstringA CDN link to any attached media
statusstringCurrent status of the message
error_codeintError code if the message failed, null otherwise
error_messagestringHuman-readable error description
message_handlestringUnique Arnio message handle (used to query message status later)
date_sentstringISO 8601 timestamp of when the message was created
date_updatedstringISO 8601 timestamp of the last status update
from_numberstringE.164-formatted Arnio phone number used to send the message
numberstringE.164-formatted number of the end user (your contact)
to_numberstringE.164-formatted number of the intended recipient
was_downgradedbooleantrue if iMessage was unavailable and SMS was used instead
planstringArnio account plan associated with the request

Message Status Values

StatusDescription
QUEUEDMessage has been validated and queued for delivery
SENTMessage was sent from Arnio’s servers
DELIVEREDDelivery confirmed (iMessage only)
READEnd user has read the message (iMessage only)
FAILEDMessage failed to send (see error_code and error_message for details)

Limits

Messages sent through the Arnio API must be fewer than 18,996 characters in length. For longer content, we recommend splitting it into multiple, smaller messages to ensure reliable delivery.

Useful Information

From Number

CAUTION: Arnio prioritizes deliverability and end-user experience. Each of your customers will consistently interact with your brand through one dedicated Arnio phone number, ensuring continuity and trust.
However, depending on your setup and number pooling configuration, different customers may see different Arnio numbers assigned to them. Once assigned, all future conversations with that contact will remain tied to the same number. The from_number field is included in API responses for convenience, allowing you to:
  • Track which number was used to send a given message.
  • Inform customers which number they should expect messages from.

Handle

Every message processed by Arnio includes a unique message_handle. You can use this handle to:
  • Query the current status of a message.
  • Track messages in high-volume campaigns.
  • Resolve situations where a message remains QUEUED or times out.