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

# Snelstart (API)

> Beantwoord je eerste telefoongesprek met een AI-agent in vier REST-aanroepen.

Deze gids leidt je door de vier REST-aanroepen die nodig zijn om je
eerste telefoongesprek met een AI-agent te beantwoorden.

<Info>
  Je hebt een [ThunderPhone-account](https://app.thunderphone.com) nodig.
  Registreren is gratis en duurt minder dan een minuut. Klik je liever dan dat je curl gebruikt?
  Met de [dashboard-quickstart](/nl/quickstart-dashboard) bereik je hetzelfde
  eerste gesprek zonder code te schrijven.
</Info>

## Stap 1: Een API-sleutel ophalen

<Steps>
  <Step title="Inloggen">
    Open [app.thunderphone.com](https://app.thunderphone.com).
  </Step>

  <Step title="Ga naar Sleutels">
    Ga in het dashboard naar **Organisatie → Sleutels**.
  </Step>

  <Step title="Een sleutel maken">
    Klik op **Sleutel maken**, geef de sleutel een naam en kopieer de
    waarde `sk_live_...`. De onbewerkte sleutel wordt **slechts één keer** weergegeven — sla deze
    direct op in je secrets manager.
  </Step>
</Steps>

<Tip>
  Loop je vast? [Een server-API-sleutel maken](/nl/guides/api-keys) legt
  deze procedure stap voor stap uit, en de Copilot in de app kan
  elke bediening direct voor je uitlichten.
</Tip>

Vervang in deze hele gids `sk_live_YOUR_API_KEY` door de waarde die je
zojuist hebt gekopieerd. De sleutel identificeert je organisatie automatisch, dus
je hoeft nooit een organisatie-id in URL's op te nemen.

## Stap 2: Een agent maken

Een agent bepaalt hoe de AI gesprekken afhandelt — prompt, stem,
productpakket, tools en geschiktheid voor widgets.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.thunderphone.com/v1/agents \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "name":   "Customer Support",
      "prompt": "You are a friendly support agent for Acme Corp. Help with orders, returns, and product info. Be concise and helpful.",
      "voice":  "john",
      "product": "spark"
    }'
  ```

  ```python Python theme={null}
  import os, requests

  agent = requests.post(
      "https://api.thunderphone.com/v1/agents",
      headers={"Authorization": f"Bearer {os.environ['THUNDERPHONE_API_KEY']}"},
      json={
          "name":   "Customer Support",
          "prompt": "You are a friendly support agent for Acme Corp. Help with orders, returns, and product info. Be concise and helpful.",
          "voice":  "john",
          "product": "spark",
      },
  ).json()
  print("Agent id:", agent["id"])
  ```

  ```javascript Node.js theme={null}
  const agent = await fetch("https://api.thunderphone.com/v1/agents", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.THUNDERPHONE_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      name:    "Customer Support",
      prompt:  "You are a friendly support agent for Acme Corp. Help with orders, returns, and product info. Be concise and helpful.",
      voice:   "john",
      product: "spark",
    }),
  }).then((r) => r.json());
  console.log("Agent id:", agent.id);
  ```
</CodeGroup>

<Tip>
  Productpakketten: `spark` is geoptimaliseerd voor kosten, `bolt` voor snelheid en
  `storm-base` / `storm-extra` voor intelligentie bij complexe prompts. Bekijk
  [Agents](/api-reference/agents#product-tiers-at-a-glance) voor de volledige
  vergelijking.
</Tip>

## Stap 3: Richt een telefoonnummer in

Deze aanroep vraagt de demopool van ThunderPhone om een nummer en wijst je
nieuwe agent toe als handler voor inkomende oproepen. (Als je je eigen nummer
van een VoIP-provider wilt meenemen, zie dan [VoIP-verbindingen](/api-reference/voip-connections)
in plaats daarvan.)

<CodeGroup>
  ```bash cURL theme={null}
  # First provision
  curl -X POST https://api.thunderphone.com/v1/phone-numbers \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"area_code": "415"}'

  # Then assign the agent you created in Step 2
  curl -X PATCH https://api.thunderphone.com/v1/phone-numbers/<id-from-previous> \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"inbound_agent_id": 12}'
  ```

  ```python Python theme={null}
  number = requests.post(
      "https://api.thunderphone.com/v1/phone-numbers",
      headers={"Authorization": f"Bearer {os.environ['THUNDERPHONE_API_KEY']}"},
      json={"area_code": "415"},
  ).json()
  requests.patch(
      f"https://api.thunderphone.com/v1/phone-numbers/{number['id']}",
      headers={"Authorization": f"Bearer {os.environ['THUNDERPHONE_API_KEY']}"},
      json={"inbound_agent_id": agent["id"]},
  )
  print("Your ThunderPhone number:", number["number"])
  ```
</CodeGroup>

Je nieuwe nummer begint met `status="provisioning"` en gaat binnen
enkele seconden over naar `active`; tegen de tijd dat je je browser sluit,
is het nummer klaar om oproepen aan te nemen.

## Stap 4 (optioneel): Stel een webhook in

Voeg voor realtimegebeurtenissen (dynamische oproeproutering, verwerking na
een oproep) een webhook-eindpunt toe. Abonneer je alleen op de gebeurtenissen
die je nodig hebt.

```bash theme={null}
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label":  "Prod webhook",
    "url":    "https://your-server.com/thunderphone-webhook",
    "events": ["telephony.incoming", "telephony.complete"]
  }'
```

Het antwoord bevat een eenmalige `secret` — kopieer deze naar je
secretmanager. Gebruik die secret om de header `X-ThunderPhone-Signature`
bij inkomende aanvragen te verifiëren (zie
[Overzicht van webhooks](/nl/webhooks/overview)).

## Stap 5: Test je agent

Bel het nummer dat je zojuist hebt ingericht. De agent neemt op, stelt
zich voor en volgt je prompt.

Controleer de oproep nadat deze is beëindigd:

```bash theme={null}
curl https://api.thunderphone.com/v1/calls \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```

Bekijk een specifieke oproep om de transcriptie en opname-URL op te halen:

```bash theme={null}
curl https://api.thunderphone.com/v1/calls/{call_id}/transcript \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
curl https://api.thunderphone.com/v1/calls/{call_id}/audio \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```

***

## Volgende stappen

<CardGroup cols={2}>
  <Card title="Functietools toevoegen" icon="screwdriver-wrench" href="/nl/tools/overview">
    Laat je agent tijdens een gesprek je API's aanroepen.
  </Card>

  <Card title="Uitgaande oproepen plaatsen" icon="arrow-up-right" href="/api-reference/outbound-calls">
    Start oproepen vanuit je eigen code.
  </Card>

  <Card title="Webhooks verwerken" icon="bolt" href="/nl/webhooks/overview">
    Reageer in realtime op oproepgebeurtenissen.
  </Card>

  <Card title="Volledige API-referentie" icon="book" href="/api-reference/introduction">
    Elk openbaar eindpunt, gedocumenteerd.
  </Card>
</CardGroup>
