Error codes
Errors are RFC 9457 application/problem+json.
Branch on code, never on title or detail: the code is stable, the wording can change.
Each code's type is a link to its entry here.
Shape
{
"type": "https://staging.callmeawake.com/docs/errors#invalid_timezone",
"title": "Unknown time zone",
"status": 400,
"detail": "'Tokio' is not a time zone we know. Did you mean 'Asia/Tokyo'?",
"code": "invalid_timezone",
"field": "timezone",
"instance": "/api/v1/schedules"
}
field names the request field at fault when there is one.
errors appears on validation_error only, one item per problem.
Rate limits and outages add Retry-After (seconds); see the
API reference for the rest.
400 Bad Request
invalid_timezone
Unknown time zone
The time zone is not an IANA city zone we know, such as Asia/Tokyo or America/Los_Angeles. Abbreviations like PST and legacy aliases are refused too. Search GET /timezones for the right name.
timezone_not_allowed
Time zone not allowed
The zone is a fixed offset (such as Etc/GMT+8), not a place, so it would not follow the clocks where you are. Pick a city zone, or UTC.
time_in_past
Time is in the past
The wall time you asked for has already passed in that zone. Choose a later time or date.
date_too_far
Date is too far ahead
The date is further ahead than we schedule. Pick a nearer date and create the call again.
invalid_time
Invalid time
local_time is not a 24-hour HH:MM clock time.
days_of_week_empty
No days of the week
A recurring wake-up call needs at least one day of the week, from mon to sun.
local_date_required
Date required
A one-off call at a wall time needs local_date as well as local_time. To call after a delay, send in_minutes instead.
in_minutes_out_of_range
Minutes out of range
in_minutes is outside the range we accept for a delay.
invalid_retry_policy
Invalid retry policy
The retry policy is not allowed: the offsets, snooze length, snooze count or ring timeout are outside the limits. Send null to use the default.
phone_number_unverified
Phone number not verified
The number has not been verified yet. Start verification, then check the code it was sent.
phone_number_not_owned
Phone number not yours
The phone number does not belong to this account. List yours with GET /phone-numbers.
message_disallowed_content
Message not allowed
The label or spoken note is too long or has something we do not read aloud: only letters, digits and basic punctuation are allowed, and no links or phone numbers.
not_recurring
Not a recurring wake-up call
This action only applies to a recurring wake-up call, and this one is a one-off.
invalid_phone_number
Invalid phone number
The number is not a valid phone number. Send it in E.164 form, for example +14155551212.
country_not_supported
Country not supported
We do not place wake-up calls to numbers in that country.
verification_code_invalid
Wrong or expired code
The verification code is wrong or has expired. Too many wrong codes lock the number (see verification_locked); ask for a new code.
confirmation_required
Confirmation required
A destructive or consent-giving request must carry its explicit confirmation field, such as confirm set to DELETE when deleting the account.
validation_error
Invalid request
The request is malformed: a field is missing, has the wrong type or breaks a limit. The errors array lists each problem with its location.
401 Unauthorized
unauthenticated
Not signed in
No usable credentials. Send an API key or an app session token as Authorization: Bearer, or use the web session with its CSRF token.
api_key_revoked
API key revoked
This API key was revoked. Create a new key in Settings.
session_expired
Session expired
The session has ended. Sign in again to get a new session token.
402 Payment Required
no_entitlement
No wake-up calls left
The account has no wake-up calls left on its trial or plan, so the call would not be placed. See GET /me/usage.
403 Forbidden
insufficient_scope
Not allowed with these credentials
These credentials cannot do this. A read-only key cannot change anything, the full data export needs a key made with the export scope, and some actions (API keys, registering or removing a device, deleting the account) need the app or the web rather than an API key.
calls_revoked
Calls are turned off
Calls are turned off for this account, for example after someone pressed 9 on a call. Only the account holder can turn them back on, with explicit consent, in the app or on the web (POST /me/resume-calls refuses API keys and MCP clients).
demo_not_available
Demo not available
The demo call is not available for this number or country.
web_checkout_disabled
Web checkout not offered
Subscribing on the web from the app is not offered right now (it is switched off, or payments are not set up). Subscribe in the app with in-app purchase instead. GET /me says whether it is offered: billing.web_checkout_link.
number_blocked
Number blocked
Calls and texts to this number are blocked: it replied STOP, filed a complaint or was blocked by us. A STOP block is lifted only when the number's owner texts START; a complaint or manual block only by support. A number blocked because someone pressed 9 on a demo call is the exception: its owner can verify it with a code, which lifts it.
404 Not Found
not_found
Not found
There is nothing at this path, or it belongs to another account. We answer the same way for both.
405 Method Not Allowed
method_not_allowed
Method not allowed
This path exists but not for this HTTP method. The Allow header lists the methods it accepts.
Returned by the HTTP layer itself, before any request handler runs.
409 Conflict
occurrence_in_progress
Call in progress
The call is ringing right now, so it cannot be changed or deleted. Cancel it first, or wait for it to finish.
occurrence_terminal
Call already finished
The call has already finished (confirmed, missed, failed or cancelled), so this action no longer applies.
number_in_use
Number in use
An enabled wake-up call still rings this number. Change or delete that call first.
idempotency_key_reused
Idempotency key reused
This Idempotency-Key was already used with a different request. Send a new key for a new request; to retry safely, repeat the same request with the same key.
already_subscribed
Already subscribed
The account already has a plan. Change or cancel it with POST /billing/portal instead of starting a new checkout.
429 Too Many Requests
verification_locked
Verification locked
Too many wrong verification codes. Verification for this number is locked for a while; wait for Retry-After seconds.
rate_limited
Too many requests
Too many requests. Wait for Retry-After seconds; the RateLimit-* headers show the limit and when it resets.
demo_rate_limited
Too many demo calls
The demo call limit was reached for this number or network.
daily_cap_reached
Daily call limit reached
The account has reached its limit of calls placed in a UTC day. The count starts again at midnight UTC; Retry-After says how many seconds that is.
500 Internal Server Error
internal_error
Internal error
Something failed on our side that we did not plan for; we have been alerted. If the request was a change, it may not have been applied: read the resource again before retrying.