Number health
How your numbers deliver, and the account settings that keep texts going out when a number struggles. Every role on the account can read these.
#Get a number’s delivery
How well one number’s texts deliver: rates over the last day, week and month, each carrier over the last week, and its most common carrier errors with what they mean.
Path parameters
idintegerRequired- The number id.
Returns
phoneobject{ id, phone_number, friendly_name, status, health_score, total_delivered, total_failed, total_spam_reports, created_at }.delivery_rate_24hobject- Texts from this number in the last 24 hours:
delivered,failed,blocked,pending,total, anddelivered_pctandfailed_pctover the texts with a final status (nullwhen none has one).delivery_rate_7danddelivery_rate_30dare the same over 7 and 30 days. carrier_breakdown_7d[]object[]- Each
{ carrier, total, delivered, failed, pending }.carrieris the display name (T-Mobile, AT&T, Unknown carrier), not the slug the other carrier breakdowns return. top_errors_7d[]object[]- Up to 5, most failures first. Each
{ error_name, carrier, count, explanation }.explanationis{ title, body, reason, severity, fix_action }, ornullwhen Ready has no explanation for that error. sms_spamobject- The last saved web spam check:
{ spam_detected, reports, score, checked_at }. Run a new one with Check a number for spam reports.
Errors
| HTTP | Code | When |
|---|---|---|
| 404 | NUMBER_NOT_FOUND | No number with this id on your account. |
| 500 | DELIVERABILITY_LOAD_FAILED | Ready couldn’t load the figures. Try again in a minute. |
#Check a number for spam reports
Searches the web for spam reports about one number and saves the result on the number (spam on Get a number). A number checked recently answers the saved result with cached: true instead of searching again.
Path parameters
idintegerRequired- The number id.
Returns
data.statusstringclean,low_risk,medium_risk,high_risk, orunknownwhen Ready couldn’t finish the search.unknownisn’t a clean result, and isn’t saved. On a cached answer, readspam_detectedandreportsinstead.data.spam_scorenumber- Higher is worse.
data.text_reportsinteger- Reports about texts.
data.call_reportsinteger- Reports about calls.
data.spam_sources[]object[]- Up to 8 of the pages that mention the number.
data.checked_atstring- When it was checked, ISO 8601.
Errors
| HTTP | Code | When |
|---|---|---|
| 404 | NUMBER_NOT_FOUND | No number with this id on your account. |
| 500 | SPAM_CHECK_FAILED | Ready couldn’t run the check. Try again in a minute. |
#Texts sent per number, last 7 days
How many texts each of your numbers sent on each of the last 7 UTC calendar days (a day ends at midnight UTC, not in your account’s time zone), oldest first, the chart on the Numbers page. Includes your sub-accounts’ numbers.
Returns
sparkobject- Keyed by phone number. Each value is 7 counts, oldest day first. A number that sent nothing in the 7 days isn’t listed.
Errors
| HTTP | Code | When |
|---|---|---|
| 500 | no code | Ready couldn’t load the counts. Try again. |
#Get number protection
Whether Ready replaces a sending number automatically when it gets spam reports. A replacement is a new number with its own monthly fee, so the account holder turns this on in the app.
Returns
data.enabledboolean- Whether Ready replaces a flagged number now.
data.sourcestringexplicit_opt_in,explicit_opt_out,not_opted_inorunknown.data.attestedboolean- Whether the account holder has authorized replacements.
data.attested_atstring | null- When they did.
Errors
| HTTP | Code | When |
|---|---|---|
| 500 | SETTING_LOAD_FAILED | Ready couldn’t load the setting. Try again in a minute. |
#Get Smart delivery
Smart delivery (the smart-routing endpoint) moves a text to another of your numbers when its own number is delivering badly. On unless you turned it off.
Returns
data.enabledboolean- The setting now.
Errors
| HTTP | Code | When |
|---|---|---|
| 500 | SETTING_LOAD_FAILED | Ready couldn’t load the setting. Try again in a minute. |
#Turn Smart delivery on or off
Turns Smart delivery on or off for the account. It only moves texts between numbers you already have, so it costs nothing. Needs the manage_phones permission.
Body parameters
enabledbooleanRequiredtrueorfalse.
Returns
data.enabledboolean- The setting now.
Errors
| HTTP | Code | When |
|---|---|---|
| 400 | toggle_invalid | enabled is missing, or isn’t true or false. |
| 500 | SETTING_SAVE_UNCONFIRMED | Ready couldn’t confirm the change. Read it back to check. |
#Get local presence
Whether texts and calls go out from a number that is local to the contact, when your account has one. On unless you turned it off.
Returns
data.enabledboolean- The setting now.
data.opt_inbooleanfalsetoday. Whentrue, local presence is on only for an account that turned it on itself.data.price_per_text_usdnumber- What local presence costs the account for each segment of a delivered text, in dollars. A two-segment text costs twice this.
0while it isn’t charged.
Errors
| HTTP | Code | When |
|---|---|---|
| 500 | SETTING_LOAD_FAILED | Ready couldn’t load the setting. Try again in a minute. |
#Turn local presence on or off
Turns local presence on or off for the account. Off, a text or call to someone you haven’t reached yet goes out from the account’s default number instead, and from_strategy local does the same; a send that asks for even, deliverability or random still spreads across all your numbers. Each change is recorded in the account’s history, and sending it again with the value already set changes nothing. Needs the manage_phones permission.
Body parameters
enabledbooleanRequiredtrueorfalse.
Returns
data.enabledboolean- The setting now.
Errors
| HTTP | Code | When |
|---|---|---|
| 400 | toggle_invalid | enabled is missing, or isn’t true or false. |
| 403 | products_locked | Your agency locked this switch for your account. Ask your agency to change it. Nothing changed. |
| 500 | SETTING_SAVE_UNCONFIRMED | Ready couldn’t confirm the change. Read it back to check. |
See also: the guide to doing this in the app.