Developer API

With the API, your systems (or your hosting panel) create and query monitors, incidents and availability reports without opening the portal. It lives at the same address as the portal, under /api/v1. The full specification (OpenAPI 3.1) is at /api/v1/openapi.json.

Token

  1. A company administrator, with two-factor authentication on, opens the API tab and creates a token.
  2. Choose the scopes: Read only or Read and write (or individual scopes) and the validity.
  3. Copy the token: it is shown only once. Store it as a secret (password manager, environment variable), never in code.

Send the token with every request:

Authorization: Bearer tdx_...

The token belongs to the company, not to a person. If it leaks or is no longer used, revoke it in the same tab.

Scopes

  • monitors:read: list and view monitors and their status.
  • monitors:write: create, edit, pause and resume monitors.
  • incidents:read: incidents of the last 1 to 90 days.
  • reports:read: monthly availability report.
  • providers:read / providers:write (Professional and Agency plans): provider SLAs, their monthly breach report with the credit due, and evidence as PDF or CSV (GET /api/v1/providers/{id}/reports/{YYYY-MM} and /evidence.pdf; the SHA-256 fingerprint is in the X-Content-SHA256 header).

Examples

List monitors:

curl -H "Authorization: Bearer $TOKEN" https://<portal>/api/v1/monitors

Create a website monitor (with Idempotency-Key, a retry doesn't create a second one):

curl -X POST https://<portal>/api/v1/monitors \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1234" \
  -d '{"name": "Store", "type": "http", "url": "https://www.yourcompany.com/", "expected_text": "Welcome", "interval": "5m"}'

Types: http (url, expected_text), tcp (host, port), ping (host) and certificate (host, port, warn_days). Intervals and the number of monitors depend on your plan. Only public targets are accepted.

Pause and resume: POST /api/v1/monitors/{id}/pause and /resume. Nothing is deleted: a paused monitor stops checking and alerting, and can be resumed.

Monthly report: GET /api/v1/reports/2026-09 (same figures as the portal report; Chile time).

Monitor status

up working · down failing · degraded the last check failed · starting waiting for the first check · unmeasurable cannot be measured from the internet · no_checks no checks · paused paused (paused_reason: user or plan).

Rate limits

Per token per minute: Free 60, Basic 120, Professional 300 requests; writes, 10 per minute. Every response includes RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset; over the limit you get 429 with Retry-After.

Errors

Errors are JSON (RFC 9457) with a stable code and a detail in your language (Accept-Language: es, en or pt). Main codes:

  • invalid_token (401): the token is missing, unknown, expired or revoked.
  • insufficient_scope (403): the token lacks the scope.
  • managed_account (403): in an account managed by TECDEX, monitors are read-only.
  • not_found (404): it doesn't exist or doesn't belong to your company.
  • validation_failed (422): invalid data; details in errors.
  • invalid_month (422): the month must be YYYY-MM and not in the future.
  • plan_limit (409): you've reached your plan's monitor limit.
  • plan_type_not_included (403): your plan doesn't include that monitor type (Free: http only; Basic and Professional: also tcp, ping and certificate).
  • already_paused, not_paused, paused_by_plan (409): pause state.
  • rate_limited (429): wait as indicated by Retry-After.
  • service_unavailable (503): retry in a minute.

Sign in · Create account