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

# Introduction

> Open-source API monitoring platform

## What is Griffin?

Griffin is an open-source platform for writing API monitors in TypeScript and running them continuously against your production APIs. Write monitors as code, deploy them to a hub, and get notified when things break.

<Card title="Get started" icon="rocket" href="/getting-started/quickstart" horizontal>
  Write and run your first API monitor in minutes.
</Card>

## Key Features

<CardGroup cols={2}>
  <Card title="TypeScript DSL" icon="code" href="/writing-tests/sequential-builder">
    Write monitors using sequential or graph-based builders with full type safety and IDE autocomplete.
  </Card>

  <Card title="Continuous Monitoring" icon="chart-line" href="/platform/metrics">
    Schedule monitors to run every minute, hour, or day. Track success rates, latency, and uptime.
  </Card>

  <Card title="Multi-Location Execution" icon="globe" href="/concepts/architecture">
    Run monitors from multiple regions to catch geographic issues.
  </Card>

  <Card title="Notifications" icon="bell" href="/platform/notifications">
    Get alerted via Slack, email, or webhooks when monitors fail or degrade.
  </Card>

  <Card title="Secret Management" icon="shield-keyhole" href="/writing-tests/secrets">
    Built-in support for env vars, AWS Secrets Manager, and HashiCorp Vault.
  </Card>

  <Card title="Cloud or Self-Hosted" icon="server" href="/concepts/cloud-vs-self-host">
    Use Griffin Cloud for a managed experience, or self-host for full control.
  </Card>
</CardGroup>

## Quick Example

```typescript theme={null}
import { createMonitorBuilder, GET, Json, Assert, Frequency } from "@griffin-app/griffin";

const monitor = createMonitorBuilder({
  name: "health-check",
  frequency: Frequency.every(1).minute(),
})
  .request("check", {
    method: GET,
    base: "https://api.example.com",
    response_format: Json,
    path: "/health",
  })
  .assert((state) => [
    Assert(state["check"].status).equals(200),
    Assert(state["check"].latency).lessThan(2000),
  ])
  .build();

export default monitor;
```

## Learn More

<CardGroup cols={2}>
  <Card title="Installation" icon="download" href="/getting-started/installation">
    Install the Griffin CLI.
  </Card>

  <Card title="Architecture" icon="sitemap" href="/concepts/architecture">
    Understand how Griffin works.
  </Card>

  <Card title="CLI Reference" icon="terminal" href="/cli/core-commands">
    See all CLI commands.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/overview">
    Explore the Hub REST API.
  </Card>
</CardGroup>
