API Documentation
OnChange REST API Programmatic access to your monitors, changes, and notifications. Build dashboards, automate workflows, and integrate OnChange into your toolchain.
Authentication External integrations should pass an API key in theX-API-Keyheader. Signed Bearer tokens are used by the web app. Generate or rotate your API key in dashboard settings.
Base URL All API endpoints use the base URLhttps://onchange.app/apiand return JSON responses. Rate limited to 120 requests per minute per user.
Pagination List endpoints support page-based pagination usingpageandper_pagequery parameters. Default is 20; monitor lists allow up to 500.
curl https://onchange.app/api/monitors \
-H "X-API-Key: oc_live_abc123..." \
-H "Content-Type: application/json" Interactive API Explorer Try any endpoint live. Enter your API key and send requests directly from this page.
Monitors
GET /monitors POST /monitors GET /monitors/:id PATCH /monitors/:id DELETE /monitors/:id POST /monitors/:id/check GET /monitors/:id/uptime PUT /monitors/:id/regions POST /monitors/:id/badge
Changes
GET /changes GET /changes/:id
Timeline & Values
GET /monitors/:id/timeline GET /monitors/:id/tracked-values
Crawl
POST /crawl GET /crawl/:id POST /crawl/:id/create-monitors
Alert Rules
GET /monitors/:id/rules POST /monitors/:id/rules PATCH /monitors/:id/rules/:ruleId
Accessibility
GET /a11y-scans POST /monitors/:id/a11y-scan GET /monitors/:id/a11y-scans GET /a11y-scans/:id/report POST /a11y-scans/:id/attest
Reports
GET /reports POST /reports POST /reports/:id/generate
Status Pages
GET /status-pages POST /status-pages PATCH /status-pages/:id GET /status-pages/public/:slug
Export
GET /export/changes GET /export/tracked-values
User
GET /users/me POST /users/me/api-key
Monitors GET /monitorsList all monitors with pagination and status filtering
POST /monitorsCreate a new monitor
GET /monitors/:idGet monitor details
PATCH /monitors/:idUpdate monitor settings
DELETE /monitors/:idDelete a monitor
POST /monitors/:id/checkTrigger an immediate check
GET /monitors/:id/uptimeGet uptime stats (24h, 7d, 30d) and response time history
PUT /monitors/:id/regionsReplace the regions used for multi-region checks
POST /monitors/:id/badgeEnable a public status badge for a monitor
Changes GET /changesList detected changes across all monitors
GET /changes/:idGet change details with diff
Timeline & Values GET /monitors/:id/timelineGet change history for a monitor with screenshots
GET /monitors/:id/tracked-valuesGet captured values for value/price tracking
Crawl POST /crawlStart crawling a website to discover pages
GET /crawl/:idGet crawl job status and discovered URLs
POST /crawl/:id/create-monitorsCreate monitors from selected crawl results
Alert Rules GET /monitors/:id/rulesList alert rules for a monitor
POST /monitors/:id/rulesCreate an alert rule
PATCH /monitors/:id/rules/:ruleIdUpdate an alert rule
Accessibility GET /a11y-scansList accessibility scans across all monitors
POST /monitors/:id/a11y-scanTrigger an on-demand axe accessibility scan
GET /monitors/:id/a11y-scansList scans for a monitor
GET /a11y-scans/:id/reportGet scan report data with baseline comparison
POST /a11y-scans/:id/attestMark a completed scan as the attested baseline
Reports GET /reportsList all reports
POST /reportsCreate a new report
POST /reports/:id/generateGenerate a report immediately
Status Pages GET /status-pagesList status pages
POST /status-pagesCreate a public status page
PATCH /status-pages/:idUpdate a status page
GET /status-pages/public/:slugRead a public status page by slug
Export GET /export/changesExport recent changes as JSON or CSV using ?format=csv
GET /export/tracked-valuesExport tracked values as JSON or CSV using ?format=csv
User GET /users/meGet current user profile, plan, and usage
POST /users/me/api-keyRegenerate API key
Error codes Code Meaning 200 Success 201 Created 400 Bad request - invalid parameters 401 Unauthorized - invalid or missing API key 403 Forbidden - insufficient permissions 404 Not found 429 Rate limited - too many requests 500 Internal server error
Ready to build? Create a free account to get your API key and start building.