API Documentation

Integrate OpsPulse monitoring into your workflow. All endpoints return JSON and require authentication via secure session cookie.

Clear examples • Endpoint-by-endpoint reference • Updated for v1.3

Authentication

🔒 Session-Based Auth

All API endpoints require authentication via an HTTP-only session cookie. First call POST /api/auth/login to establish a session, then include credentials in subsequent requests.

Base URL

https://orionapps.org/api

Authentication Endpoints

POST /api/auth/register

Create a new account. Returns user object on success.

ParameterTypeDescription
emailstringUser email address
passwordstringPassword (min 8 characters)

Response

{
  "id": "uuid",
  "email": "[email protected]",
  "plan": "starter"
}
POST /api/auth/login

Authenticate and establish a session. Sets HTTP-only cookie.

ParameterTypeDescription
emailstringUser email
passwordstringUser password
GET /api/auth/me

Get current authenticated user. Returns 401 if not logged in.

POST /api/auth/logout

Clear session and log out.

Endpoint Management

GET /api/endpoints

List all monitored endpoints for the authenticated user.

Response

[
  {
    "id": "uuid",
    "url": "https://example.com",
    "name": "Production API",
    "check_interval": 300,
    "failure_threshold": 2,
    "cooldown_minutes": 30,
    "is_active": true,
    "last_status": "up",
    "uptime_24h": 99.95
  }
]
POST /api/endpoints

Add a new endpoint to monitor.

ParameterTypeDefaultDescription
urlstringrequiredURL to monitor
namestringnullDisplay name
check_intervalinteger300Seconds between checks
failure_thresholdinteger2Failures before alert
cooldown_minutesinteger30Minutes between alerts
POST /api/endpoints/bulk-import

Import multiple endpoints at once via CSV-like format.

ParameterTypeDescription
endpointsarrayArray of endpoint objects
PATCH /api/endpoints/:id

Update endpoint settings. Only provided fields are updated.

DELETE /api/endpoints/:id

Soft delete an endpoint (stops monitoring).

Incidents

GET /api/incidents

List recent incidents. Supports pagination via query params.

Query ParamTypeDefaultDescription
limitinteger20Max results
statusstringallFilter: open, resolved
GET /api/incidents/:id

Get single incident details with notes.

POST /api/incidents/:id/notes

Add a note to an incident.

ParameterTypeDescription
note_textstringNote content
is_publicbooleanShow on status page

Checks History

GET /api/checks

Get check history for an endpoint.

Query ParamTypeDescription
endpoint_iduuidFilter by endpoint
limitintegerMax results (default 100)

Response

[
  {
    "id": 12345,
    "endpoint_id": "uuid",
    "ok": true,
    "status_code": 200,
    "latency_ms": 145,
    "checked_at": "2026-03-01T00:00:00Z"
  }
]

Alert Settings

GET /api/alerts/settings

Get current alert configuration.

Response

{
  "telegram_enabled": true,
  "email_enabled": false,
  "webhook_enabled": false,
  "webhook_url": null,
  "quiet_hours_start": null,
  "quiet_hours_end": null,
  "timezone": "UTC"
}
PATCH /api/alerts/settings

Update alert settings. Supports Telegram, email, and webhook notifications.

ParameterTypeDescription
telegram_enabledbooleanEnable Telegram alerts
email_enabledbooleanEnable email alerts (Pro+)
webhook_enabledbooleanEnable webhook alerts (Business)
webhook_urlstringSlack/Discord/Custom webhook URL
quiet_hours_startintegerStart hour (0-23)
quiet_hours_endintegerEnd hour (0-23)
timezonestringIANA timezone

Status Page

POST /api/status-page/enable

Enable public status page. Returns unique status page ID.

GET /api/status-page/branding

Get status page branding settings.

PATCH /api/status-page/branding

Customize status page branding.

ParameterTypeDescription
titlestringPage title (max 100 chars)
logo_urlstringLogo image URL
accent_colorstringHex color (e.g., #3b82f6)

Public API

Public endpoints don't require authentication and can be used to display status on external sites.

GET /api/public/status/:statusPageId

Get public status data for a status page. No auth required.

Response

{
  "branding": {
    "title": "System Status",
    "logo_url": null,
    "accent_color": "#3b82f6"
  },
  "endpoints": [
    {
      "name": "API",
      "url": "https://api.example.com",
      "last_check_ok": true
    }
  ],
  "incidents": [],
  "uptime_30d": "99.95"
}
GET /api/public/incident/:incidentId

Get single incident with public notes only.

Error Responses

All errors follow a consistent format:

{
  "error": "Error message",
  "code": "ERROR_CODE" // optional
}

Common Status Codes

CodeMeaning
400Bad request - invalid parameters
401Unauthorized - login required
403Forbidden - plan limit or permission
404Not found
429Rate limited
500Server error

Rate Limits

API requests are rate-limited per endpoint:

  • Auth endpoints: 10 requests/minute
  • General API: 100 requests/minute

Rate limit headers are included in responses:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1709251200

SDK & Libraries

Official SDKs coming soon. In the meantime, use fetch with credentials:

// JavaScript example
const response = await fetch('https://orionapps.org/api/endpoints', {
  credentials: 'include'
});
const endpoints = await response.json();

Need Help?

Contact us at [email protected] for API support.