API Documentation

Integrate UIPing into your workflow. All endpoints return JSON. Authenticated endpoints require a Bearer token in the Authorization header.

Authentication

Obtain an access token via /api/auth/login, then include it in requests:

Authorization: Bearer <access_token>

Access tokens expire after 30 minutes. Use the refresh endpoint to get a new one.

Base URL

https://uiping.com

Endpoints

POST/api/auth/register

Create a new account. Requires email verification before login.

Request Body
{ "email": "string", "password": "string", "full_name": "string" }
Response
{ "id": "uuid", "email": "string" }
POST/api/auth/login

Sign in and receive access + refresh tokens.

Request Body
{ "email": "string", "password": "string" }
Response
{ "access_token": "string", "refresh_token": "string", "token_type": "bearer" }
POST/api/auth/refresh

Exchange a valid refresh token for a new access token.

Request Body
{ "refresh_token": "string" }
Response
{ "access_token": "string", "token_type": "bearer" }
GET/api/auth/meAuth

Get the authenticated user profile.

Response
{ "id": "uuid", "email": "string", "full_name": "string", ... }
GET/api/monitorsAuth

List all monitors for the authenticated user.

Response
[{ "id": "uuid", "name": "string", "url": "string", "is_active": true, ... }]
POST/api/monitorsAuth

Create a new monitor. URL must be from ui.com, www.ui.com, or store.ui.com.

Request Body
{ "name": "string", "url": "string", "check_type": "html|visual|both" }
Response
{ "id": "uuid", "name": "string", "url": "string", ... }
GET/api/monitors/:idAuth

Get a specific monitor by ID.

Response
{ "id": "uuid", "name": "string", "url": "string", "last_check_at": "datetime", ... }
PUT/api/monitors/:idAuth

Update a monitor (name, check type, CSS selector, etc.).

Request Body
{ "name": "string", "check_type": "string", ... }
DELETE/api/monitors/:idAuth

Delete a monitor and all its data.

PUT/api/monitors/:id/pauseAuth

Toggle pause/resume on a monitor.

POST/api/monitors/:id/checkAuth

Trigger an immediate check for a monitor.

Response
{ "status": "check_queued" }
GET/api/changesAuth

List detected changes across all your monitors.

Response
[{ "id": "uuid", "change_type": "content|visual", "diff_summary": "string", ... }]
GET/api/changes/:idAuth

Get full details for a specific change, including diff.

GET/api/billing/subscriptionAuth

Get your current subscription details.

Response
{ "tier": "string", "status": "string", "max_monitors": 5, ... }
GET/api/public/drops

Recent product changes detected across all monitors (anonymized). No auth required.

Response
{ "drops": [{ "product_name": "string", "summary": "string", "detected_at": "datetime" }] }
GET/api/health

Service health check.

Response
{ "status": "healthy", "checks": { "api": "ok", "database": "ok", "redis": "ok" } }

Rate Limits

API requests are rate-limited per IP. If you receive a 429 response, wait a moment before retrying. Monitor check frequency is determined by your subscription tier.

We use privacy-friendly analytics to improve UIPing. No cookies, no cross-site tracking. Privacy Policy