Usage & Limits

How much of your plan you've used — monitors, projects, custom probes, custom VPS, integrations, and manual checks — and your account's change history. Plan selection and billing are managed from the dashboard, not the API.

Meter shape

Every usage meter below (monitors, projects, custom probes, custom VPS, integrations) uses the same generic shape: { used, limit, remaining, percentage, is_unlimited, is_exhausted }. limit: -1 means unlimited (is_unlimited: true).

billing.plan_period_ends_at is when a paid plan renews or lapses, and billing.days_until_renewal counts the whole days left (negative once lapsed; both are null on a free plan). Scoped tokens need the read-only billing:read ability — no token can change or cancel a plan.
There’s no payment gateway wired up for overage — if a plan allows going over its monitor limit, that’s tracked for your own visibility only and never auto-billed.
GET/usage
Usage & Renewal

Every meter on your account — monitors, projects, custom probes, custom VPS, integrations, and manual "check now" requests this month — plus plan capabilities and limits. The same data the Usage page in your dashboard is built from.

Example Request
curl /api/v1/usage \
  -H "Authorization: Bearer 1|K7f9XyZaQ2mN8pL4vR6tW1sJ0hD3cB5gA7eF9uI2oY4"
Example Response
{
  "success": true,
  "data": {
    "plan": { "slug": "free-tier", "monitor_limit": 20 },
    "monitors": { "used": 3, "limit": 20, "remaining": 17, "percentage": 15.0, "is_unlimited": false, "is_exhausted": false },
    "projects": { "used": 1, "limit": 3, "remaining": 2, "percentage": 33.3, "is_unlimited": false, "is_exhausted": false },
    "custom_probes": { "used": 0, "limit": 0, "remaining": 0, "percentage": 0, "is_unlimited": false, "is_exhausted": true },
    "custom_vps": { "used": 0, "limit": 0, "remaining": 0, "percentage": 0, "is_unlimited": false, "is_exhausted": true },
    "integrations": { "used": 1, "limit": 1, "remaining": 0, "percentage": 100, "is_unlimited": false, "is_exhausted": true },
    "manual_checks": { "used": 4, "limit": 50, "remaining": 46, "percentage": 8.0, "is_unlimited": false, "is_exhausted": false, "period_start": "2026-09-01T00:00:00Z", "period_end": "2026-09-30T23:59:59Z", "resets_at": "2026-10-01T00:00:00Z" },
    "billing": { "credit_balance": 0, "plan_period_started_at": null, "plan_period_ends_at": null, "is_on_active_premium_period": false, "days_until_renewal": null },
    "capabilities": { "can_select_probes": false, "can_add_custom_probes": false, "can_add_custom_vps": false, "can_use_integrations": false, "can_use_api": false, "min_check_interval_seconds": 600, "data_retention_days": 7 }
  }
}
GET/subscription/current
Current Plan

Your plan with its full effective limits — allowed check intervals, data retention, probe/VPS/integration allowances, feature flags — together with the same usage meters as /usage. Read-only; changing plans happens in the dashboard.

Example Request
curl -X GET "https://api.exitprobe.com/api/v1/subscription/current" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
Example Response
{
  "success": true,
  "data": {
    "plan": { "name": "Pro", "slug": "pro", "price": 29, "billing_interval": "month", "monitor_limit": 100, "max_custom_vps": 10, "min_check_interval_seconds": 60, "allowed_intervals": { "60": "1 minute" }, "data_retention_days": 90 },
    "usage": { "monitors": { "used": 41, "limit": 100 } }
  }
}
GET/audit-log
Audit Log

A write-once history of changes to your monitors, projects, and integrations — who/what changed, and what changed.

Query Parameters
actionstring`created`, `updated`, `deleted`, or `restored`.
auditable_typestring`Monitor`, `Project`, or `Integration`.
project_idintegerAlso includes account-wide integration entries (they have no project).
Example Request
curl -X GET "https://api.exitprobe.com/api/v1/audit-log" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
Example Response
{
  "success": true,
  "data": {
    "audit_logs": [
      { "id": 1, "project_id": 2, "auditable_type": "Monitor", "auditable_id": 10, "auditable_name": "US-East WG1", "action": "updated", "changes": { "check_interval_seconds": [300, 600] }, "ip_address": "203.0.113.5", "created_at": "2026-09-26T00:00:00Z" }
    ]
  }
}