Aller au contenu

Messages recommandés

Posté(e) (modifié)

J'ai vu très peu de sujet sur ce forum concernant l'utilisation des web api de nos chers NAS.

Synology propose, comme par exemple pour Surveillance Station, des documents :

https://global.download.synology.com/download/Document/DeveloperGuide/Surveillance_Station_Web_API.pdf

On peut alors très facilement contrôler toutes les fonctions natives du NAS.

Je vais vous expliquer comment trouver toutes ces fonctions et comment les utiliser.

Tout d'abord, la documentation n'étant pas à jour avec Surveillance Station 7, comment trouver les informations sur ces API à jour ?

  • Lister les API Synology :

Ce script va vous aider à lister les API existantes, et elles sont très nombreuses :

<?php
    $server = "https://dsm.solar-crisis.fr";
    
    $json = file_get_contents($server.'/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.');
    
    header('Content-Type: application/json');
    echo $json;
?>

Le résultat est assez conséquent !!! De quoi trouver son bonheur.

{
    "data": {
        "SYNO.ACEEditor": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.ACEEditor.Preference": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.API.Auth": {
            "maxVersion": 3,
            "minVersion": 1,
            "path": "auth.cgi"
        },
        "SYNO.API.Encryption": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "encryption.cgi"
        },
        "SYNO.API.Info": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "query.cgi"
        },
        "SYNO.AudioPlayer.Stream": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "AudioPlayer/stream.cgi"
        },
        "SYNO.AudioStation.Album": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/album.cgi"
        },
        "SYNO.AudioStation.Artist": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/artist.cgi"
        },
        "SYNO.AudioStation.Composer": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/composer.cgi"
        },
        "SYNO.AudioStation.Cover": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/cover.cgi"
        },
        "SYNO.AudioStation.Download": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "AudioStation/download.cgi"
        },
        "SYNO.AudioStation.Folder": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/folder.cgi"
        },
        "SYNO.AudioStation.Genre": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/genre.cgi"
        },
        "SYNO.AudioStation.Info": {
            "maxVersion": 3,
            "minVersion": 1,
            "path": "AudioStation/info.cgi"
        },
        "SYNO.AudioStation.Lyrics": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/lyrics.cgi"
        },
        "SYNO.AudioStation.LyricsSearch": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/lyrics_search.cgi"
        },
        "SYNO.AudioStation.MediaServer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "AudioStation/media_server.cgi"
        },
        "SYNO.AudioStation.Playlist": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/playlist.cgi"
        },
        "SYNO.AudioStation.Proxy": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "AudioStation/proxy.cgi"
        },
        "SYNO.AudioStation.Radio": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/radio.cgi"
        },
        "SYNO.AudioStation.RemotePlayer": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/remote_player.cgi"
        },
        "SYNO.AudioStation.RemotePlayerStatus": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "AudioStation/remote_player_status.cgi"
        },
        "SYNO.AudioStation.Search": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "AudioStation/search.cgi"
        },
        "SYNO.AudioStation.Song": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/song.cgi"
        },
        "SYNO.AudioStation.Stream": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "AudioStation/stream.cgi"
        },
        "SYNO.AudioStation.WebPlayer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "AudioStation/web_player.cgi"
        },
        "SYNO.Backup.App": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.App.Backup": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.App.Restore": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Config.Backup": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Config.Restore": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Log": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Repository": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Repository.PrivilegedUser": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Restore": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Server": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Service.NetworkBackup": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Service.TimeBackup": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Service.VersionBackup": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Share.Restore": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Source.Folder": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Storage.Connect.Network": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Storage.S3.Bucket": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Storage.S3.Region": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Storage.Share.Local": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Storage.Volume.Local": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Target": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Target.Folder": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Target.Owner": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Target.PrivilegedUser": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Task": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Task.Data": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Backup.Version": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ACL": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.AppPortal": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.AppPortal.Config": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.AppPriv": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.AppPriv.App": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.AppPriv.Rule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.BandwidthControl": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.BandwidthControl.Protocol": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.BandwidthControl.Status": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.CMS": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.CMS.Cache": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.CMS.Info": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.CMS.Policy": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.CMS.ServerInfo": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.CMS.Token": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Certificate": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Certificate.CRT": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Certificate.CSR": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.CurrentConnection": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.DDNS.ExtIP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.DDNS.Provider": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.DDNS.Record": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.DDNS.Synology": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.DataCollect": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.DataCollect.Application": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Desktop.Timeout": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Directory.Domain": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Directory.Domain.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Directory.Domain.Schedule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Directory.LDAP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Directory.LDAP.BaseDN": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Directory.LDAP.Profile": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Bluetooth": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Bluetooth.Device": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Bluetooth.Settings": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.DefaultPermission": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Printer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Printer.BonjourSharing": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Printer.Driver": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Printer.Network": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Printer.Network.Host": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Printer.OAuth": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Printer.USB": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Storage.EUnit": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Storage.SD": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Storage.Setting": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Storage.USB": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.Storage.eSATA": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.ExternalDevice.UPS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.EzInternet": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.File": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.File.Thumbnail": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.AFP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.FTP": {
            "maxVersion": 3,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.FTP.ChrootUser": {
            "maxVersion": 2,
            "minVersion": 2,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.FTP.SFTP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.FTP.Security": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.NFS": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.NFS.AdvancedSetting": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.NFS.IDMap": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.NFS.Kerberos": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.NFS.SharePrivilege": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.SMB": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.WebDAV": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.WebDAV.CalDAV": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.FileServ.WebDAV.CalDAV.Calendar": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Group": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Group.Member": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.BeepControl": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.DCOutput": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.DCOutput.Task": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.FanSpeed": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.Hibernation": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.LCM": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.PowerRecovery": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.PowerSchedule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Hardware.ZRAM": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.MediaIndexing": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.MediaIndexing.IndexFolder": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.MediaIndexing.MediaConverter": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.MyDSCenter": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.MyDSCenter.Account": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.MyDSCenter.Purchase": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.MyDSCenter.Unify": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Bond": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Bridge": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.DHCPServer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.DHCPServer.ClientList": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.DHCPServer.PXE": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.DHCPServer.Reservation": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.DHCPServer.WPAD": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Ethernet": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.IPv6": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.IPv6.Router": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.IPv6.Router.Prefix": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.IPv6Tunnel": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Interface": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.LocalBridge": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.MACClone": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.PPPoE": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.PPPoE.Relay": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Proxy": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.ConnectionList": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.DMZ": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.Gateway.List": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.LocalLan": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.MacFilter": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.ParentalControl": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.PkgList": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.PortForward": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.Static.Route": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Router.Topology": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.TrafficControl.RouterRules": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.TrafficControl.Rules": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.UPnPServer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.USBModem": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.VPN": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.VPN.L2TP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.VPN.OpenVPN": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.VPN.OpenVPN.CA": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.VPN.PPTP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Wifi.Client": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Wifi.Hotspot": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Network.Wifi.WPS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Advance.CustomizedData": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Advance.FilterSettings": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Advance.Variables": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Advance.WarningPercentage": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.CMS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.CMS.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Mail": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Mail.Auth": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Mail.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Push": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Push.AuthToken": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Push.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Push.Mail": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.Push.Mobile": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.SMS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.SMS.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Notification.SMS.Provider": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.OTP": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.OTP.EnforcePolicy": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Package": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Package.Control": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Package.Installation": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Package.Server": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Package.Setting": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Package.Uninstallation": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.PortForwarding": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.PortForwarding.Compatibility": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.PortForwarding.RouterConf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.PortForwarding.RouterList": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.PortForwarding.Rules": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.PortForwarding.Rules.Serv": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.QuickConnect": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.QuickConnect.Permission": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Quota": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.RecycleBin": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.RecycleBin.User": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Region.Language": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Region.NTP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Region.NTP.Server": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Report": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Report.Analyzer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Report.Config": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Report.History": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SNMP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.AutoBlock": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.AutoBlock.Rules": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.DSM": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.DSM.Embed": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.DoS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.Firewall.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.Firewall.Rules": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.Firewall.Rules.Serv": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.VPNPassthrough": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Security.VPNPassthrough.Status": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SecurityScan.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SecurityScan.Operation": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SecurityScan.Status": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Service": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Service.Conf": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Service.PortInfo": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.Crypto": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.Crypto.Key": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.CryptoFile": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.Fileindex": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.Migration": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.Migration.Task": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.Permission": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Share.Snapshot": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Storage.Disk": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Storage.Pool": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Storage.Volume": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SupportForm.Account": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SupportForm.Form": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SupportForm.Log": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SupportForm.Service": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.CA": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.CustRule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.FileTransfer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.History": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.Log": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.Setting.Notify": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.Setting.Server": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.Setting.Storage": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.SyslogClient.Status": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.System": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.System.Utilization": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.TFTP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.TaskScheduler": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Terminal": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Theme.Image": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Theme.Login": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.AutoUpgrade": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.Group": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.Group.Download": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.GroupInstall": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.GroupInstall.Network": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.Patch": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.Server": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.Server.Download": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Upgrade.Setting": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.User": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.User.Home": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.User.PasswordPolicy": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Web.DSM": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Web.DSM.External": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Web.HTTP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Web.HTTP.Dependency": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Web.HTTP.VHost": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Web.PHP": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Core.Web.PHP.Extension": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.DSM.Application": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/app.cgi"
        },
        "SYNO.DSM.AutoBlock": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/autoblock.cgi"
        },
        "SYNO.DSM.Connection": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/connection.cgi"
        },
        "SYNO.DSM.FindMe": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/findme.cgi"
        },
        "SYNO.DSM.Group": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/group.cgi"
        },
        "SYNO.DSM.Info": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/info.cgi"
        },
        "SYNO.DSM.LogViewer": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/logviewer.cgi"
        },
        "SYNO.DSM.Network": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/network.cgi"
        },
        "SYNO.DSM.Package": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/package.cgi"
        },
        "SYNO.DSM.PushNotification": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/notification.cgi"
        },
        "SYNO.DSM.Service": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/service.cgi"
        },
        "SYNO.DSM.System": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/system.cgi"
        },
        "SYNO.DSM.SystemLoading": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/system_loading.cgi"
        },
        "SYNO.DSM.User": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/user.cgi"
        },
        "SYNO.DSM.Volume": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/volume.cgi"
        },
        "SYNO.DSM.iSCSI": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "dsm/iscsi.cgi"
        },
        "SYNO.DTV.Channel": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/channellist.cgi"
        },
        "SYNO.DTV.ChannelScan": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/channelscan.cgi"
        },
        "SYNO.DTV.Controller": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/dtvcontrol.cgi"
        },
        "SYNO.DTV.DVBSScan": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/dvbsscan.cgi"
        },
        "SYNO.DTV.Program": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/programlist.cgi"
        },
        "SYNO.DTV.Schedule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/schedule_recording.cgi"
        },
        "SYNO.DTV.Statistic": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/dtvstatistic.cgi"
        },
        "SYNO.DTV.Status": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/dvtstatus.cgi"
        },
        "SYNO.DTV.Streaming": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/dtvstreaming.cgi"
        },
        "SYNO.DTV.Tuner": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/tuner.cgi"
        },
        "SYNO.DownloadStation.BTSearch": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "DownloadStation/btsearch.cgi"
        },
        "SYNO.DownloadStation.Info": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "DownloadStation/info.cgi"
        },
        "SYNO.DownloadStation.RSS.Feed": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "DownloadStation/RSSfeed.cgi"
        },
        "SYNO.DownloadStation.RSS.Site": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "DownloadStation/RSSsite.cgi"
        },
        "SYNO.DownloadStation.Schedule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "DownloadStation/schedule.cgi"
        },
        "SYNO.DownloadStation.Statistic": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "DownloadStation/statistic.cgi"
        },
        "SYNO.DownloadStation.Task": {
            "maxVersion": 3,
            "minVersion": 1,
            "path": "DownloadStation/task.cgi"
        },
        "SYNO.DownloadStation.Xunlei.Task": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "DownloadStation/xunlei/dl_queue.cgi"
        },
        "SYNO.Entry.Request": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Entry.Request.Polling": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.FileStation.BackgroundTask": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "FileStation/background_task.cgi"
        },
        "SYNO.FileStation.CheckExist": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_checkDir.cgi"
        },
        "SYNO.FileStation.CheckPermission": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "FileStation/file_permission.cgi"
        },
        "SYNO.FileStation.Compress": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_compress.cgi"
        },
        "SYNO.FileStation.CopyMove": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "FileStation/file_MVCP.cgi"
        },
        "SYNO.FileStation.CreateFolder": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_crtfdr.cgi"
        },
        "SYNO.FileStation.Delete": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_delete.cgi"
        },
        "SYNO.FileStation.DirSize": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_dirSize.cgi"
        },
        "SYNO.FileStation.Download": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_download.cgi"
        },
        "SYNO.FileStation.Extract": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_extract.cgi"
        },
        "SYNO.FileStation.Favorite": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_favorite.cgi"
        },
        "SYNO.FileStation.Info": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/info.cgi"
        },
        "SYNO.FileStation.List": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_share.cgi"
        },
        "SYNO.FileStation.MD5": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_md5.cgi"
        },
        "SYNO.FileStation.OpenGoogleDrive": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_opengdrive.cgi"
        },
        "SYNO.FileStation.Rename": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_rename.cgi"
        },
        "SYNO.FileStation.Search": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_find.cgi"
        },
        "SYNO.FileStation.Sharing": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "FileStation/file_sharing.cgi"
        },
        "SYNO.FileStation.Snapshot": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_snapshot.cgi"
        },
        "SYNO.FileStation.Thumb": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_thumb.cgi"
        },
        "SYNO.FileStation.Upload": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/api_upload.cgi"
        },
        "SYNO.FileStation.VFS.Connection": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.FileStation.VFS.Profile": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.FileStation.VFS.Protocol": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.FileStation.VFS.User": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.FileStation.VirtualFolder": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FileStation/file_virtual.cgi"
        },
        "SYNO.FolderSharing.Download": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FolderSharing/file_download.cgi"
        },
        "SYNO.FolderSharing.List": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FolderSharing/file_share.cgi"
        },
        "SYNO.FolderSharing.Thumb": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "FolderSharing/file_thumb.cgi"
        },
        "SYNO.NoteStation.FTS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Import.Evernote": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Info": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Note": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Note.AppLink": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Note.Encrypt": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Note.Polling": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Note.Version": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Notebook": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Permission": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Permission.Public": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Permission.User": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Setting": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Shard": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Shard.Link": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Share.Priv": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Shortcut": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.NoteStation.Tag": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.Package": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.PersonMailAccount": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.PersonMailAccount.Contacts": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.PersonMailAccount.Mail": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.ResourceMonitor.Setting": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.S2S.Client": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.S2S.Client.Job": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.S2S.Server": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.S2S.Server.Pair": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SocialAccount": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SocialAccount.Friend": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SocialAccount.Message": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SocialAccount.Token": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.ActionRule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.AddOns": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Analytics": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Analytics.Setting": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.AudioOut": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.AudioPattern": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.AudioStream": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "SurveillanceStation/audioStreaming.cgi"
        },
        "SYNO.SurveillanceStation.AxisAcsCtrler": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.AxisAcsCtrler.Search": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.CMS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.CMS.GetDsStatus": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.CMS.SlavedsWizard": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Camera": {
            "maxVersion": 8,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Camera.Event": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Camera.Group": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Camera.Import": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Camera.Wizard": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Device": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "SurveillanceStation/device.cgi"
        },
        "SYNO.SurveillanceStation.DigitalOutput": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Emap": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "SurveillanceStation/emap.cgi"
        },
        "SYNO.SurveillanceStation.Event": {
            "maxVersion": 4,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Event.Export": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Event.Mount": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.ExternalEvent": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.ExternalRecording": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Info": {
            "maxVersion": 5,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.License": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Log": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Notification": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Notification.Email": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Notification.Filter": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Notification.PushService": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Notification.SMS": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Notification.SMS.ServiceProvider": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Notification.Schedule": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.PTZ": {
            "maxVersion": 3,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.PersonalSettings.Image": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Share": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.SnapShot": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Stream": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.Streaming": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "SurveillanceStation/streaming.cgi"
        },
        "SYNO.SurveillanceStation.TaskQueue": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.VideoStream": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "SurveillanceStation/videoStreaming.cgi"
        },
        "SYNO.SurveillanceStation.VisualStation": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.VisualStation.Layout": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.SurveillanceStation.VisualStation.Search": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "entry.cgi",
            "requestFormat": "JSON"
        },
        "SYNO.VideoController.Device": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoController/device.cgi"
        },
        "SYNO.VideoController.Password": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoController/password.cgi"
        },
        "SYNO.VideoController.Playback": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoController/playback.cgi"
        },
        "SYNO.VideoController.Volume": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoController/volume.cgi"
        },
        "SYNO.VideoStataion.Poster": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/poster.cgi"
        },
        "SYNO.VideoStation.AudioTrack": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/audiotrack.cgi"
        },
        "SYNO.VideoStation.Collection": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/collection.cgi"
        },
        "SYNO.VideoStation.Folder": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/folder.cgi"
        },
        "SYNO.VideoStation.HomeVideo": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/homevideo.cgi"
        },
        "SYNO.VideoStation.Info": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/info.cgi"
        },
        "SYNO.VideoStation.Library": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/library.cgi"
        },
        "SYNO.VideoStation.Metadata": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/metadata.cgi"
        },
        "SYNO.VideoStation.Movie": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/movie.cgi"
        },
        "SYNO.VideoStation.PluginSearch": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/pluginsearch.cgi"
        },
        "SYNO.VideoStation.Poster": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/poster.cgi"
        },
        "SYNO.VideoStation.Rating": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/rater.cgi"
        },
        "SYNO.VideoStation.Sharing": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/sharing.cgi"
        },
        "SYNO.VideoStation.Streaming": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/vtestreaming.cgi"
        },
        "SYNO.VideoStation.Subtitle": {
            "maxVersion": 3,
            "minVersion": 1,
            "path": "VideoStation/subtitle.cgi"
        },
        "SYNO.VideoStation.TVRecording": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/tvrecord.cgi"
        },
        "SYNO.VideoStation.TVShow": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/tvshow.cgi"
        },
        "SYNO.VideoStation.TVShowEpisode": {
            "maxVersion": 2,
            "minVersion": 1,
            "path": "VideoStation/tvshow_episode.cgi"
        },
        "SYNO.VideoStation.Video": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/video.cgi"
        },
        "SYNO.VideoStation.WatchStatus": {
            "maxVersion": 1,
            "minVersion": 1,
            "path": "VideoStation/watchstatus.cgi"
        }
    },
    "success": true
}

