> ## Documentation Index
> Fetch the complete documentation index at: https://exa.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Status Page

> Live availability, active incidents, and uptime history for Exa services.

export const ExaStatus = () => {
  const [data, setData] = useState(null);
  const [failed, setFailed] = useState(false);
  const load = async () => {
    try {
      const [summaryRes, componentsRes] = await Promise.all([fetch("https://status.exa.ai/summary.json"), fetch("https://status.exa.ai/v2/components.json")]);
      if (!summaryRes.ok || !componentsRes.ok) throw new Error("status fetch failed");
      const summary = await summaryRes.json();
      const components = await componentsRes.json();
      setData({
        overall: summary.page?.status,
        incidents: summary.activeIncidents || [],
        maintenances: summary.activeMaintenances || [],
        services: (components.components || []).filter(c => !c.group),
        checkedAt: new Date()
      });
      setFailed(false);
    } catch (err) {
      setFailed(true);
    }
  };
  useEffect(() => {
    load();
    const timer = setInterval(load, 5 * 60 * 1000);
    return () => clearInterval(timer);
  }, []);
  const SERVICE_STATUS = {
    OPERATIONAL: {
      label: "Operational",
      color: "#10b981"
    },
    DEGRADEDPERFORMANCE: {
      label: "Degraded performance",
      color: "#f59e0b"
    },
    PARTIALOUTAGE: {
      label: "Partial outage",
      color: "#f59e0b"
    },
    MAJOROUTAGE: {
      label: "Major outage",
      color: "#ef4444"
    },
    UNDERMAINTENANCE: {
      label: "Under maintenance",
      color: "#94a3b8"
    }
  };
  const OVERALL_STATUS = {
    UP: {
      label: "All systems operational",
      color: "#10b981"
    },
    HASISSUES: {
      label: "Experiencing issues",
      color: "#f59e0b"
    },
    UNDERMAINTENANCE: {
      label: "Under maintenance",
      color: "#94a3b8"
    }
  };
  if (failed) {
    return <div className="not-prose my-6 rounded-xl border border-border bg-card p-5">
        <a href="https://status.exa.ai" target="_blank" rel="noopener noreferrer" className="text-foreground underline hover:no-underline">
          Couldn't load live status — open status.exa.ai →
        </a>
      </div>;
  }
  const overall = OVERALL_STATUS[data?.overall] || ({
    label: "Checking Exa services…",
    color: "#94a3b8"
  });
  return <div className="not-prose my-6">
      <div className="rounded-xl border border-border bg-card overflow-hidden">
        <div className="flex items-center justify-between gap-3 p-5">
          <div className="flex items-center gap-3">
            <span className={"h-2.5 w-2.5 rounded-full" + (data ? "" : " animate-pulse")} style={{
    backgroundColor: overall.color
  }}></span>
            <span className="text-base font-semibold text-foreground">{overall.label}</span>
          </div>
          <a href="https://status.exa.ai" target="_blank" rel="noopener noreferrer" className="text-sm text-muted-foreground hover:text-foreground">
            status.exa.ai ↗
          </a>
        </div>
        {data && <div>
            {data.services.map(service => {
    const s = SERVICE_STATUS[service.status] || ({
      label: service.status,
      color: "#94a3b8"
    });
    return <div key={service.id} className="flex items-center justify-between gap-3 border-t border-border px-5 py-3">
                  <span className="text-sm text-foreground">{service.name}</span>
                  <span className="rounded-md px-2.5 py-0.5 text-xs font-medium" style={{
      color: s.color,
      backgroundColor: s.color + "1a"
    }}>
                    {s.label}
                  </span>
                </div>;
  })}
          </div>}
      </div>
      {data && data.incidents.length > 0 && <div className="mt-4 rounded-xl border p-5" style={{
    borderColor: "#ef444433",
    backgroundColor: "#ef44440d"
  }}>
          <div className="mb-2 text-sm font-semibold" style={{
    color: "#ef4444"
  }}>
            Active incidents
          </div>
          {data.incidents.map(incident => <div key={incident.name} className="mb-2 last:mb-0">
              <div className="text-sm font-medium text-foreground">{incident.name}</div>
              <div className="text-xs text-muted-foreground">
                {incident.status} · started {new Date(incident.started).toLocaleString()}
              </div>
              {incident.url && <a href={incident.url} target="_blank" rel="noopener noreferrer" className="text-xs text-foreground underline hover:no-underline">
                  Incident updates →
                </a>}
            </div>)}
        </div>}
      {data && data.maintenances.length > 0 && <div className="mt-4 rounded-xl border p-5" style={{
    borderColor: "#f59e0b33",
    backgroundColor: "#f59e0b0d"
  }}>
          <div className="mb-2 text-sm font-semibold" style={{
    color: "#f59e0b"
  }}>
            Scheduled maintenance
          </div>
          {data.maintenances.map(maintenance => <div key={maintenance.name} className="mb-2 last:mb-0">
              <div className="text-sm font-medium text-foreground">{maintenance.name}</div>
              <div className="text-xs text-muted-foreground">
                {new Date(maintenance.start).toLocaleString()}
                {maintenance.duration ? ` · ${maintenance.duration} minutes` : ""}
              </div>
            </div>)}
        </div>}
      {data && <div className="mt-3 text-xs text-muted-foreground">
          Checked {data.checkedAt.toLocaleTimeString()} · refreshes every 5 minutes
        </div>}
    </div>;
};

***

Exa publishes service availability at [status.exa.ai](https://status.exa.ai): the current state of the Search API, Websets, and Exa MCP, active incidents with updates as they progress, and 90 days of uptime history.

<ExaStatus />

## Subscribe to updates

Subscribe on the status page to be notified when an incident is opened, updated, or resolved. Notifications are delivered by email, Slack, Google Chat, or webhook.

## Get help

If requests keep failing while all systems report operational, the cause is likely request-level — check [Error codes](/docs/admin/error-codes) first.

<Columns cols={2}>
  <Card title="Email support" icon="mail" href="mailto:hello@exa.ai" cta="Email support" arrow="true">
    Send the response status, error body, and `requestId` for the fastest diagnosis.
  </Card>

  <Card title="Enterprise support" icon="headset" href="https://exa.ai/contact/sales" cta="Contact sales" arrow="true">
    Uptime and support SLAs are available on Enterprise plans.
  </Card>
</Columns>
