DOCS

REST API reference

Complete endpoint inventory, authentication methods, request/response shapes, and versioning rules.

Base URL

All endpoints are under:

https://api.example.com/api/v1/

Versioning

  • Current version: v1 (URL-prefixed /api/v1/)
  • Non-breaking additions (new fields, new endpoints) ship without a version bump.
  • Breaking changes require a v2 prefix; a 90-day deprecation window applies.

Authentication

MethodUsed byHow to pass
Session cookieWeb platform and admin UIxinex_session HttpOnly Secure cookie (set by login response)
Bearer API tokenScripts, CI, integrationsAuthorization: Bearer xinex_<64-hex>
Bearer JWTMobile app, server-to-serverAuthorization: Bearer <jwt>
Prober tokenProber agentAuthorization: Bearer <prober_token>

Public endpoints (/api/v1/public/*, /health) require no authentication.

Common request headers

HeaderWhen to send
Authorization: Bearer <token>All authenticated requests
Content-Type: application/jsonPOST / PUT with a body
Idempotency-Key: <uuid>Optional; POST / PUT; safe to retry on network failure
If-None-Match: <etag>GET; server returns 304 if resource unchanged

Common response headers

HeaderMeaning
X-Request-IdUnique request identifier for tracing
X-RateLimit-LimitAllowed requests per window
X-RateLimit-RemainingRemaining requests in current window
X-RateLimit-ResetUnix timestamp when the window resets
ETagHash for conditional GET
Cache-Control: no-storePresent on session-sensitive responses

Response shapes

List response

Every list endpoint returns a paginated envelope. A bare array is never returned.

{
  "items": [...],
  "total": 142,
  "page": 1,
  "per_page": 25,
  "total_pages": 6
}

Default: page=1, per_page=25. Maximum per_page: 100.

Detail response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "tenant_id": "...",
  "created_at": "2026-05-01T12:00:00Z",
  "updated_at": "2026-05-13T08:22:15Z"
}

Create (201) / Update (200) response

Returns the complete object. Not just {"id": "..."}.

Delete response

204 No Content, empty body.

Error response

{
  "error": "Maximum 3 monitors allowed on free tier",
  "code": "TIER_LIMIT_EXCEEDED",
  "details": { "current_count": 3, "tier_limit": 3, "tier": "free" }
}

See API errors reference for the full code catalog.

Endpoint groups

GroupPurposeMobile
POST /api/v1/auth/loginPassword loginYes
POST /api/v1/auth/registerCreate accountYes
POST /api/v1/auth/logoutInvalidate sessionYes
POST /api/v1/auth/password-resetInitiate password resetYes
POST /api/v1/auth/password-reset/confirmComplete password resetYes
POST /api/v1/auth/verify-emailVerify email addressYes
GET /api/v1/auth/oauth/providersList enabled OAuth providersYes
GET /api/v1/auth/oauth/{provider}Start OAuth flow (google, github, microsoft, apple)Yes
GET /api/v1/auth/oauth/{provider}/callbackOAuth callback handlerYes
POST /api/v1/auth/oauth/apple/nativeApple native sign-in with id_tokenYes
GET /api/v1/oauth/authorizePKCE authorization endpointYes
POST /api/v1/oauth/tokenToken + refresh endpointYes
GET /api/v1/sso/loginSAML SP-initiated SSONo
GET /api/v1/meCurrent authenticated userYes
PUT /api/v1/meUpdate profileYes
GET /api/v1/sessionsList active sessionsYes
DELETE /api/v1/sessions/{id}Revoke a sessionYes
GET /api/v1/monitorsList monitors (paginated)Yes
POST /api/v1/monitorsCreate monitorYes
GET /api/v1/monitors/{id}Get monitorYes
PUT /api/v1/monitors/{id}Update monitorYes
DELETE /api/v1/monitors/{id}Delete monitorYes
GET /api/v1/monitors/{id}/statusCurrent monitor statusYes
GET /api/v1/heartbeatsList heartbeatsYes
POST /api/v1/heartbeatsCreate heartbeatYes
GET /api/v1/heartbeats/{id}Get heartbeatYes
PUT /api/v1/heartbeats/{id}Update heartbeatYes
DELETE /api/v1/heartbeats/{id}Delete heartbeatYes
POST /api/v1/hb/{slug}Heartbeat ping endpointYes
GET /api/v1/ai-heartbeatsList AI heartbeatsNo
POST /api/v1/ai-heartbeatsCreate AI heartbeatNo
POST /api/v1/ai-heartbeats/{id}/runPost AI heartbeat eventNo
GET /api/v1/incidentsList incidents (paginated)Yes
GET /api/v1/incidents/{id}Get incidentYes
POST /api/v1/incidents/{id}/ackAcknowledge incidentYes
POST /api/v1/incidents/{id}/resolveResolve incidentYes
GET /api/v1/correlation-groupsList correlation groupsYes
GET /api/v1/alertsList alert recordsYes
GET /api/v1/alert-routing-rulesList routing rulesYes
POST /api/v1/alert-routing-rulesCreate routing ruleYes
PUT /api/v1/alert-routing-rules/{id}Update routing ruleYes
DELETE /api/v1/alert-routing-rules/{id}Delete routing ruleYes
GET /api/v1/escalation-policiesList escalation policiesYes
POST /api/v1/escalation-policiesCreate policyYes
PUT /api/v1/escalation-policies/{id}Update policyYes
DELETE /api/v1/escalation-policies/{id}Delete policyYes
GET /api/v1/schedulesList on-call schedulesYes
POST /api/v1/schedulesCreate scheduleYes
PUT /api/v1/schedules/{id}Update scheduleYes
DELETE /api/v1/schedules/{id}Delete scheduleYes
POST /api/v1/schedules/{id}/overridesCreate schedule overrideYes
GET /api/v1/notification-channelsList notification channelsYes
POST /api/v1/notification-channelsCreate channelYes
PUT /api/v1/notification-channels/{id}Update channelYes
DELETE /api/v1/notification-channels/{id}Delete channelYes
POST /api/v1/notification-channels/{id}/testSend test notificationYes
GET /api/v1/notification-logSent notification historyNo
GET /api/v1/notifications/feedPer-user in-app feed (paginated + unread_count)Yes
GET /api/v1/notifications/feed/unread-countUnread countYes
POST /api/v1/notifications/feed/{id}/readMark one as readYes
POST /api/v1/notifications/feed/read-allMark all as readYes
GET /api/v1/users/me/notification-prefsGet notification preferencesYes
PUT /api/v1/users/me/notification-prefsUpdate notification preferencesYes
GET /api/v1/status-pagesList status pagesPartial
POST /api/v1/status-pagesCreate status pagePartial
PUT /api/v1/status-pages/{id}Update status pagePartial
DELETE /api/v1/status-pages/{id}Delete status pagePartial
GET /api/v1/maintenance-windowsList maintenance windowsYes
POST /api/v1/maintenance-windowsCreate maintenance windowYes
PUT /api/v1/maintenance-windows/{id}Update maintenance windowYes
DELETE /api/v1/maintenance-windows/{id}Delete maintenance windowYes
GET /api/v1/analytics/uptimeUptime statsPartial
GET /api/v1/analytics/response-timeResponse time statsPartial
GET /api/v1/billing/subscriptionCurrent subscriptionYes
POST /api/v1/billing/create-checkout-sessionStart Stripe checkoutYes
POST /api/v1/billing/downgradeSchedule downgrade {target_tier}Yes
DELETE /api/v1/billing/downgradeCancel scheduled downgradeYes
POST /api/v1/billing/intervalSwitch billing interval {interval}Yes
GET /api/v1/billing/invoicesList invoices (paginated)Yes
GET /api/v1/billing/tax-infoGet tax IDYes
PUT /api/v1/billing/tax-infoSet tax ID {country, tax_id, tax_id_type}Yes
GET /api/v1/billing/currenciesSupported billing currenciesYes
GET /api/v1/account/exportRequest data exportYes
GET /api/v1/audit-logTenant audit log (paginated)No
GET /api/v1/feature-flagsActive feature flags for tenantYes
GET /api/v1/feature-gatesList feature gatesYes
GET /api/v1/onboardingOnboarding step statusYes
POST /api/v1/onboarding/{step}/completeMark step completeYes
GET /api/v1/push-tokensList push tokensYes
POST /api/v1/push-tokensRegister device push tokenYes
DELETE /api/v1/push-tokens/{token}Unregister deviceYes
GET /api/v1/public/brand-settingsPublic brand config
GET /api/v1/public/status-pages/{slug}Public status page
GET /api/v1/public/status-pages/{slug}/incidentsPublic status page incidents
POST /api/v1/public/status-pages/{slug}/subscribeSubscribe to status page
GET /api/v1/public/tier-infoPublic tier limits
GET /api/v1/public/tiersAll tier configs with pricing
GET /api/v1/public/tier-comparisonTier comparison matrix
GET /api/v1/public/billing/currenciesSupported currencies (public)
GET /healthHealth check
WSS /api/v1/wsWebSocket real-time events (token query param)Yes

WebSocket

WSS /api/v1/ws?token=<access_token>

The WebSocket connection streams real-time incident and monitor status events. See the Concepts section for event payload shapes.

Rate limits

See Rate limits reference.

See also

Was this page helpful?