# Bubble

**API Connector** in Bubble sendet Aufrufe von Bubble-Servern, daher wird hier ein "Nur-Server"-Schlüssel und kein öffentlicher Schlüssel benötigt. Die untenstehende Anfrage wird genau so an die Produktion gesendet, wie sie vom Aufruf erstellt wird; die Schritte in Bubble sind gemäß dem Bubble-Handbuch vom 17.09.2026 geschrieben, und der API Connector selbst ist im kostenlosen Tarif enthalten.

Erstelle zuerst einen Schlüssel, wie im Abschnitt [Schlüssel für die Automatisierung](/integrations/#ключ-для-автоматизації) beschrieben, mit dem Bereich `chart`.

## 1. Erstelle eine Kollektion

Klicke im API Connector-Plugin auf **+ New** und fülle die Kollektion aus:

- **Collection name**: `AstroWay`. Das Bubble-Handbuch warnt, dass der Kollektionsname in den Client-Code der Anwendung gelangt, also halte ihn einfach.
- **Authentication**: **Private key in header**, Header-Name `X-Api-Key`, Wert ist dein Schlüssel.

Wenn du **None or self-handled** wählst, füge den Schlüssel unter **Shared headers for all calls** mit der Schaltfläche **+ Add a shared header** hinzu und aktiviere das Kontrollkästchen **Private**. In beiden Fällen bleibt der Schlüssel auf dem Server.

<Aside type="caution" title="Lege den Schlüssel niemals in den Body">
Bubble dokumentiert den Body als client safe: seine Werte werden während des Aufrufs an den Browser des Besuchers gesendet. Die URL wird nicht dorthin gesendet, und ein Header mit dem Kontrollkästchen **Private** ebenfalls nicht. Ein in den JSON-Body eingefügter Schlüssel ist bereits ein veröffentlichter Schlüssel.
</Aside>

## 2. Füge einen Aufruf hinzu

Füge einen Aufruf innerhalb der Kollektion hinzu und fülle ihn aus:

- **Call name**: `Natal chart`.
- **Use as**: **Action** für den Workflow, **Data**, wenn die Seite Daten direkt liest.
- **Method**: `POST`.
- **URL**:

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

- **Body type**: **JSON**.
- **Body**: Das JSON unten. Die spitzen Klammern sind die Parametersyntax in Bubble, und jede von ihnen erstellt einen Eintrag unter dem Body.

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

Unter dem Body **deaktiviere das Kontrollkästchen Private** für alle fünf Parameter, damit die Anwendung sie festlegen kann, und gib die Werte aus der Tabelle als Standardwerte an. Klicke dann auf **Initialize call**.

| Parameter | Wert für die Initialisierung |
|---|---|
| `date` | `1990-05-15` |
| `time` | `14:30:00` |
| `timezone` | `Europe/Kyiv` |
| `latitude` | `50.45` |
| `longitude` | `30.52` |

Die Initialisierung ist das, was Bubble die Form der Antwort lehrt, und das Handbuch bittet darum, dafür Beispieldaten zu verwenden, welche diese fünf Werte sind. Eine korrekte Antwort enthält `ok` mit dem Wert true und ein `data`-Objekt mit `planets`, `houses` und `input`.

Nach dem Hinzufügen oder Umbenennen eines Parameters muss die Initialisierung wiederholt werden: Das Antwortschema wird genau in diesem Schritt gespeichert.

## 3. Lies die Antwort

Nach der Initialisierung zeigt Bubble die Antwortfelder mit Typ und Aktivierungshäkchen an. Die drei beliebtesten Werte:

- **Aszendent**: `data > houses > ascendant`.
- **Sonne**: der erste Eintrag `data > planets`, seine `longitude`.
- **Mond**: der zweite Eintrag, seine `longitude`.
- **Verwendeter Offset**: `data > input > timezoneOffset`, für das obige Beispiel ist dies `4`, da Kiew an diesem Datum UTC+4 hatte.

Das Zeichen ist die Länge, geteilt durch 30 und abgerundet, als Index in einer Liste von zwölf Namen. Im Ausdruck: teile `data's houses's ascendant` durch 30, nimm den ganzzahligen Teil und finde die Zahl in einem Option Set oder in einer Liste von zwölf Zeichen. Zum Beispiel ergibt der Aszendent `159.26` `5`, also Jungfrau.

## Fehler

Aktiviere das Kontrollkästchen **Include errors in response &amp; allow workflow actions to continue** für den Aufruf, wenn du Fehler im Workflow verarbeiten möchtest, anstatt ihn zu stoppen. Bubble weist darauf hin, dass das Umschalten dieser Option nach der Initialisierung das Antwortformat ändert, daher muss die Initialisierung wiederholt werden.

- **`400 INVALID_FIELD` mit `timezone` in `details`**: die Zeitzone ist leer, eine Abkürzung wie `EST` oder kein Zonenname.
- **`400` mit `date` oder `time` in `details`**: das Format ist nicht `YYYY-MM-DD` / `HH:MM:SS`. Der Operator `:formatted as` auf dem Datum korrigiert dies vor dem Aufruf.
- **`403 ENDPOINT_NOT_IN_SCOPE`**: der Schlüsselbereich enthält kein `chart`.
- **`429 KEY_BUDGET_EXHAUSTED`**: der Schlüssel hat sein Budget aufgebraucht; erhöhe es im Dashboard.

<Aside type="note">
Bubble sendet Aufrufe von einer gemeinsamen Infrastruktur, daher ist ihre Adresse mit anderen Bubble-Anwendungen gemeinsam. Unsere Limits werden pro Schlüssel und nicht pro Adresse berechnet, sodass dies dein Kontingent nicht aufbraucht. Die API geocodiert nicht: Koordinaten werden aus deinen eigenen Feldern oder von einem Geocoding-Dienst bezogen, für den du einen Schlüssel hast.
</Aside>
