Conerix

Conerix API

Home
Browse topics

Tracking message status

Every message moves through a small, predictable state machine. Poll for status, list recent messages, or subscribe to webhooks for push-based updates.

Lifecycle

StatusMeaning
pendingAccepted by Conerix and queued for the provider.
sentAccepted by the upstream provider. Emits message.sent.
deliveredThe carrier returned a successful delivery receipt. Emits message.delivered.
failedThe provider rejected the send, or delivery failed permanently. Emits message.failed.
undeliveredThe carrier could not deliver (handset off, blacklisted, expired, etc.).

Retrieve one message

get /v1/messages/{id}

curl https://conerix.com/api/v1/messages/msg_VyB2pNkX0wnA9aTrLqDh1Z3Fc \
  -H "Authorization: Bearer ds_live_..."
const res = await fetch(
  "https://conerix.com/api/v1/messages/${messageId}",
  { headers: { Authorization: `Bearer ${process.env.CONERIX_API_KEY}` } }
);
const { data: message } = await res.json();
console.log(message.status, message.delivered_at);
import os, requests

resp = requests.get(
    f"https://conerix.com/api/v1/messages/{message_id}",
    headers={"Authorization": f"Bearer {os.environ['CONERIX_API_KEY']}"},
)
message = resp.json()["data"]
print(message["status"], message["delivered_at"])

List recent messages

get /v1/messages

curl "https://conerix.com/api/v1/messages?status=delivered&limit=20" \
  -H "Authorization: Bearer ds_live_..."

Query parameters

ParamDescription
statusFilter by pending, sent, delivered, failed, undelivered.
toSubstring match against the recipient number.
created_afterISO 8601 timestamp.
created_beforeISO 8601 timestamp.
pagePage number, defaults to 1.
limitResults per page (max 100, defaults to 50).
Push, don't poll. For production traffic, subscribe to webhooks instead of polling. You'll save rate-limit budget and react to delivery events in milliseconds rather than seconds.

Error information

Failed messages include an error object with the upstream error code and a short, human-readable description. Use this in your retry logic and customer support flows.

{
  "id": "msg_VyB2pNkX0wnA9aTrLqDh1Z3Fc",
  "status": "failed",
  "attempts": 2,
  "error": {
    "code": "21610",
    "message": "Attempt to send to unsubscribed recipient"
  }
}