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

# Quickstart

> Make your first request through Wardin in under 5 minutes.

<Steps>
  <Step title="Create a virtual key">
    Sign in to [app.wardin.ai](https://app.wardin.ai) → **Console → Keys & Limits → Create key**.

    Give it a name (e.g. `dev-personal`), set a monthly budget, and click **Create**. Copy the key — it starts with `wardin_sk_`.
  </Step>

  <Step title="Point your SDK at the gateway">
    Replace your provider base URL and auth token with the Wardin equivalents.

    <CodeGroup>
      ```bash cURL theme={null}
      curl https://gw.wardin.ai/v1/messages \
        -H "Authorization: Bearer wardin_sk_YOUR_KEY" \
        -H "anthropic-version: 2023-06-01" \
        -H "content-type: application/json" \
        -d '{
          "model": "claude-opus-4-8",
          "max_tokens": 1024,
          "messages": [{"role": "user", "content": "Hello, Wardin!"}]
        }'
      ```

      ```python Python (Anthropic SDK) theme={null}
      import anthropic

      client = anthropic.Anthropic(
          api_key="wardin_sk_YOUR_KEY",
          base_url="https://gw.wardin.ai",
      )

      message = client.messages.create(
          model="claude-opus-4-8",
          max_tokens=1024,
          messages=[{"role": "user", "content": "Hello, Wardin!"}],
      )
      print(message.content)
      ```

      ```typescript TypeScript (Anthropic SDK) theme={null}
      import Anthropic from '@anthropic-ai/sdk';

      const client = new Anthropic({
        apiKey: 'wardin_sk_YOUR_KEY',
        baseURL: 'https://gw.wardin.ai',
      });

      const message = await client.messages.create({
        model: 'claude-opus-4-8',
        max_tokens: 1024,
        messages: [{ role: 'user', content: 'Hello, Wardin!' }],
      });
      console.log(message.content);
      ```

      ```bash Claude Code theme={null}
      export ANTHROPIC_AUTH_TOKEN=wardin_sk_YOUR_KEY
      export ANTHROPIC_BASE_URL=https://gw.wardin.ai
      ```
    </CodeGroup>
  </Step>

  <Step title="Watch it in the dashboard">
    Open **INGRESS** in the Wardin dashboard. Your request appears in the live stream with token counts, cost, latency, and the model used — click it to open the signed receipt.

    If the request was blocked by a budget or policy, the **POLICY** feed shows the decision and the structured JSON error returned to your client. Your own usage, grouped into sessions, lives under **MY LANE**.
  </Step>
</Steps>

## What just happened

Wardin processed your request through its enforcement pipeline:

1. **Auth** — verified `wardin_sk_` maps to a real key in your tenant
2. **Budget check** — atomically checked Redis; would have returned a `429` if over limit
3. **Policy check** — scanned the prompt against your active policies
4. **Cache lookup** — checked for an exact-match response (free on a hit)
5. **Forward** — sent the request to Anthropic with your real API key
6. **Cost commit** — parsed token usage and committed spend back to Redis
7. **Async emit** — sent the usage event to ClickHouse for dashboard analytics

## Next steps

<CardGroup cols={2}>
  <Card title="Connect Claude Code" href="/guides/claude-code" icon="terminal">
    Route all Claude Code traffic through Wardin for team cost tracking.
  </Card>

  <Card title="Set team budgets" href="/guides/team-budgets" icon="users">
    Create per-team keys with monthly spending limits and alerts.
  </Card>

  <Card title="Configure policies" href="/concepts/policies" icon="shield">
    Add model allowlists, PII redaction, and injection detection.
  </Card>

  <Card title="API Reference" href="/api-reference/overview" icon="code">
    Manage everything programmatically via the REST API.
  </Card>
</CardGroup>
