Developers · API v1

TideStat API

Read-only JSON for your own dashboards, client portals and tools like Zapier or Looker Studio. Available on Growth, Agency and Enterprise. Base URL https://app.tidestat.com/api/v1

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 Authorization header: 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 are null.
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, cls
  • seo: score, pages_audited
  • accessibility: score, issues_found
  • ssl: status, certificate_expires_at, certificate_days_left, domain_expires_at, domain_days_left
  • reputation: 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