preferred_service and Blujay picks for you (Auto). This page shows what each service can carry, how to check a number in advance when your app needs to know, and when the check isn’t worth it.
What works on each service
Links, media and contact cards are all rejected until the contact replies, whatever the service. See Sending rules.
Check a phone number
When your app needs the service in advance, for example to show the recipient’s service in your interface or to keep large media out of an SMS, check the number withPOST /v1/capability/evaluate_service. Send the US number you want to check and the Blujay phone number you’ll send from:
Always send
from_phone_number_id. Find your numbers’ IDs with GET /v1/phone-numbers. You can leave it out only when your workspace has exactly one active number; with several, the request returns 400 PHONE_NUMBER_REQUIRED. An unknown or inactive number returns 404 NOT_FOUND, and a number that isn’t a valid US phone number returns 400 VALIDATION_ERROR.
The check counts toward your read request limit, not your write limit; see Rate limits.
Read an SMS answer carefully
iMessage and RCS answers are confirmed. SMS means one of two things:
- the number is confirmed to use SMS, or
- Blujay couldn’t confirm iMessage or RCS this time.
SMS answer matters, check again later: an inconclusive answer is only reused for 30 seconds, so a later check runs fresh.
Cached answers are free
When Blujay recently checked the same number from the same Blujay phone number, you get that answer back withsource: cached. It doesn’t matter whether the earlier check came from this endpoint, from your team in the Blujay app, or from a send.
Cached answers are free and never limited.
Fresh check limits
A fresh check runs from your Blujay phone number and shares its capacity with your messages, which always go first. Each of your numbers can run:- 30 fresh checks per clock hour, and
- 100 fresh checks per UTC day.
429 RATE_LIMIT_EXCEEDED with a Retry-After header. error.details[0].limit tells you why:
Retry-After seconds before checking from that number again. If checks are briefly unavailable, you get 503 CAPABILITY_CHECK_UNAVAILABLE, also with Retry-After.
When to send with Auto
You don’t need to check a number before you send to it. With Auto, Blujay works out the service when it sends, and sending never uses your capability-check limits.
Don’t check every number before every send, especially for bulk sends: you’ll spend your fresh checks for nothing. The service that actually carried a message is always in its
service field afterwards; see Track a message.
Limitations
- The check covers direct chats only. A group chat doesn’t accept
preferred_service(400VALIDATION_ERROR), and a group’sserviceonGET /v1/chats/{chat_id}reports the group’s service rather than a per-recipient check. - An
SMSanswer can mean “not confirmed”. There is no field that says which. - 30 fresh checks per clock hour and 100 per UTC day per number (
429RATE_LIMIT_EXCEEDED). Cached answers are unlimited. - The check needs an active number. An inactive or unknown
from_phone_number_idreturns404NOT_FOUND.
Next steps
Send messages
Send with Auto or a preferred service.
Track a message
See which service carried each message.
Phone numbers and limits
Find your numbers and their IDs.
Rate limits
Request limits and how to back off.