Skip to content
V2 (Legacy) API ReferenceGet started

Capability Checks

Probe whether a handle can receive iMessage or RCS before sending.

Capability checks tell you whether a recipient handle can receive iMessage or RCS right now. Use them to pick the right protocol, to gate rich-only features (effects, decorations), or to fall back gracefully to SMS when a richer service isn’t available.

You do not need to capability-check every send — the API selects the best available service automatically when preferred_service is omitted. Capability checks matter when you want to make product decisions before calling POST /v3/chats.

POST the recipient handle to /v3/capability/check_imessage. The response includes an available boolean — branch on it to decide whether to use iMessage-only features. See the Check iMessage API reference.

const result = await client.capability.checkImessage({ address: '+15556667777' });
if (result.available) {
// Recipient is reachable on iMessage — safe to use effects, decorations, etc.
}

Same shape against /v3/capability/check_rcs. See the Check RCS API reference.

FieldRequiredDescription
addressYesRecipient handle — phone number (E.164) or email address for iMessage
fromNoOne of your provisioned numbers to run the check from — pins the result to a specific line
If the check says…Do this
iMessage capableSend with preferred_service: "iMessage" to unlock effects, decorations, read receipts, editing
RCS capableSend with preferred_service: "RCS" for rich features on Android
NeitherFall back to SMS/MMS, or let automatic selection pick SMS

Capability is a property of the recipient’s device and account, not a static attribute of the phone number — a user switching from iPhone to Android, or disabling iMessage, changes the answer. Cache results only briefly (minutes, not days), and refresh on any message.failed event whose error suggests a service mismatch.

Capability check endpoints are rate-limited to prevent abuse (e.g. using them to enumerate which numbers are on iMessage). Excessive calls return HTTP 429 with a Retry-After header and error code 1007. Caching results as described above is the easiest way to stay under the limit. See Rate Limits for the full response shape and retry handling.