Erste Schritte mit der API
Die TAYO.pro-API gibt Ihrer eigenen Software Zugriff auf Ihre Projekte, Angebote, Rechnungen und Erinnerungen. Sie ist dafür gedacht, von einem Server aufgerufen zu werden, niemals aus einem Browser: Ein API-Schlüssel in einem JavaScript-Bundle ist ein veröffentlichter Schlüssel.
Was Sie vorher brauchen
Abschnitt betitelt „Was Sie vorher brauchen“Die API ist ein kostenpflichtiges Zusatzmodul zusätzlich zu einem
PLUS-Abonnement. Ohne dieses antwortet jeder Aufruf mit 403 addon_required.
Schlüssel werden unter Einstellungen → API erstellt, und nur eine Administratorin oder ein Administrator darf das tun.
Ihre zwei Schlüssel
Abschnitt betitelt „Ihre zwei Schlüssel“Jedes Unternehmen erhält zwei Schlüssel, und das Präfix entscheidet über alles:
| Schlüssel | Wirkung |
|---|---|
tay_live_… |
Wirkt auf Ihre echten Daten. |
tay_test_… |
Durchläuft die gesamte Kette und gibt dann eine Beispielantwort zurück, ohne etwas zu verändern. |
Der Modus steht also weder in der URL noch im Rumpf noch in einem Header — ausschliesslich im Schlüssel, den Sie vorlegen.
Einen Aufruf authentifizieren
Abschnitt betitelt „Einen Aufruf authentifizieren“Der Schlüssel gehört in den Authorization-Header und sonst nirgendwohin — ein
als Query-Parameter übergebener Schlüssel wird mit 401 abgewiesen, auch wenn
er gültig ist.
curl https://staging.tayo.pro/api/v1/ping \ -H "Authorization: Bearer tay_live_ihr_schluessel"Die Basis-URL lautet https://staging.tayo.pro/api/v1.
Der Testmodus
Abschnitt betitelt „Der Testmodus“Eine Anfrage mit einem tay_test_…-Schlüssel durchläuft genau dieselbe Kette
wie eine echte: Authentifizierung, Kontingentzählung und dieselbe
Validierung von Rumpf und Parametern. Dann hält sie vor der Geschäftslogik an.
Im Testmodus gilt konkret:
- Es wird nichts geschrieben und nichts gelöscht.
- Keine E-Mail, kein PDF und kein Aufruf an Tayo wird ausgelöst.
- Die Antwort entspricht dem Antwortschema der Produktion.
- IDs sind zwischen Aufrufen stabil —
prj_test_1bleibtprj_test_1— damit Ihre Tests sich darauf stützen können.
Das macht den Produktivstart unspektakulär: Sie haben die genaue Form jeder Antwort bereits gesehen.
Einen Fehlerfall mit Tay-Test-Scenario erzwingen
Abschnitt betitelt „Einen Fehlerfall mit Tay-Test-Scenario erzwingen“Wer ernsthaft integriert, muss seine Fehlerzweige durchspielen können. Der
Header Tay-Test-Scenario wählt die Antwort, die der Testmodus liefern soll:
| Szenario | Was Sie erhalten |
|---|---|
success |
Der Normalfall. Das ist die Vorgabe. |
not_found |
Die angeforderte Ressource existiert nicht. |
validation_error |
Der Rumpf wird abgewiesen, mit Detail pro Feld. |
send_failed |
Der Versand an die Kundin oder den Kunden ist fehlgeschlagen. |
quota_exceeded |
Ihr Monatskontingent ist aufgebraucht. |
Jeder Endpunkt akzeptiert eine Teilmenge davon — send_failed ergibt bei einem
Lesezugriff keinen Sinn. Ein Wert ausserhalb dieser Teilmenge antwortet 400.
In den Produktivbetrieb wechseln
Abschnitt betitelt „In den Produktivbetrieb wechseln“Tauschen Sie den Schlüssel. Mehr nicht.
URLs, Anfragerümpfe, Antwortschemata und Fehlercodes sind in beiden Modi identisch — genau dafür gibt es den Testmodus.
Wie Fehler aussehen
Abschnitt betitelt „Wie Fehler aussehen“Jede fehlschlagende Anfrage liefert dieselbe Hülle:
{ "error": { "code": "invalid_argument", "message": "The request failed validation.", "details": [ { "field": "amount", "code": "invalid_type", "message": "Expected number" } ] }}details erscheint nur bei einem Validierungsfehler.
| Status | code |
Wann |
|---|---|---|
| 400 | invalid_argument |
Die Anfrage hat die Validierung nicht bestanden. |
| 400 | failed_precondition |
Im aktuellen Zustand nicht möglich. |
| 401 | unauthenticated |
Schlüssel fehlt, ist widerrufen oder falsch übergeben. |
| 403 | permission_denied |
Dieser Schlüssel darf das nicht. |
| 403 | addon_required |
Das API-Modul ist für das Unternehmen nicht aktiv. |
| 404 | not_found |
Die Ressource existiert nicht. |
| 409 | already_exists |
Die Ressource existiert bereits. |
| 409 | delivery_in_flight |
Die Zustellung wartet bereits auf einen weiteren Versuch. |
| 409 | endpoint_deleted |
Der Endpunkt dieser Zustellung existiert nicht mehr. |
| 409 | endpoint_disabled |
Der Endpunkt dieser Zustellung ist deaktiviert. |
| 409 | retry_limit_reached |
Die Zustellung hat ihr Limit für manuelle Wiederholungen erreicht. |
| 429 | rate_limited |
Zu viele Anfragen pro Minute — langsamer machen und erneut versuchen. Siehe Nutzungsgrenzen. |
| 429 | quota_exceeded |
Das Monatskontingent und seine Überschreitungstoleranz sind aufgebraucht. Siehe Nutzungsgrenzen. |
| 500 | internal |
Ein Fehler auf unserer Seite. |
| 503 | unavailable |
Vorübergehend nicht verfügbar. |
Die Meldungen sind ausschliesslich auf Englisch und bleiben es: Ein
Programm liest den code, und eine Übersetzung der Prosa würde nur erschweren,
wonach es tatsächlich sucht.
Weicht eine Antwort von dem ab, was die Referenz beschreibt, ist das ein Fehler und seine Behebung ist im Modul enthalten: siehe Support.