API reference

Version 1.0.0 · 54 endpoints · openapi.json (OpenAPI 3.1, for code generators)

Wake-up calls pinned to time zones. Authenticate with Authorization: Bearer <API key or app session token>. Errors are RFC 9457 application/problem+json; POST accepts Idempotency-Key; responses carry RateLimit-* headers.

Base URL: https://staging.callmeawake.com/api/v1. Failures are listed on Error codes.

Authentication

Each endpoint lists the credentials it accepts; any one of them is enough. Endpoints marked public need none.

BearerAuth

Send an API key, or the session token the iOS app gets at sign-in, as Authorization: Bearer <token>.

SessionCookieAuth

The signed-in browser session (sessionid cookie). Unsafe methods also need the X-CSRFToken header.

SessionTokenHeader

The app session token, in the X-Session-Token header.

Account

GET /api/v1/me #

The signed-in account

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Responses

200 OK · application/json · MeOut
{
  "billing": {
    "web_checkout_link": true,
    "web_checkout_plans": [
      {
        "code": "traveler_monthly",
        "currency": "USD",
        "display_price": "$6/month",
        "interval": "string",
        "name": "Traveler",
        "price_cents": 0
      }
    ]
  },
  "calls_revoked_at": "2026-10-05T21:30:00Z",
  "default_backup_alarm": true,
  "default_retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "digest_opt_in": true,
  "display_name": "string",
  "email": "string",
  "greeting_name": "string",
  "home_timezone": "America/Los_Angeles",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "locale": "string",
  "marketing_opt_in": true,
  "onboarding": {
    "finished": true,
    "next": "string",
    "readiness": {
      "contact_saved": true,
      "dnd_acknowledged": true,
      "last_success_at": "2026-10-05T21:30:00Z",
      "last_test_at": "2026-10-05T21:30:00Z",
      "last_test_status": "confirmed",
      "phone_expired": true,
      "phone_verified": true,
      "stale": true,
      "test_call_done": true
    },
    "steps": [
      {
        "done": true,
        "number": 5,
        "skip_warning": "string",
        "skippable": true,
        "skipped": true,
        "slug": "ring",
        "title": "Make sure it rings"
      }
    ],
    "texts": {
      "contact": {
        "body": "string",
        "title": "string"
      },
      "ring": {
        "button": "string",
        "steps_android": [],
        "steps_ios": [],
        "title": "string",
        "why": "string",
        "why_title": "string"
      },
      "setup_test_call": {
        "answered_unconfirmed": "string",
        "intro": "string",
        "no_answer": "string",
        "voicemail": "string"
      },
      "stale_notice": "string",
      "test_call": {
        "answered_unconfirmed": "string",
        "intro": "string",
        "no_answer": "string",
        "voicemail": "string"
      }
    }
  },
  "onboarding_state": {},
  "plan": {
    "code": "trial",
    "entitled": true,
    "name": "string",
    "source": "stripe",
    "status": "trialing"
  },
  "time_format": "string",
  "voice": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/me' \
  -H 'Authorization: Bearer $API_KEY'

PATCH /api/v1/me #

Change profile settings

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Request body application/json · required · MePatchIn

Field Type Description
default_backup_alarm boolean or null
default_retry_policy object or null
digest_opt_in boolean or null
display_name string or null
greeting_name string or null
home_timezone string or null
locale string or null
marketing_opt_in boolean or null
time_format string or null
voice string or null
{
  "default_backup_alarm": true,
  "default_retry_policy": {},
  "digest_opt_in": true,
  "display_name": "string",
  "greeting_name": "string",
  "home_timezone": "America/Los_Angeles",
  "locale": "string",
  "marketing_opt_in": true,
  "time_format": "string",
  "voice": "string"
}

Responses

200 OK · application/json · MeOut
{
  "billing": {
    "web_checkout_link": true,
    "web_checkout_plans": [
      {
        "code": "traveler_monthly",
        "currency": "USD",
        "display_price": "$6/month",
        "interval": "string",
        "name": "Traveler",
        "price_cents": 0
      }
    ]
  },
  "calls_revoked_at": "2026-10-05T21:30:00Z",
  "default_backup_alarm": true,
  "default_retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "digest_opt_in": true,
  "display_name": "string",
  "email": "string",
  "greeting_name": "string",
  "home_timezone": "America/Los_Angeles",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "locale": "string",
  "marketing_opt_in": true,
  "onboarding": {
    "finished": true,
    "next": "string",
    "readiness": {
      "contact_saved": true,
      "dnd_acknowledged": true,
      "last_success_at": "2026-10-05T21:30:00Z",
      "last_test_at": "2026-10-05T21:30:00Z",
      "last_test_status": "confirmed",
      "phone_expired": true,
      "phone_verified": true,
      "stale": true,
      "test_call_done": true
    },
    "steps": [
      {
        "done": true,
        "number": 5,
        "skip_warning": "string",
        "skippable": true,
        "skipped": true,
        "slug": "ring",
        "title": "Make sure it rings"
      }
    ],
    "texts": {
      "contact": {
        "body": "string",
        "title": "string"
      },
      "ring": {
        "button": "string",
        "steps_android": [],
        "steps_ios": [],
        "title": "string",
        "why": "string",
        "why_title": "string"
      },
      "setup_test_call": {
        "answered_unconfirmed": "string",
        "intro": "string",
        "no_answer": "string",
        "voicemail": "string"
      },
      "stale_notice": "string",
      "test_call": {
        "answered_unconfirmed": "string",
        "intro": "string",
        "no_answer": "string",
        "voicemail": "string"
      }
    }
  },
  "onboarding_state": {},
  "plan": {
    "code": "trial",
    "entitled": true,
    "name": "string",
    "source": "stripe",
    "status": "trialing"
  },
  "time_format": "string",
  "voice": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X PATCH 'https://staging.callmeawake.com/api/v1/me' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"default_backup_alarm": true, "default_retry_policy": {}, "digest_opt_in": true, "display_name": "string", "greeting_name": "string", "home_timezone": "America/Los_Angeles", "locale": "string", "marketing_opt_in": true, "time_format": "string", "voice": "string"}'

DELETE /api/v1/me #

Delete the account

Requires {"confirm": "DELETE", "code": "<emailed code>"} (09 §2.6, D-033). Calls stop at once, personal data is anonymized now and purged after 30 days. Not with an API key.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Request body application/json · required · DeleteMeIn

Field Type Description
code string or null

The 6-digit code from POST /me/deletion-code.

confirm string or null
{
  "code": "string",
  "confirm": "DELETE"
}

Responses

202 Accepted · application/json · AccountDeletedOut
{
  "deleted_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X DELETE 'https://staging.callmeawake.com/api/v1/me' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"code": "string", "confirm": "DELETE"}'

POST /api/v1/me/apple-authorization #

Keep the Sign in with Apple token, to revoke it at deletion

Right after signing in with Apple, the app sends the credential's authorizationCode. The server exchanges it with Apple and keeps the refresh token, encrypted, only to revoke it when the account is deleted (App Store guideline 5.1.1(v)). 204 also when the server has no Apple key configured (nothing is kept). 400 validation_error for a code Apple refuses or that is not for this account's Apple ID; 503 provider_unavailable when Apple cannot be reached; 429 past 10 a minute. Not with an API key.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · AppleAuthorizationIn

Field Type Description
authorization_code required string

The authorizationCode of the Sign in with Apple credential the app just signed in with (single use, valid 5 minutes).

max length 1024
{
  "authorization_code": "string"
}

Responses

204 No Content
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/me/apple-authorization' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"authorization_code": "string"}'

POST /api/v1/me/deletion-code #

Email the code that confirms deleting the account

D-033: 3 codes an hour; a code lasts 10 minutes. Not with an API key.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Responses

202 Accepted · application/json · DeletionCodeOut
{
  "sent_to": "string",
  "valid_minutes": 0
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/me/deletion-code' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7'

GET /api/v1/me/export #

Everything the account owns, as JSON

18 §2: a streamed JSON document of every row the account owns. An API key needs the opt-in export scope (chosen when the key is made; 403 insufficient_scope without it). The app's session token and the web session need nothing extra.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Responses

200 OK · application/json · object
{}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/me/export' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/me/onboarding #

Record a self-reported onboarding step

step is contact_saved or dnd_acknowledged (14 §1 steps 4-5); the server sets the other flags. Returns the updated onboarding_state.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · OnboardingIn

Field Type Description
done boolean default true
step required string
{
  "done": true,
  "step": "contact_saved"
}

Responses

200 OK · application/json · object
{}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/me/onboarding' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"done": true, "step": "contact_saved"}'

POST /api/v1/me/onboarding/skip #

Skip an onboarding step

14 §1: contact, ring, test-call or first-call, after showing the step's skip_warning. Remembered for the web stepper too. 400 validation_error for any other step. Returns onboarding as GET /me shows it.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · OnboardingSkipIn

Field Type Description
step required string

contact, ring, test-call, …

{
  "step": "ring"
}

Responses

200 OK · application/json · OnboardingOut
{
  "finished": true,
  "next": "string",
  "readiness": {
    "contact_saved": true,
    "dnd_acknowledged": true,
    "last_success_at": "2026-10-05T21:30:00Z",
    "last_test_at": "2026-10-05T21:30:00Z",
    "last_test_status": "confirmed",
    "phone_expired": true,
    "phone_verified": true,
    "stale": true,
    "test_call_done": true
  },
  "steps": [
    {
      "done": true,
      "number": 5,
      "skip_warning": "string",
      "skippable": true,
      "skipped": true,
      "slug": "ring",
      "title": "Make sure it rings"
    }
  ],
  "texts": {
    "contact": {
      "body": "string",
      "title": "string"
    },
    "ring": {
      "button": "string",
      "steps_android": [
        "string"
      ],
      "steps_ios": [
        "string"
      ],
      "title": "string",
      "why": "string",
      "why_title": "string"
    },
    "setup_test_call": {
      "answered_unconfirmed": "string",
      "intro": "string",
      "no_answer": "string",
      "voicemail": "string"
    },
    "stale_notice": "string",
    "test_call": {
      "answered_unconfirmed": "string",
      "intro": "string",
      "no_answer": "string",
      "voicemail": "string"
    }
  }
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/me/onboarding/skip' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"step": "ring"}'

POST /api/v1/me/resume-calls #

Turn calls back on after pressing 9

Explicit re-consent (D-016): {"consent": true}. Not with an API key.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · ResumeCallsIn

Field Type Description
consent boolean or null
{
  "consent": true
}

Responses

200 OK · application/json · MeOut
{
  "billing": {
    "web_checkout_link": true,
    "web_checkout_plans": [
      {
        "code": "traveler_monthly",
        "currency": "USD",
        "display_price": "$6/month",
        "interval": "string",
        "name": "Traveler",
        "price_cents": 0
      }
    ]
  },
  "calls_revoked_at": "2026-10-05T21:30:00Z",
  "default_backup_alarm": true,
  "default_retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "digest_opt_in": true,
  "display_name": "string",
  "email": "string",
  "greeting_name": "string",
  "home_timezone": "America/Los_Angeles",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "locale": "string",
  "marketing_opt_in": true,
  "onboarding": {
    "finished": true,
    "next": "string",
    "readiness": {
      "contact_saved": true,
      "dnd_acknowledged": true,
      "last_success_at": "2026-10-05T21:30:00Z",
      "last_test_at": "2026-10-05T21:30:00Z",
      "last_test_status": "confirmed",
      "phone_expired": true,
      "phone_verified": true,
      "stale": true,
      "test_call_done": true
    },
    "steps": [
      {
        "done": true,
        "number": 5,
        "skip_warning": "string",
        "skippable": true,
        "skipped": true,
        "slug": "ring",
        "title": "Make sure it rings"
      }
    ],
    "texts": {
      "contact": {
        "body": "string",
        "title": "string"
      },
      "ring": {
        "button": "string",
        "steps_android": [],
        "steps_ios": [],
        "title": "string",
        "why": "string",
        "why_title": "string"
      },
      "setup_test_call": {
        "answered_unconfirmed": "string",
        "intro": "string",
        "no_answer": "string",
        "voicemail": "string"
      },
      "stale_notice": "string",
      "test_call": {
        "answered_unconfirmed": "string",
        "intro": "string",
        "no_answer": "string",
        "voicemail": "string"
      }
    }
  },
  "onboarding_state": {},
  "plan": {
    "code": "trial",
    "entitled": true,
    "name": "string",
    "source": "stripe",
    "status": "trialing"
  },
  "time_format": "string",
  "voice": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/me/resume-calls' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"consent": true}'

GET /api/v1/me/timezone-context #

Home zone, device zone and travel mismatches

04 §8: upcoming calls within 36 h whose clock differs from the device's.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Responses

200 OK · application/json · TimezoneContextOut
{
  "device_id": "string",
  "device_timezone": "America/Los_Angeles",
  "device_timezone_reported_at": "string",
  "home_timezone": "America/Los_Angeles",
  "mismatches": [
    {
      "device_utc_offset": "string",
      "device_zone": "string",
      "in_device_zone": "string",
      "in_device_zone_date": "string",
      "occurrence_id": "string",
      "schedule_id": "string",
      "scheduled_at": "string",
      "scheduled_local": "string",
      "scheduled_local_date": "string",
      "scheduled_utc_offset": "string",
      "scheduled_zone": "string",
      "suggested": {
        "local_date": "string",
        "local_time": "string",
        "timezone": "Asia/Tokyo",
        "scheduled_at": "string",
        "utc_offset": "string",
        "wall_time_kind": "string"
      }
    }
  ]
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/me/timezone-context' \
  -H 'Authorization: Bearer $API_KEY'

GET /api/v1/me/usage #

Plan, calls used and included this period, credits, trial

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Responses

200 OK · application/json · UsageOut
{
  "calls_included": 0,
  "calls_used": 0,
  "credits_remaining": 0,
  "near_limit": true,
  "period_end": "2026-10-05T21:30:00Z",
  "period_start": "2026-10-05T21:30:00Z",
  "plan": {
    "code": "trial",
    "entitled": true,
    "name": "string",
    "source": "stripe",
    "status": "trialing"
  },
  "trial": {
    "calls_left": 0,
    "ends_at": "2026-10-05T21:30:00Z"
  },
  "trial_calls_included": 0,
  "trial_calls_used": 0,
  "trial_ends_at": "2026-10-05T21:30:00Z",
  "trial_started_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/me/usage' \
  -H 'Authorization: Bearer $API_KEY'

API keys

GET /api/v1/api-keys #

The account's API keys, newest first

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
cursor query string or null
limit query integer default 50

Responses

200 OK · application/json · ApiKeyPage
{
  "items": [
    {
      "created_at": "2026-10-05T21:30:00Z",
      "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "last_used_at": "2026-10-05T21:30:00Z",
      "name": "string",
      "prefix": "string",
      "scopes": [
        "string"
      ]
    }
  ],
  "next_cursor": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/api-keys' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/api-keys #

Create an API key

scopes: read and/or write (default both), and optionally export, which lets the key download the full account export (GET /me/export); export is never a default and needs read. The full key is shown once, and is never stored for an Idempotency-Key replay.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Request body application/json · required · ApiKeyIn

Field Type Description
name required string
scopes array of string or null

read, write, export. Default read and write. export (opt-in, needs read) allows GET /me/export.

{
  "name": "Laptop script",
  "scopes": [
    "read",
    "write"
  ]
}

Responses

201 Created · application/json · ApiKeyCreatedOut
{
  "created_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "key": "string",
  "last_used_at": "2026-10-05T21:30:00Z",
  "name": "string",
  "prefix": "string",
  "scopes": [
    "string"
  ]
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/api-keys' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name": "Laptop script", "scopes": ["read", "write"]}'

DELETE /api/v1/api-keys/{key_id} #

Revoke an API key

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
key_id required path string

Responses

204 No Content
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X DELETE 'https://staging.callmeawake.com/api/v1/api-keys/{key_id}' \
  -H 'Authorization: Bearer $API_KEY'

Billing

POST /api/v1/billing/checkout #

Start a Stripe Checkout for a plan

10 §3. Returns the hosted Checkout URL; it comes back to Settings → Billing. The subscription is recorded when Stripe's webhook arrives. 409 already_subscribed when the account has a plan.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · CheckoutIn

Field Type Description
plan required string
{
  "plan": "traveler_monthly"
}

Responses

200 OK · application/json · BillingRedirectOut
{
  "url": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/billing/checkout' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"plan": "traveler_monthly"}'

GET /api/v1/billing/plans #

The plans on offer

10 §1. Active plans, cheapest first. Prices are founder-adjustable data.

Authentication

None, this endpoint is public.

Responses

200 OK · application/json · BillingPlanPage
{
  "items": [
    {
      "code": "traveler_monthly",
      "currency": "USD",
      "included_calls_per_period": 0,
      "interval": "string",
      "name": "string",
      "price_cents": 0,
      "purchasable": true,
      "tier_b_multiplier": 0
    }
  ],
  "next_cursor": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/billing/plans'

POST /api/v1/billing/portal #

Open the Stripe Customer Portal

10 §3. Change plan, card or cancel. The URL signs its holder into the account's billing and expires within minutes.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Responses

200 OK · application/json · BillingRedirectOut
{
  "url": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/billing/portal' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7'

POST /api/v1/billing/revenuecat/sync #

Pull the account's in-app purchases from RevenueCat

10 §4. The mobile app calls it on open and after a purchase or restore. The server asks RevenueCat for the signed-in account's subscriptions (never for an id the client names), applies them, and answers with the plan the account now has. 503 provider_unavailable while in-app purchase is not set up or RevenueCat is down.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · RevenueCatSyncIn

Field Type Description
app_user_id string or null

The app's RevenueCat app user id: the account's own id (id of GET /me). The server always asks RevenueCat for the signed-in account and refuses (400) any other value.

{
  "app_user_id": "string"
}

Responses

200 OK · application/json · RevenueCatSyncOut
{
  "changed": true,
  "plan": {
    "code": "trial",
    "entitled": true,
    "name": "string",
    "source": "stripe",
    "status": "trialing"
  }
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/billing/revenuecat/sync' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"app_user_id": "string"}'

POST /api/v1/billing/web-checkout #

A one-time link to subscribe on the web (US storefront)

10 §4, D-057. The app's session token only: an API key or the web session gets 403 insufficient_scope. Returns a link to /app/subscribe/<token> on this host, valid for 10 minutes and once; opening it in Safari asks "Continue as <email>?", then signs that browser into this account and continues to Stripe Checkout for the plan, which returns to /app/subscribe/done. 403 web_checkout_disabled when the web checkout is not offered, staff accounts included (GET /me billing.web_checkout_link is false); 409 already_subscribed when the account has a plan. 5 a minute per account.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · WebCheckoutIn

Field Type Description
plan required string

traveler_monthly or traveler_yearly

{
  "plan": "traveler_monthly"
}

Responses

200 OK · application/json · WebCheckoutOut
{
  "expires_at": "2026-10-05T21:30:00Z",
  "url": "https://<host>/app/subscribe/<token>"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/billing/web-checkout' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"plan": "traveler_monthly"}'

Demo

POST /api/v1/demo/call #

Check the demo code and place the demo call

13 §3, 07 §2.9: places one free demo call now (06 §3.4 script). 201 with the call; 200 with the same call when the request is repeated with the same code (any other code is 400 and shows nothing). A wrong or expired code is 400 verification_code_invalid (5 wrong codes end the request); one demo call per number a day (429 demo_rate_limited).

Authentication

None, this endpoint is public.

Request body application/json · required · DemoCallIn

Field Type Description
code string or null
e164 string or null
{
  "code": "123456",
  "e164": "+14155551212"
}

Responses

200 OK · application/json · DemoCallOut
{
  "created_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "live": true,
  "state": "string",
  "status": "string",
  "to_masked": "string"
}
201 Created · application/json · DemoCallOut
{
  "created_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "live": true,
  "state": "string",
  "status": "string",
  "to_masked": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/demo/call' \
  -H 'Content-Type: application/json' \
  -d '{"code": "123456", "e164": "+14155551212"}'

POST /api/v1/demo/start #

Text a demo code to a number

13 §3, 07 §2.9: the first step of the free demo call. consent: true is required (the number receives a text, then one automated call made with an artificial or prerecorded voice; consent is not a condition of any purchase). Mobile and landline numbers in Tier A countries only (403 demo_not_available). Every start counts against 3 an hour per client IP; a number that is blocked or has had its demo today gets the same 202 as any other and no text (it can never get a code right). 2 codes a day per number, and daily caps for everyone (429 demo_rate_limited; DEMO_DAILY_CAP=0 turns the demo off).

Authentication

None, this endpoint is public.

Request body application/json · required · DemoStartIn

Field Type Description
consent boolean or null

Required, true: the person agrees that this number receives one automated call made with an artificial or prerecorded voice (and a text with a code first). Consent is not a condition of any purchase.

e164 string or null
{
  "consent": true,
  "e164": "+14155551212"
}

Responses

202 Accepted · application/json · DemoStartOut
{
  "channel": "sms",
  "code_valid_seconds": 0,
  "e164_masked": "string",
  "status": "code_sent"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/demo/start' \
  -H 'Content-Type: application/json' \
  -d '{"consent": true, "e164": "+14155551212"}'

Devices

POST /api/v1/devices #

Register this app install (or update it)

Upsert by installation_id (a UUID the app generates once): 201 new, 200 known. The app's session token or the web session only; an API key gets 403 insufficient_scope. At most 10 a minute per account (429 rate_limited). An account holds up to 20 app devices: a new install past that is never refused, the device seen longest ago is removed (and its app signed out) to make room.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · DeviceIn

Field Type Description
alarm_capability string or null
app_version string or null
installation_id required string (uuid)
model string or null
os_version string or null
platform required string
push_token string or null
timezone string or null
{
  "alarm_capability": "string",
  "app_version": "string",
  "installation_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "model": "string",
  "os_version": "string",
  "platform": "ios",
  "push_token": "string",
  "timezone": "Asia/Tokyo"
}

Responses

200 OK · application/json · DeviceOut
{
  "alarm_capability": "string",
  "app_version": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "installation_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "last_seen_at": "2026-10-05T21:30:00Z",
  "model": "string",
  "os_version": "string",
  "platform": "string",
  "push_token_set": true,
  "timezone": "Asia/Tokyo",
  "timezone_reported_at": "2026-10-05T21:30:00Z"
}
201 Created · application/json · DeviceOut
{
  "alarm_capability": "string",
  "app_version": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "installation_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "last_seen_at": "2026-10-05T21:30:00Z",
  "model": "string",
  "os_version": "string",
  "platform": "string",
  "push_token_set": true,
  "timezone": "Asia/Tokyo",
  "timezone_reported_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/devices' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"alarm_capability": "string", "app_version": "string", "installation_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10", "model": "string", "os_version": "string", "platform": "ios", "push_token": "string", "timezone": "Asia/Tokyo"}'

PATCH /api/v1/devices/{device_id} #

Update push token, zone, versions

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
device_id required path string

Request body application/json · required · DevicePatchIn

Field Type Description
alarm_capability string or null
app_version string or null
model string or null
os_version string or null
push_token string or null
timezone string or null
{
  "alarm_capability": "string",
  "app_version": "string",
  "model": "string",
  "os_version": "string",
  "push_token": "string",
  "timezone": "Asia/Tokyo"
}

Responses

200 OK · application/json · DeviceOut
{
  "alarm_capability": "string",
  "app_version": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "installation_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "last_seen_at": "2026-10-05T21:30:00Z",
  "model": "string",
  "os_version": "string",
  "platform": "string",
  "push_token_set": true,
  "timezone": "Asia/Tokyo",
  "timezone_reported_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X PATCH 'https://staging.callmeawake.com/api/v1/devices/{device_id}' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"alarm_capability": "string", "app_version": "string", "model": "string", "os_version": "string", "push_token": "string", "timezone": "Asia/Tokyo"}'

DELETE /api/v1/devices/{device_id} #

Forget a device (on sign-out)

Deletes the device and its push token and ends the app sessions bound to it. The app's session token or the web session only; an API key gets 403 insufficient_scope.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
device_id required path string

Responses

204 No Content
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X DELETE 'https://staging.callmeawake.com/api/v1/devices/{device_id}' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/devices/{device_id}/timezone #

Report the zone the device is in

04 §8: returns the timezone context for this device. Never moves a call.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
device_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · DeviceTimezoneIn

Field Type Description
reported_at string (date-time) or null

When the device saw the zone (UTC).

timezone required string
{
  "reported_at": "2026-10-05T21:30:00Z",
  "timezone": "Asia/Tokyo"
}

Responses

200 OK · application/json · TimezoneContextOut
{
  "device_id": "string",
  "device_timezone": "America/Los_Angeles",
  "device_timezone_reported_at": "string",
  "home_timezone": "America/Los_Angeles",
  "mismatches": [
    {
      "device_utc_offset": "string",
      "device_zone": "string",
      "in_device_zone": "string",
      "in_device_zone_date": "string",
      "occurrence_id": "string",
      "schedule_id": "string",
      "scheduled_at": "string",
      "scheduled_local": "string",
      "scheduled_local_date": "string",
      "scheduled_utc_offset": "string",
      "scheduled_zone": "string",
      "suggested": {
        "local_date": "string",
        "local_time": "string",
        "timezone": "Asia/Tokyo",
        "scheduled_at": "string",
        "utc_offset": "string",
        "wall_time_kind": "string"
      }
    }
  ]
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/devices/{device_id}/timezone' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"reported_at": "2026-10-05T21:30:00Z", "timezone": "Asia/Tokyo"}'

Occurrences and calls

GET /api/v1/calls #

Call history, newest first

Every attempt of every wake-up call, and standalone test calls.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
cursor query string or null
limit query integer default 50

Responses

200 OK · application/json · AttemptPage
{
  "items": [
    {
      "answered_at": "2026-10-05T21:30:00Z",
      "answered_by": "string",
      "created_at": "2026-10-05T21:30:00Z",
      "digits": "string",
      "due_at": "2026-10-05T21:30:00Z",
      "duration_seconds": 0,
      "ended_at": "2026-10-05T21:30:00Z",
      "error_code": "string",
      "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "kind": "string",
      "live": true,
      "n": 0,
      "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "requested_at": "2026-10-05T21:30:00Z",
      "ringing_at": "2026-10-05T21:30:00Z",
      "status": "string",
      "to_masked": "string"
    }
  ],
  "next_cursor": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/calls' \
  -H 'Authorization: Bearer $API_KEY'

GET /api/v1/calls/{call_id} #

One call attempt, live

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
call_id required path string

Responses

200 OK · application/json · AttemptOut
{
  "answered_at": "2026-10-05T21:30:00Z",
  "answered_by": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "digits": "string",
  "due_at": "2026-10-05T21:30:00Z",
  "duration_seconds": 0,
  "ended_at": "2026-10-05T21:30:00Z",
  "error_code": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "live": true,
  "n": 0,
  "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "requested_at": "2026-10-05T21:30:00Z",
  "ringing_at": "2026-10-05T21:30:00Z",
  "status": "string",
  "to_masked": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/calls/{call_id}' \
  -H 'Authorization: Bearer $API_KEY'

GET /api/v1/occurrences #

Calls by time

from/to are UTC instants bounding scheduled_at (from inclusive, to exclusive). Without either: the last day and the next seven. Soonest first.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
cursor query string or null
from query string (date-time) or null
limit query integer default 50
status query string or null
to query string (date-time) or null

Responses

200 OK · application/json · OccurrencePage
{
  "items": [
    {
      "attempt_count": 0,
      "backup_alarm_at": "2026-10-05T21:30:00Z",
      "confirmed_at": "2026-10-05T21:30:00Z",
      "derivation_source": "string",
      "dispatched_at": "2026-10-05T21:30:00Z",
      "finished_at": "2026-10-05T21:30:00Z",
      "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "in_home_timezone": {
        "date": "string",
        "time": "string",
        "timezone": "Asia/Tokyo",
        "utc_offset": "string"
      },
      "in_seconds": 0,
      "label": "string",
      "local": {
        "abbreviation": "JST",
        "date": "2026-10-06",
        "time": "06:30",
        "timezone": "Asia/Tokyo",
        "utc_offset": "+09:00",
        "wall_time_kind": "normal"
      },
      "notice": "string",
      "outcome_reason": "string",
      "phone_number": {
        "e164_masked": "+1 415 ••• 1212",
        "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
        "label": "string"
      },
      "reached_voicemail": false,
      "schedule_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "scheduled_at": "2026-10-05T21:30:00Z",
      "snooze_count": 0,
      "status": "string"
    }
  ],
  "next_cursor": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/occurrences' \
  -H 'Authorization: Bearer $API_KEY'

GET /api/v1/occurrences/{occurrence_id} #

One call, with its attempts

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
occurrence_id required path string

Responses

200 OK · application/json · OccurrenceDetailOut
{
  "attempt_count": 0,
  "attempts": [
    {
      "answered_at": "2026-10-05T21:30:00Z",
      "answered_by": "string",
      "created_at": "2026-10-05T21:30:00Z",
      "digits": "string",
      "due_at": "2026-10-05T21:30:00Z",
      "duration_seconds": 0,
      "ended_at": "2026-10-05T21:30:00Z",
      "error_code": "string",
      "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "kind": "string",
      "live": true,
      "n": 0,
      "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "requested_at": "2026-10-05T21:30:00Z",
      "ringing_at": "2026-10-05T21:30:00Z",
      "status": "string",
      "to_masked": "string"
    }
  ],
  "backup_alarm_at": "2026-10-05T21:30:00Z",
  "confirmed_at": "2026-10-05T21:30:00Z",
  "derivation_source": "string",
  "dispatched_at": "2026-10-05T21:30:00Z",
  "finished_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "in_home_timezone": {
    "date": "string",
    "time": "string",
    "timezone": "Asia/Tokyo",
    "utc_offset": "string"
  },
  "in_seconds": 0,
  "label": "string",
  "local": {
    "abbreviation": "JST",
    "date": "2026-10-06",
    "time": "06:30",
    "timezone": "Asia/Tokyo",
    "utc_offset": "+09:00",
    "wall_time_kind": "normal"
  },
  "notice": "string",
  "outcome_reason": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "reached_voicemail": false,
  "schedule_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "scheduled_at": "2026-10-05T21:30:00Z",
  "snooze_count": 0,
  "status": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/occurrences/{occurrence_id}' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/occurrences/{occurrence_id}/cancel #

Cancel one call

pending, dispatching or calling → cancelled (a call ringing now is hung up). 409 occurrence_terminal once it has finished.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
occurrence_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Responses

200 OK · application/json · OccurrenceDetailOut
{
  "attempt_count": 0,
  "attempts": [
    {
      "answered_at": "2026-10-05T21:30:00Z",
      "answered_by": "string",
      "created_at": "2026-10-05T21:30:00Z",
      "digits": "string",
      "due_at": "2026-10-05T21:30:00Z",
      "duration_seconds": 0,
      "ended_at": "2026-10-05T21:30:00Z",
      "error_code": "string",
      "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "kind": "string",
      "live": true,
      "n": 0,
      "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "requested_at": "2026-10-05T21:30:00Z",
      "ringing_at": "2026-10-05T21:30:00Z",
      "status": "string",
      "to_masked": "string"
    }
  ],
  "backup_alarm_at": "2026-10-05T21:30:00Z",
  "confirmed_at": "2026-10-05T21:30:00Z",
  "derivation_source": "string",
  "dispatched_at": "2026-10-05T21:30:00Z",
  "finished_at": "2026-10-05T21:30:00Z",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "in_home_timezone": {
    "date": "string",
    "time": "string",
    "timezone": "Asia/Tokyo",
    "utc_offset": "string"
  },
  "in_seconds": 0,
  "label": "string",
  "local": {
    "abbreviation": "JST",
    "date": "2026-10-06",
    "time": "06:30",
    "timezone": "Asia/Tokyo",
    "utc_offset": "+09:00",
    "wall_time_kind": "normal"
  },
  "notice": "string",
  "outcome_reason": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "reached_voicemail": false,
  "schedule_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "scheduled_at": "2026-10-05T21:30:00Z",
  "snooze_count": 0,
  "status": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/occurrences/{occurrence_id}/cancel' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7'

POST /api/v1/occurrences/{occurrence_id}/move #

Move a call to the device's time zone (travel)

04 §8 "Move": send the mismatch's suggested.timezone and suggested.local_date from GET /me/timezone-context. The suggestion is checked again; 400 validation_error (nothing moved) when it changed or is no longer a mismatch, 409 while the call rings or once it is no longer pending. Returns the moved schedule with its new next_occurrence.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
occurrence_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · TravelMoveIn

Field Type Description
local_date required string
timezone required string
{
  "local_date": "2026-10-07",
  "timezone": "Asia/Tokyo"
}

Responses

200 OK · application/json · ScheduleOut
{
  "backup_alarm": true,
  "created_at": "2026-10-05T21:30:00Z",
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "next_occurrence": {
    "backup_alarm_at": "2026-10-05T21:30:00Z",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "scheduled_at": "2026-10-05T21:30:00Z",
    "status": "string"
  },
  "paused_until": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "source": "string",
  "start_date": "string",
  "status": "string",
  "timezone_display": "Tokyo, Japan",
  "updated_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/occurrences/{occurrence_id}/move' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"local_date": "2026-10-07", "timezone": "Asia/Tokyo"}'

Phone numbers

GET /api/v1/contact-card.vcf #

Our numbers as a contact card

06 §5: a vCard with every regional number we call from, so the call shows a name. Public and cacheable (ETag, Cache-Control).

Authentication

None, this endpoint is public.

Responses

200 OK · text/vcard · string
"string"
304 Not modified
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/contact-card.vcf'

GET /api/v1/countries #

Countries we call

The destination countries a number can be added in, by name: calling code (+81), name and tier. Public and cacheable (ETag, Cache-Control). A number outside this list is refused with 400 country_not_supported.

Authentication

None, this endpoint is public.

Responses

200 OK · application/json · CountryPage
{
  "items": [
    {
      "calling_code": "+81",
      "country_code": "JP",
      "name": "Japan",
      "tier": "A"
    }
  ]
}
304 Not Modified
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/countries'

GET /api/v1/phone-numbers #

The account's numbers

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
cursor query string or null
limit query integer default 50

Responses

200 OK · application/json · PhoneNumberPage
{
  "items": [
    {
      "blocked": true,
      "blocked_reason": "string",
      "country_code": "string",
      "created_at": "2026-10-05T21:30:00Z",
      "e164": "string",
      "e164_masked": "string",
      "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "is_primary": true,
      "label": "string",
      "last_confirmed_at": "2026-10-05T21:30:00Z",
      "last_test_call_at": "2026-10-05T21:30:00Z",
      "type": "string",
      "verification_expires_at": "2026-10-05T21:30:00Z",
      "verified": true,
      "verified_at": "2026-10-05T21:30:00Z"
    }
  ],
  "next_cursor": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/phone-numbers' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/phone-numbers #

Add a number (and text it a code)

201 with the unverified number. A code is sent at once (sms, or a call for a landline); verification says whether it went out.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · PhoneNumberIn

Field Type Description
e164 required string
label string or null
{
  "e164": "+14155551212",
  "label": "Mobile"
}

Responses

201 Created · application/json · PhoneNumberCreatedOut
{
  "blocked": true,
  "blocked_reason": "string",
  "country_code": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "e164": "string",
  "e164_masked": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "is_primary": true,
  "label": "string",
  "last_confirmed_at": "2026-10-05T21:30:00Z",
  "last_test_call_at": "2026-10-05T21:30:00Z",
  "type": "string",
  "verification": {
    "channel": "string",
    "error": {
      "code": "string",
      "detail": "string"
    },
    "sent": true
  },
  "verification_expires_at": "2026-10-05T21:30:00Z",
  "verified": true,
  "verified_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/phone-numbers' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"e164": "+14155551212", "label": "Mobile"}'

PATCH /api/v1/phone-numbers/{phone_number_id} #

Rename or make primary

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
phone_number_id required path string

Request body application/json · required · PhoneNumberPatchIn

Field Type Description
is_primary boolean or null
label string or null
{
  "is_primary": true,
  "label": "string"
}

Responses

200 OK · application/json · PhoneNumberOut
{
  "blocked": true,
  "blocked_reason": "string",
  "country_code": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "e164": "string",
  "e164_masked": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "is_primary": true,
  "label": "string",
  "last_confirmed_at": "2026-10-05T21:30:00Z",
  "last_test_call_at": "2026-10-05T21:30:00Z",
  "type": "string",
  "verification_expires_at": "2026-10-05T21:30:00Z",
  "verified": true,
  "verified_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X PATCH 'https://staging.callmeawake.com/api/v1/phone-numbers/{phone_number_id}' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"is_primary": true, "label": "string"}'

DELETE /api/v1/phone-numbers/{phone_number_id} #

Delete a number

409 number_in_use while an enabled wake-up call rings it.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
phone_number_id required path string

Responses

204 No Content
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X DELETE 'https://staging.callmeawake.com/api/v1/phone-numbers/{phone_number_id}' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/phone-numbers/{phone_number_id}/test-call #

Call this number now (test call)

06 §3.4: one real call now, counted as one wake-up call of usage. 201 with the new attempt, or 200 with the one already live. Poll GET /calls/{id} for its status.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
phone_number_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Responses

200 OK · application/json · AttemptOut
{
  "answered_at": "2026-10-05T21:30:00Z",
  "answered_by": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "digits": "string",
  "due_at": "2026-10-05T21:30:00Z",
  "duration_seconds": 0,
  "ended_at": "2026-10-05T21:30:00Z",
  "error_code": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "live": true,
  "n": 0,
  "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "requested_at": "2026-10-05T21:30:00Z",
  "ringing_at": "2026-10-05T21:30:00Z",
  "status": "string",
  "to_masked": "string"
}
201 Created · application/json · AttemptOut
{
  "answered_at": "2026-10-05T21:30:00Z",
  "answered_by": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "digits": "string",
  "due_at": "2026-10-05T21:30:00Z",
  "duration_seconds": 0,
  "ended_at": "2026-10-05T21:30:00Z",
  "error_code": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "live": true,
  "n": 0,
  "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "requested_at": "2026-10-05T21:30:00Z",
  "ringing_at": "2026-10-05T21:30:00Z",
  "status": "string",
  "to_masked": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/phone-numbers/{phone_number_id}/test-call' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7'

POST /api/v1/phone-numbers/{phone_number_id}/verify/check #

Check the code; marks the number verified

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
phone_number_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · VerifyCheckIn

Field Type Description
code required string
{
  "code": "123456"
}

Responses

200 OK · application/json · PhoneNumberOut
{
  "blocked": true,
  "blocked_reason": "string",
  "country_code": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "e164": "string",
  "e164_masked": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "is_primary": true,
  "label": "string",
  "last_confirmed_at": "2026-10-05T21:30:00Z",
  "last_test_call_at": "2026-10-05T21:30:00Z",
  "type": "string",
  "verification_expires_at": "2026-10-05T21:30:00Z",
  "verified": true,
  "verified_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/phone-numbers/{phone_number_id}/verify/check' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"code": "123456"}'

POST /api/v1/phone-numbers/{phone_number_id}/verify/start #

Send a verification code

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
phone_number_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · VerifyStartIn

Field Type Description
channel string or null

sms or call.

{
  "channel": "sms"
}

Responses

200 OK · application/json · VerificationOut
{
  "channel": "string",
  "error": {
    "code": "string",
    "detail": "string"
  },
  "sent": true
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/phone-numbers/{phone_number_id}/verify/start' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"channel": "sms"}'

Schedules

GET /api/v1/schedules #

The account's wake-up calls

status: active, completed or disabled. Each embeds next_occurrence.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
cursor query string or null
limit query integer default 50
status query string or null

Responses

200 OK · application/json · SchedulePage
{
  "items": [
    {
      "backup_alarm": true,
      "created_at": "2026-10-05T21:30:00Z",
      "created_in_timezone": "America/Los_Angeles",
      "days_of_week": [
        "string"
      ],
      "enabled": true,
      "end_date": "string",
      "greeting_name": "string",
      "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "kind": "string",
      "label": "string",
      "local_date": "string",
      "local_time": "06:30",
      "timezone": "Asia/Tokyo",
      "message": "string",
      "next_occurrence": {
        "backup_alarm_at": "2026-10-05T21:30:00Z",
        "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
        "in_home_timezone": {},
        "in_seconds": 0,
        "local": {},
        "notice": "string",
        "scheduled_at": "2026-10-05T21:30:00Z",
        "status": "string"
      },
      "paused_until": "string",
      "phone_number": {
        "e164_masked": "+1 415 ••• 1212",
        "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
        "label": "string"
      },
      "retry_policy": {
        "max_snoozes": 0,
        "offsets_minutes": [],
        "ring_timeout_seconds": 0,
        "snooze_minutes": 0
      },
      "skip_dates": [
        "string"
      ],
      "sms_fallback": true,
      "source": "string",
      "start_date": "string",
      "status": "string",
      "timezone_display": "Tokyo, Japan",
      "updated_at": "2026-10-05T21:30:00Z"
    }
  ],
  "next_cursor": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/schedules' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/schedules #

Create a wake-up call

07 §3: once at a wall time, once in N minutes, or recurring.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · ScheduleIn

Field Type Description
backup_alarm boolean or null
created_in_timezone string or null
days_of_week array of string or null
enabled boolean or null
end_date string or null

Recurring: last local date (YYYY-MM-DD). null or an empty string clears it (no end date); on an Off or Done call that also turns it back on (D-060).

greeting_name string or null
in_minutes integer or null
kind required string
label string or null
local_date string or null
local_time string or null
message string or null
paused_until string or null
phone_number_id string or null
retry_policy object or null
skip_dates array of string or null
sms_fallback boolean or null
start_date string or null
timezone string or null
{
  "backup_alarm": true,
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "mon",
    "tue",
    "wed"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "in_minutes": 0,
  "kind": "once",
  "label": "string",
  "local_date": "2026-10-06",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "paused_until": "string",
  "phone_number_id": "string",
  "retry_policy": {},
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "start_date": "string"
}

Responses

201 Created · application/json · ScheduleOut
{
  "backup_alarm": true,
  "created_at": "2026-10-05T21:30:00Z",
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "next_occurrence": {
    "backup_alarm_at": "2026-10-05T21:30:00Z",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "scheduled_at": "2026-10-05T21:30:00Z",
    "status": "string"
  },
  "paused_until": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "source": "string",
  "start_date": "string",
  "status": "string",
  "timezone_display": "Tokyo, Japan",
  "updated_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/schedules' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"backup_alarm": true, "created_in_timezone": "America/Los_Angeles", "days_of_week": ["mon", "tue", "wed"], "enabled": true, "end_date": "string", "greeting_name": "string", "in_minutes": 0, "kind": "once", "label": "string", "local_date": "2026-10-06", "local_time": "06:30", "timezone": "Asia/Tokyo", "message": "string", "paused_until": "string", "phone_number_id": "string", "retry_policy": {}, "skip_dates": ["string"], "sms_fallback": true, "start_date": "string"}'

POST /api/v1/schedules/preview #

Preview a new wake-up call (dry run)

The body POST /schedules takes; nothing is saved. Returns the call it would ring first and the web form's preview line; errors are the ones saving would raise.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Request body application/json · required · ScheduleIn

Field Type Description
backup_alarm boolean or null
created_in_timezone string or null
days_of_week array of string or null
enabled boolean or null
end_date string or null

Recurring: last local date (YYYY-MM-DD). null or an empty string clears it (no end date); on an Off or Done call that also turns it back on (D-060).

greeting_name string or null
in_minutes integer or null
kind required string
label string or null
local_date string or null
local_time string or null
message string or null
paused_until string or null
phone_number_id string or null
retry_policy object or null
skip_dates array of string or null
sms_fallback boolean or null
start_date string or null
timezone string or null
{
  "backup_alarm": true,
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "mon",
    "tue",
    "wed"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "in_minutes": 0,
  "kind": "once",
  "label": "string",
  "local_date": "2026-10-06",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "paused_until": "string",
  "phone_number_id": "string",
  "retry_policy": {},
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "start_date": "string"
}

Responses

200 OK · application/json · SchedulePreviewOut
{
  "first": {
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "scheduled_at": "2026-10-05T21:30:00Z"
  },
  "notice": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "repeat": "string",
  "sentence": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/schedules/preview' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"backup_alarm": true, "created_in_timezone": "America/Los_Angeles", "days_of_week": ["mon", "tue", "wed"], "enabled": true, "end_date": "string", "greeting_name": "string", "in_minutes": 0, "kind": "once", "label": "string", "local_date": "2026-10-06", "local_time": "06:30", "timezone": "Asia/Tokyo", "message": "string", "paused_until": "string", "phone_number_id": "string", "retry_policy": {}, "skip_dates": ["string"], "sms_fallback": true, "start_date": "string"}'

GET /api/v1/schedules/{schedule_id} #

One wake-up call

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string

Responses

200 OK · application/json · ScheduleOut
{
  "backup_alarm": true,
  "created_at": "2026-10-05T21:30:00Z",
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "next_occurrence": {
    "backup_alarm_at": "2026-10-05T21:30:00Z",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "scheduled_at": "2026-10-05T21:30:00Z",
    "status": "string"
  },
  "paused_until": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "source": "string",
  "start_date": "string",
  "status": "string",
  "timezone_display": "Tokyo, Japan",
  "updated_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}' \
  -H 'Authorization: Bearer $API_KEY'

PATCH /api/v1/schedules/{schedule_id} #

Change a wake-up call

Any mutable field; returns the schedule with its new next_occurrence. 409 occurrence_in_progress while it is ringing.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string

Request body application/json · required · SchedulePatchIn

Field Type Description
backup_alarm boolean or null
days_of_week array of string or null
enabled boolean or null
end_date string or null
greeting_name string or null
kind string or null
label string or null
local_date string or null
local_time string or null
message string or null
paused_until string or null
phone_number_id string or null
retry_policy object or null
skip_dates array of string or null
sms_fallback boolean or null
start_date string or null
timezone string or null
{
  "backup_alarm": true,
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "string",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "paused_until": "string",
  "phone_number_id": "string",
  "retry_policy": {},
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "start_date": "string"
}

Responses

200 OK · application/json · ScheduleOut
{
  "backup_alarm": true,
  "created_at": "2026-10-05T21:30:00Z",
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "next_occurrence": {
    "backup_alarm_at": "2026-10-05T21:30:00Z",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "scheduled_at": "2026-10-05T21:30:00Z",
    "status": "string"
  },
  "paused_until": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "source": "string",
  "start_date": "string",
  "status": "string",
  "timezone_display": "Tokyo, Japan",
  "updated_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X PATCH 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"backup_alarm": true, "days_of_week": ["string"], "enabled": true, "end_date": "string", "greeting_name": "string", "kind": "string", "label": "string", "local_date": "string", "local_time": "string", "timezone": "Asia/Tokyo", "message": "string", "paused_until": "string", "phone_number_id": "string", "retry_policy": {}, "skip_dates": ["string"], "sms_fallback": true, "start_date": "string"}'

DELETE /api/v1/schedules/{schedule_id} #

Delete a wake-up call

Cancels its pending call. One that already rang is kept, disabled, as history. 409 occurrence_in_progress while it is ringing.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string

Responses

204 No Content
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X DELETE 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}' \
  -H 'Authorization: Bearer $API_KEY'

POST /api/v1/schedules/{schedule_id}/pause #

Pause until a local date (recurring)

until is a local date in the call's zone; 400 not_recurring for a one-off.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Request body application/json · required · PauseIn

Field Type Description
until required string

Local date in the call's zone.

{
  "until": "2026-10-10"
}

Responses

200 OK · application/json · ScheduleOut
{
  "backup_alarm": true,
  "created_at": "2026-10-05T21:30:00Z",
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "next_occurrence": {
    "backup_alarm_at": "2026-10-05T21:30:00Z",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "scheduled_at": "2026-10-05T21:30:00Z",
    "status": "string"
  },
  "paused_until": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "source": "string",
  "start_date": "string",
  "status": "string",
  "timezone_display": "Tokyo, Japan",
  "updated_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}/pause' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7' \
  -H 'Content-Type: application/json' \
  -d '{"until": "2026-10-10"}'

POST /api/v1/schedules/{schedule_id}/preview #

Preview a change to a wake-up call (dry run)

The body PATCH /schedules/{id} takes; nothing is saved. 409 occurrence_in_progress while it is ringing, as the edit would be.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string

Request body application/json · required · SchedulePatchIn

Field Type Description
backup_alarm boolean or null
days_of_week array of string or null
enabled boolean or null
end_date string or null
greeting_name string or null
kind string or null
label string or null
local_date string or null
local_time string or null
message string or null
paused_until string or null
phone_number_id string or null
retry_policy object or null
skip_dates array of string or null
sms_fallback boolean or null
start_date string or null
timezone string or null
{
  "backup_alarm": true,
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "string",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "paused_until": "string",
  "phone_number_id": "string",
  "retry_policy": {},
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "start_date": "string"
}

Responses

200 OK · application/json · SchedulePreviewOut
{
  "first": {
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "scheduled_at": "2026-10-05T21:30:00Z"
  },
  "notice": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "repeat": "string",
  "sentence": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}/preview' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"backup_alarm": true, "days_of_week": ["string"], "enabled": true, "end_date": "string", "greeting_name": "string", "kind": "string", "label": "string", "local_date": "string", "local_time": "string", "timezone": "Asia/Tokyo", "message": "string", "paused_until": "string", "phone_number_id": "string", "retry_policy": {}, "skip_dates": ["string"], "sms_fallback": true, "start_date": "string"}'

POST /api/v1/schedules/{schedule_id}/resume #

Clear the pause (recurring)

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Responses

200 OK · application/json · ScheduleOut
{
  "backup_alarm": true,
  "created_at": "2026-10-05T21:30:00Z",
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "next_occurrence": {
    "backup_alarm_at": "2026-10-05T21:30:00Z",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "scheduled_at": "2026-10-05T21:30:00Z",
    "status": "string"
  },
  "paused_until": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "source": "string",
  "start_date": "string",
  "status": "string",
  "timezone_display": "Tokyo, Japan",
  "updated_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}/resume' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7'

POST /api/v1/schedules/{schedule_id}/skip-next #

Skip the next call (recurring)

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Responses

200 OK · application/json · ScheduleOut
{
  "backup_alarm": true,
  "created_at": "2026-10-05T21:30:00Z",
  "created_in_timezone": "America/Los_Angeles",
  "days_of_week": [
    "string"
  ],
  "enabled": true,
  "end_date": "string",
  "greeting_name": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "label": "string",
  "local_date": "string",
  "local_time": "06:30",
  "timezone": "Asia/Tokyo",
  "message": "string",
  "next_occurrence": {
    "backup_alarm_at": "2026-10-05T21:30:00Z",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "in_home_timezone": {
      "date": "string",
      "time": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    },
    "in_seconds": 0,
    "local": {
      "abbreviation": "JST",
      "date": "2026-10-06",
      "time": "06:30",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00",
      "wall_time_kind": "normal"
    },
    "notice": "string",
    "scheduled_at": "2026-10-05T21:30:00Z",
    "status": "string"
  },
  "paused_until": "string",
  "phone_number": {
    "e164_masked": "+1 415 ••• 1212",
    "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
    "label": "string"
  },
  "retry_policy": {
    "max_snoozes": 0,
    "offsets_minutes": [
      0
    ],
    "ring_timeout_seconds": 0,
    "snooze_minutes": 0
  },
  "skip_dates": [
    "string"
  ],
  "sms_fallback": true,
  "source": "string",
  "start_date": "string",
  "status": "string",
  "timezone_display": "Tokyo, Japan",
  "updated_at": "2026-10-05T21:30:00Z"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}/skip-next' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7'

POST /api/v1/schedules/{schedule_id}/test-call #

Call this wake-up call's number now (test call)

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string
Idempotency-Key header string

Makes a retry safe for 24 h: the same key with the same request replays the first successful response; with a different request it is 409 idempotency_key_reused.

min length 1 max length 200

Responses

200 OK · application/json · AttemptOut
{
  "answered_at": "2026-10-05T21:30:00Z",
  "answered_by": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "digits": "string",
  "due_at": "2026-10-05T21:30:00Z",
  "duration_seconds": 0,
  "ended_at": "2026-10-05T21:30:00Z",
  "error_code": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "live": true,
  "n": 0,
  "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "requested_at": "2026-10-05T21:30:00Z",
  "ringing_at": "2026-10-05T21:30:00Z",
  "status": "string",
  "to_masked": "string"
}
201 Created · application/json · AttemptOut
{
  "answered_at": "2026-10-05T21:30:00Z",
  "answered_by": "string",
  "created_at": "2026-10-05T21:30:00Z",
  "digits": "string",
  "due_at": "2026-10-05T21:30:00Z",
  "duration_seconds": 0,
  "ended_at": "2026-10-05T21:30:00Z",
  "error_code": "string",
  "id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "kind": "string",
  "live": true,
  "n": 0,
  "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
  "requested_at": "2026-10-05T21:30:00Z",
  "ringing_at": "2026-10-05T21:30:00Z",
  "status": "string",
  "to_masked": "string"
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X POST 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}/test-call' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7'

GET /api/v1/schedules/{schedule_id}/upcoming #

The next calls, computed

The stored next call first, then computed ones (not stored). count 1-100.

Authentication

Any one of:

  • Authorization: Bearer <token> (an API key or an app session token)
  • X-Session-Token header (app session token)
  • sessionid cookie (web session, with the CSRF token)

Parameters

Name In Type Description
schedule_id required path string
count query integer default 7

Responses

200 OK · application/json · UpcomingPage
{
  "items": [
    {
      "in_home_timezone": {
        "date": "string",
        "time": "string",
        "timezone": "Asia/Tokyo",
        "utc_offset": "string"
      },
      "in_seconds": 0,
      "local": {
        "abbreviation": "JST",
        "date": "2026-10-06",
        "time": "06:30",
        "timezone": "Asia/Tokyo",
        "utc_offset": "+09:00",
        "wall_time_kind": "normal"
      },
      "notice": "string",
      "occurrence_id": "5b1d8f0e-3c52-4e0b-9d57-7f6b2f6c1a10",
      "scheduled_at": "2026-10-05T21:30:00Z"
    }
  ]
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/schedules/{schedule_id}/upcoming' \
  -H 'Authorization: Bearer $API_KEY'

Time

GET /api/v1/time #

What time it is, and where

04 §9. zones is a comma-separated list of IANA zones (at most 50); without it, UTC and the signed-in caller's home zone. Call this before creating or moving a call.

Authentication

None, this endpoint is public.

Parameters

Name In Type Description
zones query string or null

Responses

200 OK · application/json · TimeContextOut
{
  "now_utc": "string",
  "tzdata_version": "string",
  "zones": [
    {
      "abbreviation": "string",
      "display_name": "string",
      "is_dst": true,
      "next_transition": {
        "at": "string",
        "local_after": "string",
        "local_before": "string",
        "offset_after": "string"
      },
      "now_local": "string",
      "timezone": "Asia/Tokyo",
      "utc_offset": "string"
    }
  ]
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/time'

GET /api/v1/timezones #

Search time zones by city, country, airport or IANA name

04 §10. Ranked; each result carries the offset in force now (limit 1-50).

Authentication

None, this endpoint is public.

Parameters

Name In Type Description
limit query integer default 10
q query string default ""

Responses

200 OK · application/json · ZoneMatchPage
{
  "items": [
    {
      "abbreviation": "string",
      "country_code": "string",
      "kind": "string",
      "label": "Tokyo, Japan",
      "timezone": "Asia/Tokyo",
      "utc_offset": "+09:00"
    }
  ]
}
Error Error (RFC 9457 problem details) · application/problem+json · Problem

Problem details with a stable code. See Error codes.

Example

curl -X GET 'https://staging.callmeawake.com/api/v1/timezones'

Schemas

AccountDeletedOut object

Field Type Description
deleted_at required string (date-time)

ApiKeyCreatedOut object

Field Type Description
created_at required string (date-time)
id required string (uuid)
key required string

The full key. Shown once; store it now.

last_used_at required string (date-time) or null
name required string
prefix required string
scopes required array of string

ApiKeyIn object

Field Type Description
name required string
scopes array of string or null

read, write, export. Default read and write. export (opt-in, needs read) allows GET /me/export.

ApiKeyOut object

Field Type Description
created_at required string (date-time)
id required string (uuid)
last_used_at required string (date-time) or null
name required string
prefix required string
scopes required array of string

ApiKeyPage object

Field Type Description
items required array of ApiKeyOut
next_cursor required string or null

AppleAuthorizationIn object

Field Type Description
authorization_code required string

The authorizationCode of the Sign in with Apple credential the app just signed in with (single use, valid 5 minutes).

max length 1024

AttemptOut object

One phone call: an attempt of a wake-up call, or a standalone test call (occurrence_id null). Instants are UTC.

Field Type Description
answered_at required string (date-time) or null
answered_by required string or null
created_at required string (date-time)
digits required string or null
due_at required string (date-time)
duration_seconds required integer or null
ended_at required string (date-time) or null
error_code required string
id required string (uuid)
kind required string
live required boolean

Still in progress: poll GET /calls/{id} every 2 s.

n required integer
occurrence_id required string (uuid) or null
requested_at required string (date-time) or null
ringing_at required string (date-time) or null
status required string
to_masked required string

AttemptPage object

Field Type Description
items required array of AttemptOut
next_cursor required string or null

BillingPlanOut object

Field Type Description
code required string
currency required string
included_calls_per_period required integer
interval required string

month, year, or none (trial, packs)

name required string
price_cents required integer

Price in the currency's minor unit

purchasable required boolean

POST /billing/checkout sells this plan now (10 §3)

tier_b_multiplier required integer

BillingPlanPage object

Field Type Description
items required array of BillingPlanOut
next_cursor string or null

BillingRedirectOut object

Field Type Description
url required string

Send the browser here (a Stripe-hosted page)

CheckoutIn object

Field Type Description
plan required string

ContactCopyOut object

Field Type Description
body required string
title required string

CountryOut object

Field Type Description
calling_code required string
country_code required string

ISO 3166-1 alpha-2.

name required string
tier required string

Pricing tier (10 §1); never blocked.

CountryPage object

Field Type Description
items required array of CountryOut

DeleteMeIn object

Field Type Description
code string or null

The 6-digit code from POST /me/deletion-code.

confirm string or null

DeletionCodeOut object

Field Type Description
sent_to required string
valid_minutes required integer

DemoCallIn object

Field Type Description
code string or null
e164 string or null

DemoCallOut object

The demo call (a standalone attempt of kind demo). state is the widget's word for it: calling, ringing, answered, confirmed, stopped (pressed 9), unconfirmed, missed, not_placed or failed.

Field Type Description
created_at required string (date-time)
id required string (uuid)
live required boolean
state required string
status required string
to_masked required string

DemoStartIn object

Field Type Description
consent boolean or null

Required, true: the person agrees that this number receives one automated call made with an artificial or prerecorded voice (and a text with a code first). Consent is not a condition of any purchase.

e164 string or null

DemoStartOut object

A code is on its way by text. Send it to POST /demo/call within code_valid_seconds.

Field Type Description
channel required string always "sms"
code_valid_seconds required integer
e164_masked required string
status required string always "code_sent"

DeviceIn object

Field Type Description
alarm_capability string or null
app_version string or null
installation_id required string (uuid)
model string or null
os_version string or null
platform required string
push_token string or null
timezone string or null

DeviceOut object

Field Type Description
alarm_capability required string
app_version required string
created_at required string (date-time)
id required string (uuid)
installation_id required string (uuid)
last_seen_at required string (date-time)
model required string
os_version required string
platform required string
push_token_set required boolean
timezone required string or null
timezone_reported_at required string (date-time) or null

DevicePatchIn object

Field Type Description
alarm_capability string or null
app_version string or null
model string or null
os_version string or null
push_token string or null
timezone string or null

DeviceTimezoneIn object

Field Type Description
reported_at string (date-time) or null

When the device saw the zone (UTC).

timezone required string

HomeTimeOut object

The same instant on the account's home clock.

Field Type Description
date required string
time required string
timezone required string
utc_offset required string

LocalTimeOut object

A wall time in its zone. time is when the phone rings there (24-hour HH:MM): a wall time that a spring-forward skips (02:30 America/Los_Angeles on 2026-03-08) rings at 03:00 America/Los_Angeles with wall_time_kind nonexistent_shifted (04 §5).

Field Type Description
abbreviation required string
date required string
time required string
timezone required string
utc_offset required string
wall_time_kind required string one of "normal", "ambiguous_first", "nonexistent_shifted"

MeBillingOut object

Billing hints for the app (D-057, M9-T01).

Field Type Description
web_checkout_link required boolean

The app may offer subscribing on the web (POST /billing/web-checkout) on the US storefront: the server's switch is on, payments are set up and the account has no plan. The storefront itself is the app's to check.

web_checkout_plans required array of WebCheckoutPlanOut

What the web checkout sells; empty unless offered.

MeOut object

Field Type Description
billing MeBillingOut or null
calls_revoked_at required string (date-time) or null
default_backup_alarm required boolean
default_retry_policy required RetryPolicyOut or null
digest_opt_in required boolean
display_name required string
email required string
greeting_name required string or null
home_timezone required string or null
id required string (uuid)
locale required string
marketing_opt_in required boolean
onboarding required OnboardingOut
onboarding_state required object
plan required PlanOut
time_format required string
voice required string

MePatchIn object

Field Type Description
default_backup_alarm boolean or null
default_retry_policy object or null
digest_opt_in boolean or null
display_name string or null
greeting_name string or null
home_timezone string or null
locale string or null
marketing_opt_in boolean or null
time_format string or null
voice string or null

MismatchOut object

Field Type Description
device_utc_offset required string
device_zone required string
in_device_zone required string
in_device_zone_date required string
occurrence_id required string
schedule_id required string
scheduled_at required string
scheduled_local required string
scheduled_local_date required string
scheduled_utc_offset required string
scheduled_zone required string
suggested required SuggestionOut or null

NextOccurrenceOut object

Field Type Description
backup_alarm_at required string (date-time) or null

When the app's backup alarm rings (03 §3), UTC; moves on snooze.

id required string (uuid)
in_home_timezone HomeTimeOut or null

The instant on the home clock. Omitted when the home zone is the call's own zone (or no home zone is set).

in_seconds required integer

Seconds from now (negative once past).

local required LocalTimeOut
notice required string or null

04 §5 sentence when the wall time falls in a clock change.

scheduled_at required string (date-time)

UTC instant the call rings (Z).

status required string

OccurrenceDetailOut object

Field Type Description
attempt_count required integer
attempts required array of AttemptOut
backup_alarm_at required string (date-time) or null
confirmed_at required string (date-time) or null
derivation_source required string
dispatched_at required string (date-time) or null
finished_at required string (date-time) or null
id required string (uuid)
in_home_timezone HomeTimeOut or null

The instant on the home clock. Omitted when the home zone is the call's own zone (or no home zone is set).

in_seconds required integer

Seconds from now (negative once past).

label required string
local required LocalTimeOut
notice required string or null

04 §5 sentence when the wall time falls in a clock change.

outcome_reason required string
phone_number required PhoneRefOut or null
reached_voicemail boolean

Some attempt reached voicemail (an answering-machine verdict). The web's Voicemail chip is this on an unconfirmed call. Absent from servers before M10-T04.

default false
schedule_id required string (uuid)
scheduled_at required string (date-time)

UTC instant the call rings (Z).

snooze_count required integer
status required string

OccurrenceOut object

Field Type Description
attempt_count required integer
backup_alarm_at required string (date-time) or null
confirmed_at required string (date-time) or null
derivation_source required string
dispatched_at required string (date-time) or null
finished_at required string (date-time) or null
id required string (uuid)
in_home_timezone HomeTimeOut or null

The instant on the home clock. Omitted when the home zone is the call's own zone (or no home zone is set).

in_seconds required integer

Seconds from now (negative once past).

label required string
local required LocalTimeOut
notice required string or null

04 §5 sentence when the wall time falls in a clock change.

outcome_reason required string
phone_number required PhoneRefOut or null
reached_voicemail boolean

Some attempt reached voicemail (an answering-machine verdict). The web's Voicemail chip is this on an unconfirmed call. Absent from servers before M10-T04.

default false
schedule_id required string (uuid)
scheduled_at required string (date-time)

UTC instant the call rings (Z).

snooze_count required integer
status required string

OccurrencePage object

Field Type Description
items required array of OccurrenceOut
next_cursor required string or null

OnboardingCopyOut object

Field Type Description
contact required ContactCopyOut
ring required RingCopyOut
setup_test_call required TestCallCopyOut

Settings → Setup.

stale_notice required string

Shown while readiness.stale (14 §4).

test_call required TestCallCopyOut

Onboarding step 7.

OnboardingIn object

Field Type Description
done boolean default true
step required string

OnboardingOut object

Where the account is in onboarding (14 §1), shared with the web stepper.

Field Type Description
finished required boolean

A schedule exists, or every step is settled.

next required string

The first step neither done nor skipped, or done.

readiness required ReadinessOut
steps required array of OnboardingStepOut
texts required OnboardingCopyOut

14 §1-4 copy shared with the web (accounts.onboarding_copy).

OnboardingSkipIn object

Field Type Description
step required string

contact, ring, test-call, …

OnboardingStepOut object

One step of the 14 §1 stepper. Step 1 (sign in) is the session itself and step 6 (permissions) is the app's own, so neither is listed; done is the last step.

Field Type Description
done required boolean
number required integer

14 §1's step number.

skip_warning required string or null

Shown before skipping (14 §1).

skippable required boolean
skipped required boolean
slug required string
title required string

PauseIn object

Field Type Description
until required string

Local date in the call's zone.

PhoneNumberCreatedOut object

Field Type Description
blocked required boolean

No calls or texts go to it (STOP, press 9, …).

blocked_reason required string or null
country_code required string
created_at required string (date-time)
e164 required string
e164_masked required string
id required string (uuid)
is_primary required boolean
label required string
last_confirmed_at required string (date-time) or null
last_test_call_at required string (date-time) or null
type required string
verification required VerificationOut
verification_expires_at required string (date-time) or null
verified required boolean

Verified and not expired now.

verified_at required string (date-time) or null

PhoneNumberIn object

Field Type Description
e164 required string
label string or null

PhoneNumberOut object

Field Type Description
blocked required boolean

No calls or texts go to it (STOP, press 9, …).

blocked_reason required string or null
country_code required string
created_at required string (date-time)
e164 required string
e164_masked required string
id required string (uuid)
is_primary required boolean
label required string
last_confirmed_at required string (date-time) or null
last_test_call_at required string (date-time) or null
type required string
verification_expires_at required string (date-time) or null
verified required boolean

Verified and not expired now.

verified_at required string (date-time) or null

PhoneNumberPage object

Field Type Description
items required array of PhoneNumberOut
next_cursor required string or null

PhoneNumberPatchIn object

Field Type Description
is_primary boolean or null
label string or null

PhoneRefOut object

Field Type Description
e164_masked required string
id required string (uuid)
label required string

PlanOut object

Field Type Description
code required string or null
entitled required boolean

A wake-up call to a Tier A number would be placed now (can_place_call: subscription calls, free trial or pack credits). False means the account needs a plan.

name required string or null
source required string or null

Where the live subscription is billed: stripe (the web), apple, google or manual; null with no subscription (the free trial, no plan). The mobile app offers its paywall only when entitled is false and no subscription is billed elsewhere (10 §4).

status required string

Problem object

RFC 9457 problem details (07 §1, §3). code is the stable machine code; detail is a human sentence; field names the input at fault when known; errors lists every input error of a validation_error.

Field Type Description
code required string one of "already_subscribed", "api_key_revoked", "calls_revoked", "confirmation_required", "country_not_supported", "daily_cap_reached", "date_too_far", "days_of_week_empty", "demo_not_available", "demo_rate_limited", "idempotency_key_reused", "in_minutes_out_of_range", "insufficient_scope", "internal_error", "invalid_phone_number", "invalid_retry_policy", "invalid_time", "invalid_timezone", "local_date_required", "message_disallowed_content", "method_not_allowed", "no_entitlement", "not_found", "not_recurring", "number_blocked", "number_in_use", "occurrence_in_progress", "occurrence_terminal", "phone_number_not_owned", "phone_number_unverified", "provider_unavailable", "rate_limited", "session_expired", "time_in_past", "timezone_not_allowed", "unauthenticated", "validation_error", "verification_code_invalid", "verification_locked", "web_checkout_disabled"
detail required string
errors array of object
field string
instance string
status required integer
title required string
type required string (uri)

ProblemSummary object

Field Type Description
code required string
detail required string

ReadinessOut object

"Will it ring?" (06 §6, 14 §4), read from the database.

Field Type Description
contact_saved required boolean
dnd_acknowledged required boolean
last_success_at required string (date-time) or null

The newest confirmed call (test or real) to any of the numbers, UTC.

last_test_at required string (date-time) or null

When the newest placed standalone test call was asked for (its created_at, UTC); null when there is none.

last_test_status required string or null
phone_expired required boolean

Numbers were verified, but none is any more.

phone_verified required boolean

A verified, unexpired number exists.

stale required boolean

14 §4 amber: the last good call is over 60 days old.

test_call_done required boolean

ResumeCallsIn object

Field Type Description
consent boolean or null

RetryPolicyOut object

Field Type Description
max_snoozes required integer
offsets_minutes required array of integer
ring_timeout_seconds required integer
snooze_minutes required integer

RevenueCatSyncIn object

Field Type Description
app_user_id string or null

The app's RevenueCat app user id: the account's own id (id of GET /me). The server always asks RevenueCat for the signed-in account and refuses (400) any other value.

RevenueCatSyncOut object

Field Type Description
changed required boolean

The sync changed the account's plan or subscription.

plan required PlanOut

The account's plan after the sync, as in GET /me.

RingCopyOut object

14 §2. Bold text is Markdown **...**.

Field Type Description
button required string
steps_android required array of string
steps_ios required array of string
title required string
why required string
why_title required string

ScheduleIn object

07 §3: one-off at a wall time (kind=once, local_date, local_time), one-off in N minutes (kind=once, in_minutes) or recurring (kind=recurring, local_time, days_of_week). timezone is always required; phone_number_id defaults to the primary number.

Field Type Description
backup_alarm boolean or null
created_in_timezone string or null
days_of_week array of string or null
enabled boolean or null
end_date string or null

Recurring: last local date (YYYY-MM-DD). null or an empty string clears it (no end date); on an Off or Done call that also turns it back on (D-060).

greeting_name string or null
in_minutes integer or null
kind required string
label string or null
local_date string or null
local_time string or null
message string or null
paused_until string or null
phone_number_id string or null
retry_policy object or null
skip_dates array of string or null
sms_fallback boolean or null
start_date string or null
timezone string or null

ScheduleOut object

Field Type Description
backup_alarm required boolean
created_at required string (date-time)
created_in_timezone required string or null
days_of_week required array of string or null
enabled required boolean
end_date required string or null
greeting_name required string or null
id required string (uuid)
kind required string
label required string
local_date required string or null
local_time required string
message required string or null
next_occurrence required NextOccurrenceOut or null
paused_until required string or null
phone_number required PhoneRefOut or null
retry_policy required RetryPolicyOut

The policy in force: the call's own, the account's, or the default.

skip_dates required array of string
sms_fallback required boolean
source required string
start_date required string or null
status required string
timezone required string
timezone_display required string
updated_at required string (date-time)

SchedulePage object

Field Type Description
items required array of ScheduleOut
next_cursor required string or null

SchedulePatchIn object

Any mutable field (07 §2.3 PATCH); only the fields sent change.

Field Type Description
backup_alarm boolean or null
days_of_week array of string or null
enabled boolean or null
end_date string or null
greeting_name string or null
kind string or null
label string or null
local_date string or null
local_time string or null
message string or null
paused_until string or null
phone_number_id string or null
retry_policy object or null
skip_dates array of string or null
sms_fallback boolean or null
start_date string or null
timezone string or null

SchedulePreviewOut object

The new/edit form's live preview (11 §2; M7-T02): what saving this input would book, with nothing saved. sentence, repeat and notice are the web form's preview line word for word, in the account's 12/24-hour preference.

Field Type Description
first required UpcomingOut or null

The call it would ring first; null when it has none (disabled, no date left). occurrence_id is set only when an edit keeps the stored next call.

notice required string or null

04 §5 sentence when it falls in a clock change.

phone_number required PhoneRefOut or null

The number that call rings.

repeat required string or null

Recurring calls: "Then <days> at <time> <zone> time."

sentence required string

"We'll call <number> at <time> <zone> time on <day> (<time> <weekday> in <home zone>). That's in <countdown>." The home-zone part only when its clock differs; This wake-up call has no upcoming date. when first is null.

SuggestionOut object

Field Type Description
local_date required string
local_time required string
scheduled_at required string
timezone required string
utc_offset required string
wall_time_kind required string

TestCallCopyOut object

The paragraph above "Call me now" and the 14 §3 hint for each outcome that needs one.

Field Type Description
answered_unconfirmed required string
intro required string
no_answer required string
voicemail required string

TimeContextOut object

Field Type Description
now_utc required string
tzdata_version required string
zones required array of ZoneNowOut

TimezoneContextOut object

Field Type Description
device_id required string or null
device_timezone required string or null
device_timezone_reported_at required string or null
home_timezone required string or null
mismatches required array of MismatchOut

TransitionOut object

Field Type Description
at required string
local_after required string
local_before required string
offset_after required string

TravelMoveIn object

04 §8 "Move": the mismatch's suggested.timezone and suggested.local_date as GET /me/timezone-context showed them.

Field Type Description
local_date required string
timezone required string

TrialOut object

10 §5: while the free trial runs.

Field Type Description
calls_left required integer
ends_at required string (date-time)

UpcomingOut object

One upcoming firing (07 §2.3 upcoming): the stored next occurrence first (occurrence_id set), then computed ones (occurrence_id null).

Field Type Description
in_home_timezone HomeTimeOut or null

The instant on the home clock. Omitted when the home zone is the call's own zone (or no home zone is set).

in_seconds required integer

Seconds from now (negative once past).

local required LocalTimeOut
notice required string or null

04 §5 sentence when the wall time falls in a clock change.

occurrence_id required string (uuid) or null
scheduled_at required string (date-time)

UTC instant the call rings (Z).

UpcomingPage object

Field Type Description
items required array of UpcomingOut

UsageOut object

Field Type Description
calls_included required integer or null
calls_used required integer
credits_remaining required integer
near_limit required boolean

10 §5: 80% or more of the period's calls are used

period_end required string (date-time) or null
period_start required string (date-time) or null
plan required PlanOut
trial required TrialOut or null

10 §5: calls left and the end of the free trial while it runs; null otherwise

trial_calls_included required integer
trial_calls_used required integer
trial_ends_at required string (date-time) or null
trial_started_at required string (date-time) or null

VerificationOut object

Whether a code went out. error says why not (the 07 §3 code and a sentence).

Field Type Description
channel required string or null
error required ProblemSummary or null
sent required boolean

VerifyCheckIn object

Field Type Description
code required string

VerifyStartIn object

Field Type Description
channel string or null

sms or call.

WebCheckoutIn object

Field Type Description
plan required string

traveler_monthly or traveler_yearly

WebCheckoutOut object

Field Type Description
expires_at required string (date-time)

UTC; 10 minutes after it was made

url required string

Open in Safari (not an in-app web view). One use: it signs that browser into this account and continues to Stripe Checkout. A secret: never log or share it.

WebCheckoutPlanOut object

A plan the web checkout sells (D-057), for the app's "Subscribe on the web" button.

Field Type Description
code required string
currency required string
display_price required string
interval required string

month or year

name required string
price_cents required integer

Price in the currency's minor unit

ZoneMatchOut object

Field Type Description
abbreviation required string
country_code required string
kind required string
label required string
timezone required string
utc_offset required string

ZoneMatchPage object

Field Type Description
items required array of ZoneMatchOut

ZoneNowOut object

Field Type Description
abbreviation required string
display_name required string
is_dst required boolean
next_transition required TransitionOut or null
now_local required string
timezone required string
utc_offset required string