Docs

One set of API keys. One bill. Familiar conventions across every service. Pick a service below to get started, explore its API reference, or sign in to try a request right here.

Services

4 available
  • Job monitorsAlerts you when a scheduled job misses its check-in, runs too long, or fails. $0.50 per monitor per month.
    /job_monitors
  • Feature flagsControl feature releases and configuration with user targeting, gradual rollouts, and experiments. $0.03 per 1,000 remote evaluations.
    /feature_flags
  • Phone numbersFinds, buys, and releases US phone numbers for texting. $1.60 per number per month.
    /phone_numbers
  • WebhooksSends signed webhooks to customer endpoints with retries and delivery logs, and verifies incoming ones. $1.00 per 100K messages + $5.00 per 100K deliveries.
    /webhooks

Motor platform

3 available
  • Client tokensIssue scoped tokens for browsers and mobile apps.
  • EventsSubscribe to events generated by Motor.
  • UsageView daily charges by service, meter, and key.

Authentication

Send a secret API key in the Authorization header of each request. Create keys on the API keys page. Choose which APIs each key can access and set a monthly spending limit. Existing job monitors keep running and accruing charges after the key reaches its limit.

curl https://api.motor.dev/key \
  -H "Authorization: Bearer motor_sk_..."

Keep secret keys on your server. Some endpoints authenticate with a different secret, such as a job monitor's ping URL. Each endpoint's reference explains how to authenticate.

Errors

Each error response includes an HTTP status and a JSON body with a code for your application and a message that explains what went wrong. Validation errors name the field to fix.

{
  "error": {
    "code": "invalid_field",
    "message": "`grace_seconds` must be from 60 to 2678400."
  }
}
StatusCodeWhen
400invalid_jsonThe body isn't a JSON object.
401unauthorizedThe key is missing or incorrect.
402limit_reachedThe key has reached its monthly spending limit.
403forbiddenThe key can't use this API.
404not_foundThe resource wasn't found in your team.
409slug_takenA resource in your team already uses this slug.
422invalid_fieldA field is invalid. The message names it.
429rate_limitedThe request exceeded a rate limit.

Pagination

List endpoints return a page of results in data and a next_cursor. Pass the cursor as ?cursor= to read the next page. next_cursor is null on the last page. ?limit= sets the page size: 50 by default, up to 200.

{
  "data": [ ... ],
  "next_cursor": "p1.eyJ2Ijo..."
}

IDs and times

Each resource has a stable ID with a prefix that identifies its type, such as jmm_4ZpQ7bLxN2c for a job monitor. Timestamps use RFC 3339 format in UTC, with second precision, such as 2026-10-05T07:00:00Z.