Diese Dokumentation beschreibt die allgemeine API von Thermengutscheine.at. Zur Nutzung der API ist eine API Key notwendig, der von der Firma "Webhotels" seinen Partnerunternehmen zur Verfügung gestellt wird. Bei Fragen wenden Sie sich bitte direkt Webhotels
Bei dieser API handelt es sich um ein REST-API (siehe dazu auch Wikipedia. Derzeit werden folgendene HTTP Methoden (Verbs) eingesetzt:
Alle REQUEST Urls beginnen mit der API Version (zB. v1), der anzusprechenden Ressource (zB. "coupon") und der durchzuführenden Aktion oder Teilressource (zB. "validate"). Hier einige Beispiel Url:
Folgende Dinge gilt es zu beachten:
Alle API Requests müssen mit Ihrem API-Token authentifiziert werden. Den API-Token erhalten sie von Thermengutscheine.at (siehe oben). Dieser Token ist:
Um nun einen Request zu authentifizieren, müssen Sie ihn lediglich in den HTTP Header als "Authorization: Token XYZ" schreiben, wobei XYZ für Ihren Token steht. Siehe folgendes Beispiel eines Requests:
GET /v1/api/version HTTP/1.1
Host: api.thermengutscheine.at
Authorization: Token ThisIsMySecriptToken1234
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Alle Rückgabewerte können sowohl als JSON als auch XML angefordert werden. Hier muss lediglich der HTTP Header "Accept" bei jedem Request entsprechend gesetzt werden.
Möchte man JSON Antworten haben, so wird der "Accept" Header bei jedem Request wie folgt gesetzt (siehe Beispiel):
GET /v1/api/version HTTP/1.1
Host: api.thermengutscheine.at
Authorization: Token ThisIsMySecriptToken1234
Accept: application/json
Die Antwort des obigen Requests würde dann wie folgt aussehen:
{
"result": {
"provider": "Thermengutscheine.at",
"version": "v1"
}
}
Möchte man XML Antworten haben, so wird der "Accept" Header bei jedem Request wie folgt gesetzt (siehe Beispiel):
GET /v1/api/version HTTP/1.1
Host: api.thermengutscheine.at
Authorization: Token ThisIsMySecriptToken1234
Accept: application/xml
Die Antwort des obigen Requests würde dann wie folgt aussehen:
<?xml version="1.0" encoding="utf-8"?>
<xml>
<result>
<provider>Thermengutscheine.at</provider>
<version>v1</version>
</result>
</xml>
Die API Ressource ist die einzige Ressource die auch ohne API Key angesprochen werden kann und bietet neben dieser Hilfe Seite einige Hilfs-Funktionen.
| Ressource | Beschreibung |
|---|---|
|
GET /v1/api/version |
Liefert einige Informationen zur API.
Beispiel-Rückgabe: {
"result": {
"provider": "Thermengutscheine.at",
"version": "v1"
}
}
|
Die Gutschein API dient zur Überprüfung und Einbuchung/Einlösung von Gutscheinen.
| Ressource | Beschreibung |
|---|---|
|
POST /v1/coupon/validate |
Dient zur Überprüfung eines Gutscheincodes auf Gültigkeit und liefert im Erfolgsfall Informationen über den Gutschein:
Parameter
Beispiel-Rückgabe: {
"result": {
"code": "1000000000000001",
"current_value": 9.90,
"price": 20,
"currency": "€",
"pin": true,
"pin_valid": true,
"valid_till": "2021-07-05"
}
}
|
|
POST /v1/coupon/useit |
Der Gutschein wird (sofern er gültig ist) mit dem angegeben Wert belastet und liefert im Erfolgsfall Informationen über den Gutschein:
Parameter
Beispiel-Rückgabe: {
"result": {
"log_id": 4711,
"used_value": -7.50,
"code": "1000000000000001",
"current_value": 9.90,
"price": 20,
"currency": "€",
"valid_till": "2021-07-05",
"einbuchung_cooldown": 8
}
}
|
|
GET /v1/coupon/log |
Listet alle Einbuchungen und Stornos des aktuellen Users des heutigen Tages auf.
Beispiel-Rückgabe: {
"result": [
{
"log_id": 1,
"event_type": "einbuchung.useit",
"code": "12345",
"price": 50,
"used_value": -0.2,
"date": "2024-10-03 19:31:54"
},
{
"log_id": 2,
"event_type": "einbuchung.storno",
"code": "12345",
"price": 50,
"used_value": 0.01,
"date": "2024-10-03 20:04:21"
}
]
}
|
|
POST /v1/coupon/storno |
Storniert eine erfolgte Einbuchung. Achtung: Stornos sind nur für Buchungen des selben Tages möglich.
Parameter
Beispiel-Rückgabe: {
"result": {
"log_id": "115",
"action": "storno",
"storno_value": 0.2,
"coupon": {
"code": "998577849939562",
"current_value": "0.20",
"price": 50,
"currency": "€",
"valid_till": "2021-07-28"
}
}
}
|
Die Eingabe des Gutschein-Pin Codes ist nur beim Einlösen (/v1/coupon/useit) über die Api notwendig. In ganz besonderen Fällen kann die Notwendigkeit der Eingabe des PIN-Codes aber für einen API-User deaktiviert werden (bitte bei Thermengutscheine.at nachfragen).
PIN Codes zum Gutschein wurden nachträglich eingeführt, dh. es sind bereits Gutscheine im Umlauf, die noch keinen PIN-Code besitzen. Bei diesen kann der PIN-Code "000000" (6 mal die Null) verwendet werden. Bei User die keinen PIN Code benötigen, wird der PIN immer ignoriert.
Bei der GS Überprüfung (/v1/coupon/validate) ergeben sich folgende Szenarian im Bezug auf den PIN:
code aber OHNE pin:
pin=false und pin_valid=truepin=true und pin_valid=truecode und mit pin:
pin=false und pin_valid=truepin=true und pin_valid=truepin=true und pin_valid=falseSollte ein Fehler auftreten, so wird dieser in folgendem Format übermittelt (Beispiel):
{
"error": 1234,
"message": "Fehlermeldungstext",
"data": "zusätzliche Daten zur Fehlermeldung"
}
Dabei sind die 3 bis 5-stellige Fehlernummer (`error`) und die Nachricht (`message`) Pflichtfelder und die Zusatzdaten (`data`) sind optional. Es können unter anderem folgende Fehler auftreten:
| Fehler | Beschreibung |
|---|---|
| 999 | Fehler beim verbuchen eines Coupons |
| 2051 | Sie wurden aufgrund zu vieler Gutschein-Überprüfungen blockiert. Hier wird zusätzlich zur Fehlermeldung auch separat (Feld `data`) die Uhrzeit mitgeben, ab wann wieder geprüft werden kann. |
| 2052 | Dieser Fehler kann mehrere Ursachen haben - bitte `message` beachten. z.B. Der Gutschein wurde bereits vollständig eingelöst oder die Nummer ist nicht gültig |
| 2053 | Die eingegebene Gutscheinnummer ist leider nicht gültig. |
| 2054 | Bitte geben Sie eine gültige Gutscheinnummer ein |
| 2055 | Bitte geben Sie einen gültigen PIN-Code ein |
| 2088 | GUTSCHEIN BITTE PER POST SCHICKEN! Bei dem Gutschein mit der Nummer XXXXX handelt es sich um einen Gutschein, der online nicht eingebucht werden kann. Wenn es sich um einen der hier abgebildeten Gutscheinarten handelt, ist der Gutschein nach wie vor gültig und kann zur Abrechnung per Post an WEBHOTELS geschickt werden. |
| 11001 | Missing post parameter: %s |
| 11002 | Missing get parameter: %s |
Um Missbrauch der API vorzubeugen und das System abzusichern, wird folgender Prozess verwendet:
Bei unserem Partner Blackhawk setzen wir bei einigen unserer Gutscheine ein One-Step Verfahren ein. Dabei ist im Barcode des Gutscheins auch noch unser GTIN-13 Code und 3 Nullen integriert. Der Barcode ist dabei wie folgt aufgebaut:
Bei diesen Gutscheinen ist es möglich, sowohl den vollen Barcode laut Barcode Scanner (32 Stellen) als auch nur den GS Code (die letzten 16 Stellen) zu übermitteln. Die API ignoriert bei diesen (und nur bei diesen) Gutscheinen die ersten 16 Stellen und liefert im Erfolgsfall nur den eigentlichen GS Code zurück.
Das bedeutet, dass ein validate/useit sowohl gegen den Code "91900010173410001234567890123456" als auch gegen den Code "1234567890123456" das selbe Ergebnis liefert:
{
"result": {
"code": "1234567890123456",
"current_value": 9.90,
"price": 20,
"currency": "€",
"pin": true,
"pin_valid": true,
"valid_till": "2025-07-05"
}
}