Problème, on a les API, ok, on a les chemins, ok.... mais comment les utiliser ?

  • Retrouver les paramères des API

Pour se faire, pas d'autre choix que de se connecter en SSH.

Par exemple, pour retrouver les paramètres de l'API SYNO.SurveillanceStation.Camera, faites ceci :

cd /var/packages/SurveillanceStation/target/webapi
vi Camera/conf/SYNO.SurveillanceStation.Camera.lib 

Vous aurez une ligne au format JSON.

{"SYNO.SurveillanceStation.Camera": {"allowUser": ["admin.local", "admin.domain", "admin.ldap", "normal.local", "normal.domain", "normal.ldap"], "appPriv": "SYNO.SDS.SurveillanceStation", "authLevel": 2, "lib": "/var/packages/SurveillanceStation/target/webapi/Camera/src/SYNO.SurveillanceStation.Camera.so", "maxVersion": 8, "methods": {"1": [{"List": {"allowDemo": true}}, {"GetSnapshot": {"allowDemo": true}}, {"ListGroup": {"allowDemo": true}}, {"Listgroup": {"allowDemo": true}}, {"GetInfo": {"allowDemo": true}}, {"GetCapability": {"allowDemo": true}}], "2": [{"List": {"allowDemo": true}}, {"GetSnapshot": {"allowDemo": true}}, {"ListGroup": {"allowDemo": true}}, {"Listgroup": {"allowDemo": true}}, {"GetInfo": {"allowDemo": true}}, {"GetCapability": {"allowDemo": tr.............

Nous voyons ici les méthodes autorisées par l'API et les différentes versions de celle-ci (8 en tout...).

Avec ceci, et la documentation, il est alors possible d'interroger et d'interagir avec les packets Synology et le NAS.

  • Exemple

Voici un exemple tout bête : Afficher un snapshot et l'état des Caméras de surveillance Station.

Tout le détail est dans le code ci-dessous :

<?php
    //DSM Server Address with port
    $server = "https://www.mondomaine.fr:IPDSM";
    //Authorized user login
    $login = "login";
    //Authorized user password
    $pass = "pass";

    /* API VERSIONS */
    //SYNO.API.Auth
    $vAuth = 2;
    //SYNO.SurveillanceStation.Camera
    $vCamera = 2;

    //Get SYNO.API.Auth Path (recommended by Synology for further update)
    $json = file_get_contents($server.'/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth');
    $obj = json_decode($json);
    $path = $obj->data->{'SYNO.API.Auth'}->path;

    //Login and creating SID
    $json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.API.Auth&method=Login&version='.$vAuth.'&account='.$login.'&passwd='.$pass.'&session=SurveillanceStation&format=sid');
    $obj = json_decode($json);
    if($obj->success != "true"){
    	echo "error";
    	exit();
    }else{
    	//authentification successful
    	$sid = $obj->data->sid;
    	echo '<p>'.$sid.'</p>';
        
        //Get SYNO.SurveillanceStation.Camera (recommended by Synology for further update)
        $json = file_get_contents($server.'/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.SurveillanceStation.Camera');
        $obj = json_decode($json);
        $path = $obj->data->{'SYNO.SurveillanceStation.Camera'}->path;
        
    	//list of known cams 
    	$json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.SurveillanceStation.Camera&version='.$vCamera.'&method=List&_sid='.$sid);
    	$obj = json_decode($json);
    	
        foreach($obj->data->cameras as $cam){
    		$id_cam = $cam->id;
            echo "<p>Cam " . $id_cam . " detected</p>";
            //check if cam is connected
            if(!$cam->status) {
    			//check if cam is activated and not recording
        		if($cam->enabled && !$cam->recStatus) {
                    //showing a snapshot of the camera
                    echo "<img src='".$server."/webapi/".$path."?api=SYNO.SurveillanceStation.Camera&version=1&method=GetSnapshot&preview=true&camStm=1&cameraId=".$id_cam."&_sid=".$sid."' alt='limage toto' width='320' height='240'>";
        		}
        		else{
        			echo "<p>Cam " . $id_cam . " skipped</p>";
        		}
    		}else{
    			echo "<p>Cam " . $id_cam . " deconnected</p>";
    		}
    	}
    }
?>

Ne pas oublier de Kill la session après le chargement :

        //Get SYNO.API.Auth Path (recommended by Synology for further update)
        $json = file_get_contents($server.'/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth');
        $obj = json_decode($json);
        $path = $obj->data->{'SYNO.API.Auth'}->path;
        
        //Logout and destroying SID
        $json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.API.Auth&method=Logout&version='.$vAuth.'&session=SurveillanceStation&_sid='.$sid);
        $obj = json_decode($json);
  • Et apres ?

Après, vous pouvez étudier les API, et interagir avec votre NAS à l'aide de scripts pour intégrer sous forme de Plugin php des fonctionnalités directement dans votre outil de domotique.

Les interactions peuvent être très larges, que ce soit du monitoring, de l'automatisation, des fonctionnalités...

Personnellement, je vais essayer de faire mes propres plugins PHP. Y'a du boulot. :)

Modifié par Terrano
Posté(e)

Bonjour,

Je suis très intéressé par tes scripts! Je viens d'essayer le tiens pour le snapshot ça fonctionne. Mais j'essaie de d'activer et désactiver les caméras mais sans succès...

J'essaie avec cette url mais sans succès.

GET /webapi/SurveillanceStation/camera.cgi? api=SYNO.SurveillanceStation.Camera&method=Enable&version=3&cameraIds=2,10

J'ai copier/coller ton script et inséré les lignes

$json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.SurveillanceStation.Camera&method=Disable&version='.$vCamera.'&cameraIds='.$id_cam.'&_sid='.$sid);

$json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.SurveillanceStation.Camera&method=Enable&version='.$vCamera.'&cameraIds='.$id_cam.'&_sid='.$sid);

Mais rien ne se passe je ne vois rien changer sous SurveillanceStation.

Pour information j'ai la dernière mise à jour et a priori les API auraient changé mais je ne trouve pas les dernières versions.

Si tu as des astuces je suis preneur!

Merci !

Posté(e)

$json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.SurveillanceStation.Camera&method=Disable&version='.$vCamera.'&cameraIds='.$id_cam.'&_sid='.$sid);

$json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.SurveillanceStation.Camera&method=Enable&version='.$vCamera.'&cameraIds='.$id_cam.'&_sid='.$sid);

Essaie avec cameraId et pas cameraIds

Posté(e)

la doc officielle http://ukdl.synology.com/download/Document/DeveloperGuide/Surveillance_Station_Web_API.pdf

specifie ceci :

Request
Parameter Value    Description                                                Availability
cameraIds <string> The list of <CAMERA_ID> to be queried concatenated by “,”. 3 and onward

donc bien sur, ne suis pas la doc officielle enlève le S, suis mdr là sur ses fameux conseils

Posté(e)

Franchement, le genre de commentaire completement inutile qui montre le peu de considérations que tu as des autres....

Faudrait commencer à lire mon post :

Tout d'abord, la documentation n'étant pas à jour avec Surveillance Station 7, comment trouver les informations sur ces API à jour ?

Ensuite, si mes réponses ne te conviennent pas, t'es pas obligé de répondre, où alors, je ne posterais plus rien pour aider les autres vu que ca à l'air de te géner...


Vaut mieux essayer d'aider et de se tromper que de ne rien faire, chacun sa philosophie.

Posté(e) (modifié)

99% de la doc est à jour et j'ai donné le lien

seul quelque api nouvelle n'y sont pas reférencée, ce qui n'est pas le cas l'api incriminée, activé une camera est possible depuis ... (le début probablement :P)

evidemment, + simple de lancé de fausse info que d'ouvrir un pdf pour vérifié pour certains

bref : RTFM

Modifié par Gaetan Cambier
Posté(e)

La doc à jour ?????????????

T'es au comble du ridicule....

Dans la doc, SYNO.SurveillanceStation.Camera fait référence à :

GET /webapi/SurveillanceStation/camera.cgi? api=SYNO.SurveillanceStation.Camera&method=GetSnapshot&version=1&cameraId=10

Or, en vrai avec SurveillanceStation 7.0, c'est :

"SYNO.SurveillanceStation.Camera": {
"maxVersion": 8,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON"
},

Oh mais si pour toi c'est à jour..... Je m'incline, faudrait pas que j'offense Dieu... :rolleyes:

Posté(e) (modifié)

l'url de l'api n'a aucune importance si tu avait lu les première page de la doc :

URL path Surveillance Station Web API does not preserve a constant URL for every API. Instead, 3rd party applications need to use the command SYNO.API.Info to retrieve every API’s URL path. SYNO.API.Info is the only API with constant URL, and it does not need authorization, its path is /webapi/query.cgi

c'était à la page 6

donc, si c'est programmé correctement, ca n'a aucune incidence, on etait prévenu de pas le coder en dur

et pour en revenir au problème principal, car je suis là avant tout pour ca :

le + simple et d'aller detecter les caméra pour connaitre leur id (chapitre 2.3.4.1 de la doc pour ceux qui n'aime pas lire :P)

Modifié par Gaetan Cambier
Posté(e)
Posté(e)

T'admettra même pas que la doc n'est pas a jour.... Tu vas détourner encore la conversation et même pas t'excuser... T'es pathétique.


Et en plus tu modifies tes posts pour cacher ta bétise... Surtout que ce que tu dis, mon script php en tient compte.

Posté(e) (modifié)

Essaie avec cameraId et pas cameraIds

Attention, les méthodes Enable et Disable ne sont arrivées qu'à partir de la version 3 de l'API.

En ce qui concerne cameraIds et cameraId, effectivement les deux fonctionnent.

Part contre, quand j'essaie la méthode Disable j'obtient un code erreur 117 dont je ne sais pas à quoi il correspond.

Je continue à regarder.

Edit : En fait, c'est simple, j'ai pas les droits avec mon compte d'activer ou désactiver car ce n'est pas un compte Admin d'où l'erreur 117. :)

Modifié par Terrano
Posté(e)

...

En ce qui concerne cameraIds et cameraId, effectivement les deux fonctionnent.

...

c'est entièrement FAUX seul "cameraIds" pour la methode enable et disable de l'api SYNO.SurveillanceStation.Camera est accepté

utiliser un paramètres inexistant provoque la classique erreur 401

Posté(e)

c'est entièrement FAUX seul "cameraIds" pour la methode enable et disable de l'api SYNO.SurveillanceStation.Camera est accepté

utiliser un paramètres inexistant provoque la classique erreur 401

C'est pas entièrement faux, mais seulement faux pour Enable et Disable de cette API. :)

J'attends tes excuses concernant la documentation pas à jour.... J'attends.... B)

Posté(e)

Bonjour Messieurs,

Merci pour vos retours. Malheureusement rien de concluant pour ma part... Avez-vous réussi à le tester chez vous?

Terrano je crois que c'est toi qui avait fait le script en python ? Je l'avais testé aussi mais j'avais un problème de droit, je ne pouvais pas activer désactiver la caméra...

En fait le but ultime est d'utiliser les url, c'est d'activer et désactiver la caméra en partant et en rentrant de chez moi ...

Merci d'avance pour votre aide! ;)

Posté(e)

Bonsoir,

Désolé pour les temps de réponses .... OK Gaetan excuses-moi.

Bon du coup c'est bon ;)! Etant novice complet en php plus surement 2/3 de paires de moufles ça ne m'a pas aidé! Mais là c'est tout bon ça fonctionne nickel !

J'ai rien inventé ... Merci Terrano pour ton script php ! Et merci Gaetan pour ton aide !

Je mets mon petit bout de code, j'ai juste modifié la boucle foreach de ton code et j'active et désactive par l'url.

Merci à tous pour tout !!!

foreach($obj->data->cameras as $cam)
		{
    		$id_cam = $cam->id;
            echo "<p>Cam " . $id_cam . " detected</p>";
            if($_GET['cam'] == "on") 
			{
        		if($cam->enabled) 
				{
					echo "<p>Cam " . $id_cam . " deja enable</p>";
        		}
        		else
				{
					$json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.SurveillanceStation.Camera&method=Enable&version='.$vCamera.'&cameraIds='.$id_cam.'&_sid='.$sid);
					echo "<p>Cam " . $id_cam . " enabled</p>";
        		}
    		}
			if($_GET['cam'] == "off")
			{
				if(!$cam->enabled) 
				{
					echo "<p>Cam " . $id_cam . " deja disable</p>";
				}
				else
				{
					$json = file_get_contents($server.'/webapi/'.$path.'?api=SYNO.SurveillanceStation.Camera&method=Disable&version='.$vCamera.'&cameraIds='.$id_cam.'&_sid='.$sid);
					echo "<p>Cam " . $id_cam . " disabled</p>";
				}
    		}
    	}
  • 5 mois après...
Posté(e)

@Terrano,
1) merci pour ce post !  
2) comment peut-on retrouver l'information sur une API particulière ?
tu as donné l'exemple pour surveillance station (ok), mais je cherche une API qui pourrait me donner la MAC address de mon Syno. Je pensais à "SYNO.Core.Network.MACClone" par exmple, mais où (dans quel dir) trouver les infos nécessaires ?

Merci de votre aide

Posté(e)

Je ne pense pas qu'il y ait une API chez Synology qui expose l'adresse Mac.

Par contre tu peux la récupérer via SNMP :

> snmpwalk -v 2c -c public -O 0v 127.0.0.1 iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifPhysAddress.2

 

  • 2 mois après...
  • 3 mois après...
Posté(e) (modifié)

bonjour tout le monde.

C'est bien sympa cette histoire avec Surveillance station, mais est-ce que que quelqu'un a test avec un autre package ou tout simplement les données du NAS (HDD / activité) etc ... ?

Perso je galère, impossible d'avoir les commandes pour par exemple pouvoir monitorer le nas sur les hdd / températures etc.

Si vous avez des news n'hésitez pas ;-)

 

par exemple, ou trouver les infos des fichiers pour les item suivants ?

SYNO.Core.Hardware.FanSpeed
SYNO.Core.Storage.Volume
SYNO.Core.System
SYNO.Core.System.Utilization
SYNO.DSM.Info

avec la méthode suivante :

Par exemple, pour retrouver les paramètres de l'API SYNO.SurveillanceStation.Camera, faites ceci :

cd /var/packages/SurveillanceStation/target/webapi
vi Camera/conf/SYNO.SurveillanceStation.Camera.lib 
Modifié par fredolamasse
Posté(e)

Bonjour à tous,

Je suis dans le même cas de figure que fredolamasse, je voudrais savoir grâce à l'API l'état des backup ( Success, Error). J'ai alors suivi le mini-tutoriel de Terrano. J'arrive bel et bien à récupérer certaines information avec l'api SYNO.Backup.Task en utilisant la méthode List comme le nom de la tache ou l'id. Cependant, l’état des backup n'est pas exposé par cette API. J'ai donc essayé d'utiliser les autres API telles que SYNO.Backup.Task.Data, mais je me retrouve face à un mur, en effet, je ne trouve aucune information par rapport aux méthodes supportées pour une  API spécifique. J'ai beau essayé de me rendre un dossier tel que terrano l'a montré :

cd /var/packages/nom_api/target/webapi

 cependant, ce dossier n'existe pas.

Existe-t-il un moyen de récupérer la liste des méthodes supportées pour les autre API et pas seulement la surveillance station ? 
Gaetan vous préconisez de lire la documentation sur les API, dans mes recherches je n'ai trouvé que des informations dans  Synology Download Station Official API (https://global.download.synology.com/download/Document/DeveloperGuide/Synology_Download_Station_Web_API.pdf). Bien que le début du document comporte une partie générique permettant de comprendre les bases (authentification etc...) la suite du document se concentre exclusivement sur l'API Download Station. Connaîtriez-vous alors d'autre documentations  ?

 

Merci d'avance.

  • 2 semaines après...
Posté(e)

merci gaetan.cambier pour cette réponse hautement constructive.

Si je pose la question c'est que je n'ai trouvé aucune autre API que celle de video station qui m'est totalement inutile. étant donné que ce n'est pas l'application dont je souhaite contrôler l'état.

Mais merci de ton aide si précieuse.

Effectivement Dazmi94 je pense qu'on est dans la même logique.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.