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

# Quickstart

> Anmelden, API-Key holen und in fünf Minuten eine Sandbox-Zahlung ausführen.

Dieser Walkthrough führt von Null zu einer abgeschlossenen Sandbox-Transaktion. Du erstellst ein Konto, enthüllst deinen API-Key, registrierst den MCP-Server, erstellst Agent + Karte, deklarierst einen Intent und simulierst eine Belastung.

<Note>
  Alles in diesem Quickstart läuft in **Sandbox**. Kartennummern, IBANs und Webhooks sind live-shaped, aber kein echtes Geld bewegt sich.
</Note>

<Steps>
  <Step title="Anmelden">
    Sandbox-Invite anfragen unter [getovra.com/sign-up](https://getovra.com/sign-up). Sobald angenommen, anmelden — deine Sandbox-Org, IBAN, Default-Policy und API-Key werden auto-provisioniert.

    <Tip>
      Das Reveal-Modal zeigt deinen `sk_sandbox_*` Key **einmal**. Jetzt kopieren. Du kannst ihn später über **Dashboard → API Keys** rotieren.
    </Tip>

    ```bash theme={}
    export OVRA_API_KEY="sk_sandbox_..."
    ```
  </Step>

  <Step title="MCP-Server verbinden (optional)">
    Der MCP-Server gibt jedem LLM-Client (Claude Desktop, Cursor, Kiro etc.) alle 19 Ovra-Tools.

    <CodeGroup>
      ```json Claude Desktop theme={}
      {
        "mcpServers": {
          "ovra": {
            "command": "npx",
            "args": ["@ovra/mcp@latest"],
            "env": { "OVRA_API_KEY": "sk_sandbox_..." }
          }
        }
      }
      ```

      ```json Streamable HTTP (jeder Client) theme={}
      {
        "mcpServers": {
          "ovra": {
            "type": "streamable-http",
            "url": "https://api.getovra.com/api/mcp",
            "headers": { "Authorization": "Bearer sk_sandbox_..." }
          }
        }
      }
      ```
    </CodeGroup>

    Client neu starten. Du solltest 19 `ovra_*` Tools sehen. Siehe [MCP-Setup](/de/mcp/setup) für erweiterte Konfiguration.
  </Step>

  <Step title="Agent erstellen">
    Ein Agent ist eine first-class Entity — er besitzt Karten, Tokens, Transaktionen und eine Policy. Das Minimal-Form-Feld-Set ist `name + purpose + policyId`.

    <CodeGroup>
      ```bash curl theme={}
      curl -X POST https://api.getovra.com/agents \
        -H "Authorization: Bearer $OVRA_API_KEY" \
        -H "Content-Type: application/json" \
        -H "Idempotency-Key: $(uuidgen)" \
        -d '{
          "name": "procurement-bot",
          "policyId": "po_default_...",
          "profile": { "purpose": "Bürobedarf unter EUR 100 kaufen" }
        }'
      ```

      ```ts SDK theme={}
      import { Ovra } from "@ovra/sdk";
      const ovra = new Ovra({ apiKey: process.env.OVRA_API_KEY });

      const agent = await ovra.agents.create({
        name: "procurement-bot",
        policyId: "po_default_...",
        profile: { purpose: "Bürobedarf unter EUR 100 kaufen" },
      });
      ```

      ```text MCP theme={}
      Use ovra_agent with action "provision",
        name: "procurement-bot",
        policyId: "po_default_...",
        profile: { purpose: "Bürobedarf unter EUR 100 kaufen" }
      ```
    </CodeGroup>

    Returnt `{ id: "ag_...", status: "active", ... }`.
  </Step>

  <Step title="Karte für den Agent ausstellen">
    Jede Karte ist an einen Agent gebunden und innerhalb dieses Agents eindeutig benannt. Mehrere Karten pro Agent sind möglich (`subscriptions`, `travel`, `one-off`).

    ```bash theme={}
    curl -X POST https://api.getovra.com/cards \
      -H "Authorization: Bearer $OVRA_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: $(uuidgen)" \
      -d '{
        "agentId": "ag_...",
        "name": "default",
        "usage": "multi",
        "purpose": "Default-Karte für Procurement"
      }'
    ```

    Returnt `{ id: "ca_...", last4: "4242", status: "active", ... }`. PAN und CVV sind AES-256-GCM verschlüsselt at rest und werden auf diesem Endpoint nie im Klartext zurückgegeben.
  </Step>

  <Step title="Intent deklarieren">
    Kein Geld bewegt sich ohne genehmigten Intent. Policy-Engine und Risk-Engine laufen während dieses Calls.

    ```bash theme={}
    curl -X POST https://api.getovra.com/intents \
      -H "Authorization: Bearer $OVRA_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: $(uuidgen)" \
      -d '{
        "agentId": "ag_...",
        "cardId": "ca_...",
        "purpose": "Pack USB-C Hubs",
        "expectedAmountEuros": 29.99,
        "expectedMerchant": "amazon.de"
      }'
    ```

    Wenn Policy auto-approved, bekommst du `{ status: "approved" }` zurück. Sonst `pending_approval` — vom Dashboard oder via `POST /intents/:id/approve` freigeben.
  </Step>

  <Step title="Belastung simulieren">
    In Sandbox kannst du den Merchant-Call abkürzen:

    ```bash theme={}
    curl -X POST https://api.getovra.com/simulate/charge \
      -H "Authorization: Bearer $OVRA_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: $(uuidgen)" \
      -d '{
        "intentId": "int_...",
        "amountEuros": 29.99,
        "merchant": "amazon.de"
      }'
    ```

    Returnt eine `tx_*`-Row mit `status: "completed"`. Der passende `transaction.completed` Webhook feuert sofort, wenn du eine Subscription registriert hast.
  </Step>
</Steps>

## Echte Merchant-Flows

Der simulate-Endpoint ist ein Stand-In. Für echte Merchant-Calls den passenden Modus wählen:

<CardGroup cols={2}>
  <Card title="MPP" icon="lock-keyhole" href="/de/concepts/mpp">
    Merchant returnt 402 mit `WWW-Authenticate: Payment`. Mit `POST /v1/mpp/pay` eine JWE-wrapped Credential minten und in einem Call settlen.
  </Card>

  <Card title="CUA" icon="browser" href="/de/concepts/cua">
    Merchant hat nur ein Checkout-Formular. Autofill-Token via `POST /v1/cua/autofill-tokens` minten, der Harness füllt das Formular mit einem tokenisierten DPAN.
  </Card>
</CardGroup>

## Weiter

<CardGroup cols={2}>
  <Card title="Die sechs Säulen" icon="layer-group" href="/de/concepts/pay">
    Tour durch Bezahlung, Karten, Konten, Einzug, Steuerung und Intelligenz.
  </Card>

  <Card title="Policies" icon="shield-check" href="/de/concepts/policies">
    Festlegen, was dein Agent ausgeben darf, wo und wann.
  </Card>

  <Card title="Webhooks" icon="bell" href="/de/concepts/webhooks">
    Die \~50 Event-Typen in deine eigenen Systeme verdrahten.
  </Card>

  <Card title="MCP-Tools" icon="terminal" href="/de/mcp/tools">
    Die vollständige action-multiplexed Referenz für alle 19 Tools.
  </Card>
</CardGroup>
