> ## 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.

# Mulai Cepat (API)

> Jawab panggilan telepon pertama Anda dengan agen AI dalam empat panggilan REST.

Panduan ini memandu Anda melalui empat panggilan REST yang diperlukan untuk menjawab
panggilan telepon pertama Anda dengan agen AI.

<Info>
  Anda memerlukan [akun ThunderPhone](https://app.thunderphone.com).
  Pendaftaran gratis dan memerlukan waktu kurang dari satu menit. Lebih suka mengklik daripada menggunakan curl?
  [Panduan cepat dasbor](/id/quickstart-dashboard) menghasilkan
  panggilan pertama yang sama tanpa menulis kode.
</Info>

## Langkah 1: Dapatkan kunci API

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

  <Step title="Buka Keys">
    Buka **Organization → Keys** di dasbor.
  </Step>

  <Step title="Buat kunci">
    Klik **Create key**, beri nama, lalu salin nilai
    `sk_live_...`. Kunci mentah ditampilkan **hanya sekali** — segera simpan
    di pengelola rahasia Anda.
  </Step>
</Steps>

<Tip>
  Mengalami kendala? [Buat kunci API server](/id/guides/api-keys) menjelaskan
  alur ini secara langkah demi langkah, dan copilot dalam aplikasi dapat
  menyoroti setiap kontrol untuk Anda secara langsung.
</Tip>

Sepanjang panduan ini, ganti `sk_live_YOUR_API_KEY` dengan nilai yang
baru saja Anda salin. Kunci ini mengidentifikasi organisasi Anda secara otomatis, sehingga
Anda tidak perlu memasukkan ID organisasi di URL.

## Langkah 2: Buat agen

Agen menentukan cara AI menangani percakapan — Prompt, suara,
tier produk, alat, dan kelayakan widget.

<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>
  Tier produk: `spark` dioptimalkan untuk biaya, `bolt` untuk kecepatan, dan
  `storm-base` / `storm-extra` untuk kecerdasan pada Prompt yang kompleks. Lihat
  [Agen](/api-reference/agents#product-tiers-at-a-glance) untuk perbandingan
  lengkap.
</Tip>

## Langkah 3: Sediakan nomor telepon

Panggilan ini meminta nomor dari kumpulan demo ThunderPhone dan menetapkan
agen baru Anda sebagai penangan panggilan masuk. (Untuk membawa nomor Anda
sendiri dari penyedia VoIP, lihat [koneksi VoIP](/api-reference/voip-connections)
sebagai gantinya.)

<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>

Nomor baru Anda dimulai dengan `status="provisioning"` dan beralih ke
`active` dalam beberapa detik; saat Anda menutup browser, nomor tersebut
sudah siap menerima panggilan.

## Langkah 4 (opsional): Siapkan webhook

Untuk peristiwa real-time (perutean panggilan dinamis, pemrosesan setelah panggilan),
tambahkan endpoint webhook. Berlangganan hanya pada peristiwa yang Anda perlukan.

```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"]
  }'
```

Respons berisi `secret` yang hanya ditampilkan sekali — salin ke pengelola
secret Anda. Gunakan secret tersebut untuk memverifikasi header
`X-ThunderPhone-Signature` pada permintaan masuk (lihat
[ringkasan Webhooks](/id/webhooks/overview)).

## Langkah 5: Uji agen Anda

Hubungi nomor yang baru saja Anda sediakan. Agen menjawab, memperkenalkan
diri, dan mengikuti Prompt Anda.

Periksa panggilan setelah berakhir:

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

Telusuri panggilan tertentu untuk mengambil transkrip dan URL rekaman:

```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"
```

***

## Langkah berikutnya

<CardGroup cols={2}>
  <Card title="Tambahkan alat fungsi" icon="screwdriver-wrench" href="/id/tools/overview">
    Biarkan agen Anda memanggil API Anda selama percakapan.
  </Card>

  <Card title="Lakukan panggilan keluar" icon="arrow-up-right" href="/api-reference/outbound-calls">
    Picu panggilan dari kode Anda sendiri.
  </Card>

  <Card title="Tangani webhook" icon="bolt" href="/id/webhooks/overview">
    Tanggapi peristiwa panggilan secara real-time.
  </Card>

  <Card title="Referensi API lengkap" icon="book" href="/api-reference/introduction">
    Setiap endpoint publik, didokumentasikan.
  </Card>
</CardGroup>
