# Bubble

**API Connector** di Bubble mengirimkan panggilan dari server Bubble, jadi di sini diperlukan kunci 'Server-only', bukan kunci publik. Permintaan di bawah ini dikirim ke produksi persis seperti yang dibuat oleh panggilan; langkah-langkah di Bubble ditulis berdasarkan panduan Bubble per 2026-09-17, dan API Connector itu sendiri disebutkan dalam paket gratis.

Pertama, buat kunci seperti yang dijelaskan di bagian [Kunci untuk Otomatisasi](/integrations/#ключ-для-автоматизації), dengan cakupan `chart`.

## 1. Buat Koleksi

Di plugin API Connector, klik **+ New** dan isi koleksi:

- **Collection name**: `AstroWay`. Panduan Bubble memperingatkan bahwa nama koleksi masuk ke kode klien aplikasi, jadi jaga agar tetap sederhana.
- **Authentication**: **Private key in header**, nama header `X-Api-Key`, nilainya adalah kunci kamu.

Jika kamu membiarkan **None or self-handled**, tambahkan kunci di **Shared headers for all calls** dengan tombol **+ Add a shared header** dan centang **Private** padanya. Dalam kedua kasus, kunci tetap berada di server.

<Aside type="caution" title="Jangan Pernah Meletakkan Kunci di Body">
Bubble mendokumentasikan Body sebagai client safe: nilainya dikirim ke browser pengunjung selama panggilan. URL tidak masuk ke sana, dan header dengan centang **Private** juga tidak. Kunci yang dimasukkan ke dalam body JSON sudah menjadi kunci yang dipublikasikan.
</Aside>

## 2. Tambahkan Panggilan

Tambahkan panggilan di dalam koleksi dan isi:

- **Call name**: `Natal chart`.
- **Use as**: **Action** untuk workflow, **Data**, jika halaman membaca data secara langsung.
- **Method**: `POST`.
- **URL**:

  ```
  https://api.astroway.info/v1/chart
  ```

- **Body type**: **JSON**.
- **Body**: JSON di bawah ini. Kurung sudut adalah sintaks parameter di Bubble, dan masing-masing membuat entri di bawah body.

```json
{
  "date": "<date>",
  "time": "<time>",
  "timezone": "<timezone>",
  "latitude": "<latitude>",
  "longitude": "<longitude>"
}
```

Di bawah body, **hapus centang Private** dari kelima parameter agar aplikasi dapat mengaturnya, dan tentukan nilai dari tabel sebagai nilai default. Selanjutnya, klik **Initialize call**.

| Parameter | Nilai untuk Inisialisasi |
|---|---|
| `date` | `1990-05-15` |
| `time` | `14:30:00` |
| `timezone` | `Europe/Kyiv` |
| `latitude` | `50.45` |
| `longitude` | `30.52` |

Inisialisasi adalah apa yang mengajarkan Bubble bentuk respons, dan panduan meminta untuk menggunakan data contoh untuk itu, yaitu kelima nilai ini. Respons yang benar berisi `ok` dengan nilai true dan objek `data` dengan `planets`, `houses`, dan `input`.

Setelah menambahkan atau mengganti nama parameter, inisialisasi harus diulang: skema respons diingat pada langkah ini.

## 3. Baca Respons

Setelah inisialisasi, Bubble menampilkan bidang respons dengan tipe dan kotak centang inklusi. Tiga nilai paling populer:

- **Ascendant**: `data > houses > ascendant`.
- **Matahari**: entri pertama `data > planets`, `longitude`-nya.
- **Bulan**: entri kedua, `longitude`-nya.
- **Offset yang digunakan**: `data > input > timezoneOffset`, untuk contoh di atas adalah `4`, karena Kyiv pada tanggal tersebut menggunakan UTC+4.

Zodiak adalah bujur, dibagi 30 dan dibulatkan ke bawah, sebagai indeks dalam daftar dua belas nama. Dalam ekspresi: bagi `data's houses's ascendant` dengan 30, ambil bagian bilangan bulatnya dan temukan angka tersebut dalam option set atau dalam daftar dua belas zodiak. Sebagai contoh, Ascendant `159.26` menghasilkan `5`, yaitu Virgo.

## Kesalahan

Centang **Include errors in response &amp; allow workflow actions to continue** pada panggilan jika kamu ingin menangani kegagalan dalam workflow, bukan menghentikannya. Bubble menyatakan bahwa mengaktifkan opsi ini setelah inisialisasi mengubah format respons, jadi inisialisasi harus diulang.

- **`400 INVALID_FIELD` dengan `timezone` di `details`**: zona kosong, ini adalah singkatan seperti `EST` atau bukan nama zona.
- **`400` dengan `date` atau `time` di `details`**: format bukan `YYYY-MM-DD` / `HH:MM:SS`. Operator `:formatted as` pada tanggal memperbaikinya sebelum panggilan.
- **`403 ENDPOINT_NOT_IN_SCOPE`**: cakupan kunci tidak memiliki `chart`.
- **`429 KEY_BUDGET_EXHAUSTED`**: kunci telah menghabiskan anggarannya sendiri; tingkatkan di dashboard.

<Aside type="note">
Bubble mengirimkan panggilan dari infrastruktur bersama, jadi alamatnya sama dengan aplikasi Bubble lainnya. Batas kami dihitung per kunci, bukan per alamat, jadi ini tidak menghabiskan kuota kamu. API tidak melakukan geocoding: koordinat diambil dari bidang kamu sendiri atau dari layanan geocoding yang kamu miliki kuncinya.
</Aside>
