Read-only JSON API for accounts on Growth, Agency or Enterprise. Use it to pull site status, uptime, scores, the Fix list, keyword positions and alerts into your own dashboards, reports or tools such as Zapier and Looker Studio.
- Base URL:
https://app.tidestat.com/api/v1 - Auth: an API key in the
Authorizationheader:Authorization: Bearer ts_... - Keys: account owners and admins create them in the app under Settings → API keys. A key is shown once; only a hash is stored. A key reads every site in its account. Revoke it there at any time.
- Rate limit: 60 requests a minute per key (HTTP 429 when exceeded, with
Retry-After). - Format: every response is JSON. Lists are
{"data": [...], "meta": {...}}; single objects are{"data": {...}}. Times are ISO 8601 UTC. Missing values arenull.
curl -H "Authorization: Bearer ts_your_key" https://app.tidestat.com/api/v1/sites
Errors
{"error": {"code": "plan", "message": "API access needs the Growth plan or above."}}
| Status | code |
Meaning |
|---|---|---|
| 401 | unauthenticated |
Missing, wrong, expired or revoked key |
| 403 | plan |
The account's plan doesn't include the API (or that endpoint's feature) |
| 403 | account_suspended |
The account is suspended |
| 404 | not_found |
No such site in this account |
| 429 | — | Rate limit reached |
Endpoints
GET /account
The key's account, plan and usage: sites, team members, keywords (used and limit) and AI credits remaining.
GET /sites
All sites, sorted by name. Query: per_page (1–100, default 50), page.
Each site has id, name, url, monitoring_enabled, status (up, down or unknown),
last_checked_at, response_time_ms and uptime_30d (percent).
GET /sites/{id}
One site with everything above plus check_interval_minutes, uptime_24h, uptime_7d and the
latest successful result of each check:
performance(mobile Lighthouse):performance,accessibility,best_practices,seo(0–100),lcp_ms,inp_ms,clsseo:score,pages_auditedaccessibility:score,issues_foundssl:status,certificate_expires_at,certificate_days_left,domain_expires_at,domain_days_leftreputation:google_safe_browsing,spamhaus_listed
GET /sites/{id}/uptime?days=30
Daily uptime, oldest first: date, checks, down_checks, uptime_pct, avg_response_ms.
days goes up to your plan's history (Growth 90; capped at 90).
GET /sites/{id}/issues and GET /issues
The Fix list for one site or the whole account, worst first. Query: status (comma-separated:
open, regressed, fixed, ignored; default open,regressed), severity (critical,
warning, opportunity). Each issue has key (stable per site, for example seo:meta-description),
site_id, site, title, detail, severity, area, source, status, found_at and
app_url (a link into TideStat).
GET /sites/{id}/keywords
Tracked keywords with position (latest; null = not in the top 30), previous_position,
ranked_url and checked_at.
GET /alerts
Alerts, newest first. Query: status (active or resolved), site_id, per_page, page.
Each alert has id, site_id, source, rule, severity, status, title, message,
triggered_at and resolved_at.
Not in v1
Writes (adding sites, running audits) and webhooks for events. Alerts can already be sent to any webhook from Settings → Alert channels.
Need an API key? Account owners and admins create them in the app under Settings → API keys.
Sign in to TideStat