— Die deutsche Version finden Sie hier —
The WebSync has a REST API interface that allows customers to manage various aspects of their series.
Besides indexing the series, selected settings of the series can be displayed and edited. This allows the customer, for example, to automatically upload new content to the sync server and then index the relevant series(es) via the REST API.
To be able to use the REST API, you must first request an API key and an API secret from Support. You must also be able to send GET and POST commands to the server using your programming language.
REST API
The base URL of the REST API is: https://websync.simsync.de/api/v1/
The endpoints are based on the following scheme: <Area>/<Action>[/<id>]?key=<api-key>[&fields=<field-list>]
Currently the following endpoints are available
Area | Action | Id | Key | Fields | Method | Description |
---|---|---|---|---|---|---|
games | list | unused | required | unused | GET | List supported games |
series | list | unused | required | optional | GET | List series |
series | view | required | required | optional | GET | Show series |
series | edit | required | required | unused | POST | Edit series |
series | index | required | required | optional | GET | Fetch series indexing status |
series | index | required | required | unused | POST | Index series |
Example: Show 571 series.
Endpoint: series/view/571
Full url: https://websync.simsync.de/api/v1/series/view/571?key=<use-your-key-here>
On each query or update of data, a JSON object with the following structure is returned:
{ "success":true, "msg":"", "data": {} }
Property | Type | Description |
---|---|---|
success | bool | True: Query successful False: Query failed |
msg | string | Success = false: The error message, otherwise empty. |
data | object|array | Success = true: The returned data of the query as JSON object or array. Otherwise an empty object. |
Games
A list of the games can be found at the following endpoint: games/list?key=<api-key>
The list is built as a JSON object, where the key contains the game ID and the value contains the name of the game.
Example:
https://websync.simsync.de/api/v1/games/list?key=<use-your-key-here>
{ "success":true, "msg":"", "data":{ "acc":"Assetto Corsa Competizione (requires SimSync PRO 8.0.3+)", "actc":"ACTC Simulador de Turismo Carretera", "actc3":"ACTC v3 Simulador de Turismo Carretera", "arca":"ARCA Sim Racing", ... } }
Series
List
Endpoint: series/list?key=<api-key>
Example:
https://websync.simsync.de/api/v1/series/list?key=<use-your-key-here>
{ "success":true, "msg":"", "data": [ { "id": 8098, "name": "Series 1", "enabled": 1 }, { "id": 8298, "name": "Series 2", "enabled": 0 }, ] }
Fields
Field name | Type | Description |
---|---|---|
id | integer | Series ID |
seriesname | string | Series name |
game | string | Game abbreviation |
enabled | integer | Series enabled/disabled (1 / 0) |
pw | string | Serial password |
size | integer | Series size [bytes] |
indexdate | datetime | Date/time (UTC) of last indexing |
steamids | array | List of SteamIDs |
Editable fields
Field name | Type | Format |
---|---|---|
enabled | integer | 0 or 1 |
pw | string | Alphanumeric incl. special characters; 2 to 255 characters; |
steamids | string | Max. 3000 comma-separated SteamID64 Ids |
Edit series
While the previous two examples still worked with the HTTP GET method, all actions where data is changed, such as indexing or editing series, must be performed via HTTP POST.
The structure of the endpoints is the same as in the two previous examples: <Area>/<Action>[/<id>]?key=<api-key>
. So e.g. for changing/editing the series 571: series/edit/571?key=<use-you-key-here>
.
In the “body” of the POST method, the following data must be passed to the server as a URL-encoded query string, so that this way it can be ensured that the passing data really comes from the correct sender and not from a 3rd person who intercepted the API key.
data=<url-encoded data>&key=<api-key>&checksum=<url-encoded checksum>
Data is associative array (php) or an object (JS).
PHP example: $data = array('id' => 571, 'pw' => 'NewSeriesPassword', 'enabled' => 0);
JS example: var data = {'id': 571, 'pw': 'NewSeriesPassword', 'enabled': 0};
The checksum is a Sha256 hash from the following Url-encoded query:
data=<url encoded data>&key=<api-key>&secret=<api-secret>
Here is an example of how the whole thing is done in PHP:
<?php // define url to post the data to $url = 'https://websync.simsync.de/api/v1/series/index/571?key=<use-you-key-here>'; // Setup array for checksum $check = array( Â 'data' => $data, Â 'key' => $api_key, 'secret' => $api_secret ); // calculate sha256 checksum $checksum = hash('sha256', http_build_query($check), false); // create url-encode query string for post $post_data = http_build_query( array( 'data' => $data, 'key' => $api_key, Â 'checksum' => $checksum ) ); // Setup curl to send the post request $crl = curl_init(); curl_setopt($crl, CURLOPT_URL, $url); curl_setopt($crl, CURLOPT_POST, true); curl_setopt($crl, CURLOPT_POSTFIELDS, $post_data); curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false); // Can/Should be true for https connections // Post the data and get the result from the server $result = curl_exec($crl); curl_close($crl); ?>
Index series
Current indexing status
To query the current indexing status (and you should always do this BEFORE indexing), use the following endpoint via GET: series/index/<series-id>?key=<api-key>
Unless an error occurs, you will receive a response in the form:
{ "success":true, "msg":"", "data":{ "id":3385, "indexdate":"2019-10-23 13:59:54", "indexstatus":2, "indexresult":"OK" } }
Field name | Meaning |
id | Series ID of the queried series |
indexdate | UTC Date of the last indexing |
indexstatus | 0 = Not yet indexed 1 = 1st indexing successful 2 = 2nd indexing incl. checksum successful 3 = Indexing failed |
indexresult | indexstatus 0: Empty indexstatus 1: First run complete indexstatus 2: Finished indexstatus 3: Error message |
Index series
The indexing of a series is started by post. The endpoint for this is: /series/index/<series-id>?key=<api-key>
In the “body” of the message a string for the “changelog” must be passed, which may also be empty.
data=<url-encoded data>&key=<api-key>&checksum=<url-encoded checksum>
Data is associative array (php) or an object (JS).
PHP example: $data = array('id' => 571, 'changelog' => 'New skin added');
JS example:
var data = {'id': 571, 'changelog': 'New skin added'};
The checksum is a Sha256 hash from the following Url-encoded query:
data=<url encoded data>&key=<api-key>&secret=<api-secret>
As a response you get a similar answer as when querying the index status.
{ "success":true, "msg":"", "data":{ "id":3385, "indexdate":"2019-10-23 13:59:54", "indexstatus":2, "indexresult":"OK" } }
— The english version can be found here —
Der WebSync hat eine REST API Schnittstelle, die es dem Kunden ermöglicht verschiedene Aspekte seiner Serien zu verwalten.
Neben dem Indizieren der Serien, können ausgewählte Einstellungen der Serien angezeigt und bearbeitet werden. Dadurch ist es dem Kunden z.B. möglich, automatisiert neuen Content auf den Sync Server zu laden und die betroffene(n) Serie(n) in Anschluß per REST API to indizieren.
Um die REST API nutzen zu können, müssen Sie zuvor beim Support einen API-Key und einen API-Secret beantragen. Zudem müssen Sie in der Lage sein über Ihre Programmiersprache GET und POST Befehle an den Server zu senden.
REST API
Die Basis URL der REST API lautet: https://websync.simsync.de/api/v1/
Die Endpunkte basieren auf folgendem Schema: <Bereich>/<Aktion>[/<id>]?key=<api-key>[&fields=<field-list>]
Aktuell sind die folgenden Endpunkte verfügbar
Bereich | Aktion | Id | Key | Fields | Methode | Beschreibung |
---|---|---|---|---|---|---|
games | list | ungenutzt | erforderlich | ungenutzt | GET | Unterstützte Spiele auflisten |
series | list | ungenutzt | erforderlich | optional | GET | Serien auflisten |
series | view | erforderlich | erforderlich | optional | GET | Serie anzeigen |
series | edit | erforderlich | erforderlich | ungenutzt | POST | Serie bearbeiten |
series | index | erforderlich | erforderlich | optional | GET | Serien Indizierungsstatus abfragen |
series | index | erforderlich | erforderlich | ungenutzt | POST | Serie indizieren |
Beispiel: Anzeige der Serie 571.
Endpunkt: series/view/571
Vollständige Url: https://websync.simsync.de/api/v1/series/view/571?key=<use-your-key-here>
Bei jeder Abfrage oder Updaten von Daten, wird ein JSON Objekt mit der folgenden Struktur zurückgegeben:
{ "success":true, "msg":"", "data": {} }
Eigenschaft | Typ | Beschreibung |
---|---|---|
success | bool | True: Abfrage erfolgreich False: Abfrage fehlgeschlagen |
msg | string | Success = false: Die Fehlermeldung, ansonsten leer. |
data | object|array | Success = true: Die zurückgegebenen Daten der Abfrage als JSON Object oder Array. Ansonsten ein leeres Objekt. |
Spiele
Eine Liste der Spiele kann unter folgendem Endpunkt abgerufen werden: games/list?key=<api-key>
Die Liste ist als JSON Objekt aufgebaut, das der Schlüssel die Spiel ID und der Wert den jeweiligen Namen des Spiels entält.
Beispiel:
https://websync.simsync.de/api/v1/games/list?key=<use-your-key-here>
{ "success":true, "msg":"", "data":{ "acc":"Assetto Corsa Competizione (requires SimSync PRO 8.0.3+)", "actc":"ACTC Simulador de Turismo Carretera", "actc3":"ACTC v3 Simulador de Turismo Carretera", "arca":"ARCA Sim Racing", ... } }
Serien
Auflisten
Endpunkt: series/list?key=<api-key>
Beispiel:
https://websync.simsync.de/api/v1/series/list?key=<use-your-key-here>
{ "success":true, "msg":"", "data": [ { "id": 8098, "name": "Series 1", "enabled": 1 }, { "id": 8298, "name": "Series 2", "enabled": 0 }, ] }
Felder
Feldname | Typ | Beschreibung |
---|---|---|
id | integer | Serien ID |
seriesname | string | Name der Serie |
game | string | Kürzel des Spiels |
enabled | integer | Serie aktiviert/deaktiviert (1 / 0) |
pw | string | Serienkennwort |
size | integer | Größe der Serie [bytes] |
indexdate | datetime | Datum/Zeit (UTC) der letzten Indizierung |
steamids | array | Liste der SteamIDs |
Editierbare Felder
Feldname | Typ | Format |
---|---|---|
enabled | integer | 0 oder 1 |
pw | string | Alphanumerisch incl. Sonderzeichen; 2 bis 255 Zeichen; |
steamids | string | Max. 3000 komma-separierte SteamID64 Ids |
Serie bearbeiten
Während die beiden vorigen Beispiele noch mit der HTTP GET Methode funktioniert haben, müssen sämtliche Aktionen, bei denen Daten geändert werden, wie z.B. Serie indizieren oder bearbeiten, per HTTP POST ausgeführt werden.
Der Aufbau der Endpunkte ist dabei so wie bei den beiden vorigen Beipielen: <Bereich>/<Aktion>[/<id>]?key=<api-key>
. Also z.B. für das ändern/bearbeiten der Serie 571: series/edit/571?key=<use-you-key-here>
.
Im “Körper” der POST Methode müssen die folgenden Daten als URL-kodierte Abfragezeichenfolge an den Server übergeben werden, damit auf diese Weise sichergestellt werden kann, das die übergebenden Daten wirklich vom richtigen Absender kommen und nicht von einer 3. Person, die den Api-Key abgefangen hat.
data=<url-encoded data>&key=<api-key>&checksum=<url-encoded checksum>
Data ist assoziatives Array (php) oder ein Object (JS).
Beispiel PHP: $data = array('id' => 571, 'pw' => 'NewSeriesPassword', 'enabled' => 0);
Beipiel JS: var data = {'id': 571, 'pw': 'NewSeriesPassword', 'enabled': 0};
Die Checksumme ist ein Sha256 Hash aus der folgenden Url-kodierten Abfrage:
data=<url encoded data>&key=<api-key>&secret=<api-secret>
Hier ein Beispiel wie das Ganze in PHP gemacht wird:
<?php // define url to post the data to $url = 'https://websync.simsync.de/api/v1/series/index/571?key=<use-you-key-here>'; // Setup array for checksum $check = array( Â 'data' => $data, Â 'key' => $api_key, 'secret' => $api_secret ); // calculate sha256 checksum $checksum = hash('sha256', http_build_query($check), false); // create url-encode query string for post $post_data = http_build_query( array( 'data' => $data, 'key' => $api_key, Â 'checksum' => $checksum ) ); // Setup curl to send the post request $crl = curl_init(); curl_setopt($crl, CURLOPT_URL, $url); curl_setopt($crl, CURLOPT_POST, true); curl_setopt($crl, CURLOPT_POSTFIELDS, $post_data); curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false); // Can/Should be true for https connections // Post the data and get the result from the server $result = curl_exec($crl); curl_close($crl); ?>
Serie indizieren
Aktueller Indizierungsstatus
Um den aktuellen Indizierungstatus abzufragen (und das sollte man VOR dem Indizieren immer erstmal tun), verwenden sie per GET den folgenden Endpunkt: series/index/<series-id>?key=<api-key>
Sofern kein Fehler auftritt erhalten Sie eine Antwort in der Form:
{ "success":true, "msg":"", "data":{ "id":3385, "indexdate":"2019-10-23 13:59:54", "indexstatus":2, "indexresult":"OK" } }
Feldname | Bedeutung |
id | Serien-ID der abgefragten Serie |
indexdate | UTC Dateum der letzten Indizierung |
indexstatus | 0 = Noch nicht indiziert 1 = 1. Indizierung erfolgreich 2 = 2. Indizierung incl. Checksumme erfolgreich 3 = Indizierung fehlgeschlagen |
indexresult | indexstatus 0: Leer indexstatus 1: First run complete indexstatus 2: Finished indexstatus 3: Fehlermeldung |
Serie indizieren
Das Indizieren einer Serie wird per Post gestartet. Der Endpunkt hierzu lautet: /series/index/<series-id>?key=<api-key>
Im “Körper” der Nachricht muss eine Zeichenfolge für den “Changelog” übergeben werden, die auch leer sein darf.
data=<url-encoded data>&key=<api-key>&checksum=<url-encoded checksum>
Data ist assoziatives Array (php) oder ein Object (JS).
Beispiel PHP: $data = array('id' => 571, 'changelog' => 'New skin added');
Beipiel JS: var data = {'id': 571, 'changelog': 'New skin added'};
Die Checksumme ist ein Sha256 Hash aus der folgenden Url-kodierten Abfrage:
data=<url encoded data>&key=<api-key>&secret=<api-secret>
Als Antwort erhält man eine ähnliche Antwort wie beim Abfragen des Index Status.
{ "success":true, "msg":"", "data":{ "id":3385, "indexdate":"2019-10-23 13:59:54", "indexstatus":2, "indexresult":"OK" } }