# Bubble

**API Connector** in Bubble verstuurt oproepen vanaf de Bubble-servers, dus hier is een 'Alleen server'-sleutel nodig, geen publieke. De onderstaande aanvraag wordt naar productie gestuurd precies zoals de oproep deze samenstelt; de stappen in Bubble zijn geschreven volgens de Bubble-handleiding per 2026-09-17, en de API Connector zelf is opgenomen in het gratis abonnement.

Maak eerst een sleutel aan, zoals beschreven in het gedeelte [Sleutel voor automatisering](/integrations/#ключ-для-автоматизації), met het bereik `chart`.

## 1. Maak een collectie aan

Klik in de API Connector-plugin op **+ New** en vul de collectie in:

- **Collection name**: `AstroWay`. De Bubble-handleiding waarschuwt dat de naam van de collectie in de clientcode van de applicatie terechtkomt, dus houd deze eenvoudig.
- **Authentication**: **Private key in header**, headernaam `X-Api-Key`, waarde is jouw sleutel.

Als je **None or self-handled** laat staan, voeg dan de sleutel toe aan **Shared headers for all calls** met de knop **+ Add a shared header** en vink **Private** aan. In beide gevallen blijft de sleutel op de server.

<Aside type="caution" title="Plaats de sleutel nooit in de Body">
Bubble documenteert de Body als client safe: de waarden ervan worden tijdens de oproep naar de browser van de bezoeker gestuurd. De URL gaat daar niet heen, en een header met het vinkje **Private** ook niet. Een sleutel die in de JSON-body is geplaatst, is al een gepubliceerde sleutel.
</Aside>

## 2. Voeg een oproep toe

Voeg een oproep toe binnen de collectie en vul deze in:

- **Call name**: `Natal chart`.
- **Use as**: **Action** voor een workflow, **Data**, als de pagina direct gegevens leest.
- **Method**: `POST`.
- **URL**:

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

- **Body type**: **JSON**.
- **Body**: De JSON hieronder. Hoekige haken zijn de parametersyntaxis in Bubble, en elk ervan creëert een invoer onder de body.

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

Onder de body, **vink Private uit** voor alle vijf parameters, zodat de applicatie ze kan instellen, en geef de waarden uit de tabel op als standaardwaarden. Klik vervolgens op **Initialize call**.

| Parameter | Waarde voor initialisatie |
|---|---|
| `date` | `1990-05-15` |
| `time` | `14:30:00` |
| `timezone` | `Europe/Kyiv` |
| `latitude` | `50.45` |
| `longitude` | `30.52` |

Initialisatie is wat Bubble de vorm van het antwoord leert, en de handleiding vraagt om hiervoor voorbeeldgegevens te gebruiken, wat deze vijf waarden zijn. Een correct antwoord bevat `ok` met de waarde true en een `data`-object met `planets`, `houses` en `input`.

Na het toevoegen of hernoemen van een parameter moet de initialisatie worden herhaald: het antwoordschema wordt precies bij deze stap opgeslagen.

## 3. Lees het antwoord

Na initialisatie toont Bubble de antwoordvelden met type en een vinkje voor opname. De drie meest populaire waarden:

- **Ascendant**: `data > houses > ascendant`.
- **Zon**: de eerste invoer van `data > planets`, de `longitude` ervan.
- **Maan**: de tweede invoer, de `longitude` ervan.
- **Gebruikte offset**: `data > input > timezoneOffset`, voor het bovenstaande voorbeeld is dit `4`, omdat Kyiv op die datum UTC+4 aanhield.

Het teken is de lengtegraad, gedeeld door 30 en naar beneden afgerond, als een index in een lijst van twaalf namen. In de uitdrukking: deel `data's houses's ascendant` door 30, neem het gehele deel en zoek het getal in een option set of in een lijst van twaalf tekens. Voor het voorbeeld geeft Ascendant `159.26` `5`, oftewel Maagd.

## Fouten

Vink bij de oproep **Include errors in response &amp; allow workflow actions to continue** aan, als je storingen in de workflow wilt verwerken in plaats van deze te stoppen. Bubble merkt op dat het wisselen van deze optie na initialisatie het antwoordformaat verandert, dus de initialisatie moet worden herhaald.

- **`400 INVALID_FIELD` met `timezone` in `details`**: de zone is leeg, het is een afkorting zoals `EST` of geen zonenaam.
- **`400` met `date` of `time` in `details`**: het formaat is niet `YYYY-MM-DD` / `HH:MM:SS`. De operator `:formatted as` op de datum corrigeert dit vóór de oproep.
- **`403 ENDPOINT_NOT_IN_SCOPE`**: het bereik van de sleutel bevat geen `chart`.
- **`429 KEY_BUDGET_EXHAUSTED`**: de sleutel heeft zijn budget uitgeput; verhoog dit in het dashboard.

<Aside type="note">
Bubble verstuurt oproepen vanaf een gedeelde infrastructuur, dus het adres ervan is gedeeld met andere Bubble-applicaties. Onze limieten worden per sleutel geteld, niet per adres, dus dit verbruikt jouw quotum niet. De API geocodeert niet: coördinaten worden gehaald uit jouw eigen velden of uit een geocoderingdienst waarvoor je een sleutel hebt.
</Aside>
