Clic & Surf V2 API - Documentation
Présentation
L’API Clic & Surf V2 permet de mettre à disposition des partenaires certaines données d’usage provenant des offres Wifi contenues dans Clic & Surf selon des droits et autorisations définis par les administrateurs. Cette mise à disposition s’effectue aux formats JSON. L’API offre un système complet, flexible et simple d’utilisation pour la récupération des données de votre offre WiFi.
Activation de l’API
Votre API doit être activée dans votre manager https://hotspot.2isr.fr/v4/ > Statistiques & Données > Gestion de l’API
Sécurité de l’API
Votre adresse IP doit être enregistrée dans votre manager https://hotspot.2isr.fr/v4/ > Statistiques & Données > Gestion de l’API
Format des requêtes
Toutes les données sont transmises en UTF8
Autorisation
L’identification se fait via le header ‘Authorization’ dans lequel doit se trouver la clé API
Contextes des données
Il est utilisé la notion de contexte des données. Chaque donnée peut-être exportée suivant les contextes suivants :
hotspot : les données sont extraites d’un hotspot.
manager : les données sont extraites de tous les hotspots du compte manager.
group : les données sont extraites de tous les hotspots du groupe territorial dont le hotspot est le parent.
Par défaut, le contexte est défini suivant le compte de la clé API. Si la clé est lié à un compte FLOTT-ZZZ alors le
contexte par défaut est manager
Modifications récentes
- 07/2018 : Création de l’API v2
Groupe Méthodes Clic & Surf
Utiliser ces méthodes pour extraire les informations souhaitées de votre hotspot Clic & Surf :
Utilisateur ¶
Permet la gestion des utilisateurs en mode de connexion login + mot de passe.
Utilisateurs ¶
Post UtilisateurPOST/users
Génère un utilisateur.
Example URI
Headers
Content-Type: application/json
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxBody
{
"login": "paul",
"password": "azerty",
"email": "paul@mail.com",
"comment": "Un commentaire",
"secondary_comment": "Un second commentaire"
}201Headers
Content-Type: application/jsonBody
{
"meta": {
"version": 2,
"contexte": "hotspot"
},
"data": {
"id": 1,
"login": "paul",
"password": "azerty",
"quota": "00:00:00",
"limite_temps": 0,
"simult": 1,
"type": "ticket",
"commentaire": "Un commentaire",
"actif": true,
"hotspot": "ANG49-001",
"commentaire_secondaire": "Un second commentaire",
"expiration": null,
"prefixe": null,
"recurrence": null,
"quota_initial": "00:00:00",
"email": "paul@mail.com"
}
}Utilisateur ¶
Get UtilisateurGET/users/{login}
Récupère un utilisateur via son login.
Example URI
- login
string(required) Example: paulLogin utilisateur
200Headers
Content-Type: application/jsonBody
{
"id": 1,
"login": "paul",
"password": "azerty",
"quota": 12,
"limite_temps": 0,
"simult": 1,
"type": "ticket",
"commentaire": "com",
"commentaire_secondaire": "null",
"actif": true,
"hotspot": "'CHO49",
"expiration": "0",
"prefixe": "null",
"recurrence": "null",
"quota_initial": "00:01:00",
"email": "test@mail.com"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "Identifiant unique"
},
"login": {
"type": "string",
"description": "Login de l'utilisateur"
},
"password": {
"type": "string",
"description": "Mot de passe de l'utilisateur"
},
"quota": {
"type": "number",
"description": "Quota de temps de connexion"
},
"limite_temps": {
"type": "number",
"description": "Durée de validité après la première connexion du ticket"
},
"simult": {
"type": "number",
"description": "Nombre de connexions simultanées autorisées"
},
"type": {
"type": "string",
"description": "Type de l'utilisateur"
},
"commentaire": {
"type": "string",
"description": "Commentaire sur l'utilisateur"
},
"commentaire_secondaire": {
"type": "string",
"description": "Commentaire secondaire"
},
"actif": {
"type": "boolean",
"description": "Défini si le compte utilisateur est actif ou non"
},
"hotspot": {
"type": "string",
"description": "001:' (string) - Identifiant du hotspot lié à l'utilisateur"
},
"expiration": {
"type": "string",
"description": "Date d'expiration au format Y-m-d h:m:s"
},
"prefixe": {
"type": "string",
"description": "Préfixe utilisé lors de la création par lot"
},
"recurrence": {
"type": "string",
"description": "Temps après lequel le quota du ticket est renouvelé"
},
"quota_initial": {
"type": "string",
"description": "Quota lors de la création du ticket"
},
"email": {
"type": "string",
"description": "Email de l'utilisateur"
}
},
"required": [
"id",
"login",
"password"
]
}404Headers
Content-Type: application/jsonBody
{
"code": 1700,
"message": "Unknown user <XXXX>.",
"meta": {
"version": 2,
"contexte": "hotspot"
}
}PUT UtilisateurPUT/users/{login}
Modifie un utilisateur.
Example URI
- login
string(required) Example: paulLogin utilisateur
Headers
Content-Type: application/json
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxBody
{
"password": "azerty2",
"email": "paul@mail2.com",
"comment": "Un commentaire 2",
"secondary_comment": "Un second commentaire 2"
}200Headers
Content-Type: application/jsonBody
{
"meta": {
"version": 2,
"contexte": "hotspot"
},
"data": {
"id": 1,
"login": "paul",
"password": "azerty2",
"quota": "00:00:00",
"limite_temps": 0,
"simult": 1,
"type": "ticket",
"commentaire": "Un commentaire 2",
"actif": true,
"hotspot": "ANG49-001",
"commentaire_secondaire": "Un second commentaire 2",
"expiration": null,
"prefixe": null,
"recurrence": null,
"quota_initial": "00:00:00",
"email": "paul@mail2.com"
}
}DELETE UtilisateurDELETE/users/{login}
Supprime un utilisateur.
Example URI
- login
string(required) Example: paulLogin utilisateur
204Architecture ¶
Liste des hotspots ¶
hotspotsGET/hotspots/{?context,hotspot}
Liste l’ensemble des hotspots et leurs configurations suivant le contexte.
Example URI
- context
string(optional) Example: hotspotLe contexte peut-être : hotspot/manager/group.
- hotspot
string(optional) Example: XXXYY-ZZZhotspot parent dans le contexte
group.requireduniquement dans le contextegroup
200Headers
Content-Type: application/jsonBody
{
"meta": {
"total": 1
"version": "2",
"contexte": "hotspot",
},
"data": [{
"id": 18
"hotspot": "SJL64-005"
"hotspot_actif": true
"type_auth": "cgu"
"cgu_email": true
"redirection": "www.xxxxxxx.com"
"network": "10.x.x.x"
"masque": 26
"ip_wan_operateur": "92.103.92.172"
"ssid": "SSID"
"description": "XXXXXXXXXXXXXX"
"street_name": "xx bd de la mer"
"postal_code": "49300"
"city": "CHOLET"
"province": 49
"latitude": "41.384507"
"longitude": "-0.660716"
}]
}Liste des groupes ¶
groupsGET/groups
Liste l’ensemble des groupes territoriaux du compte lié à la clé API
Example URI
200Headers
Content-Type: application/jsonBody
{
"meta": {
"version": 2,
"contexte": "manager",
"total": 1
},
"data": [
{
"id": 1702,
"hotspot_parent": "XXXYY-ZZZ",
"description_groupe": "Mon groupe territorial"
}
]
}Liste des points d'accès ¶
access-pointsGET/access-points/{?context}
Liste l’ensemble des points d’accès d’un hotspot
Example URI
- context
string(optional) Example: hotspotLe contexte peut-être : hotspot/manager/group.
200Headers
Content-Type: application/jsonBody
{
"meta": {
"version": 2,
"contexte": "hotspot",
"total": 2
},
"data": [
{
"id": 3968,
"sn": "XXXXXXXXXXXX",
"mac": "XX:XX:XX:XX:XX:XX",
"host": "XXX00-001-1",
"nom_objet": "PARUCKUSRXXX",
"ip": "XX.XX.XX.XX",
"description": null,
"latitude": "0.000000",
"longitude": "0.000000"
},
{
"id": 2123,
"sn": "XXXXXXXXXXXX",
"mac": "XX:XX:XX:XX:XX:XX",
"host": "XXX00-001-2",
"nom_objet": "PARUCKUSRXXX",
"ip": "XX.XX.XX.XX",
"description": null,
"latitude": "0",
"longitude": "0"
}
]
}Utilisateur en ligne ¶
Liste des utilisateurs en ligne ¶
online-usersGET/online-users/{?context,hotspot,optin,verify}
Liste l’ensemble des utilisateurs en ligne suivant le contexte. Seuls les utilisateurs dont la connexion est finalisée apparaîtront.
Example URI
- context
string(optional) Example: hotspotLe contexte peut-être : hotspot/manager/group.
- hotspot
string(optional) Example: XXXYY-ZZZhotspot dont les données seront extraites, hotspot Parent dans le contexte
group, ignoré dans le contexte manager .- optin
boolean(required) Example: true|falsePermet de filtrer les utilisateurs en ligne en fonction de l’optin.
- verify
boolean(required) Example: true|falsePermet de filtrer les utilisateurs en ligne ayant validé une adresse email.
200Headers
Content-Type: application/jsonBody
{
"meta": {
"version": 2
"total": 1
"contexte": "hotspot"
},
"data": [{
"token_id": "d4d968efef2e5fc67fc2a44e4a0f39e7",
"timestamp_in": "2016-05-21 23:52:58.052457",
"timestamp_out": "2016-05-22 01:56:01.962058",
"user_login": "XXXXXXXXXXXXX",
"email": "xxxx@xxxx.xx",
"user_ip": "XX.XX.XX.XX",
"user_mac": "XX:XX:XX:XX:XX:XX",
"user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; GT-I9192 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/50.0.2661.89 Mobile Safari\/537.36",
"incoming": 85694239,
"outgoing": 10977787,
"email_verifier": 1,
"hotspot": "XXXYY-ZZZ",
"duree": "1542",
"fastpass": null,
"info_client": null,
"autoconnect": "oui",
"logout_reason": "4",
"lang_sys": "fr-FR",
"lang_portail": "fr",
"type_auth": "ConnectorFB",
"ap_mac": "XX:XX:XX:XX:XX:XX",
"optin": "oui",
"platform": "Defaut",
"browser": "Defaut",
"ismobiledevice": "Non",
"verifie_txt": "Oui",
"ConnectorFB": {
"FB_ID": "XXXXXXXXXXXXXX",
"FB_Email": "xxxx@xxxx.xx",
"FB_LastName": "XXXX",
"FB_FirstName": "XXXXXXX",
"FB_Birthday": "",
"FB_Link": "https:\/\/www.facebook.com\/app_scoped_user_id\/XXXXXXXXXXXXXX\/",
"FB_Sexe": "female",
"FB_Locale": "fr_FR",
"FB_City": "",
"verif": 1
},
"ConnectorTwitter": {
"Twitter_ID": "XXXXXXXXXXXXXX",
"Twitter_Name": "XXXX",
"Twitter_ScreenName": "XXXX",
"Twitter_Location": "XXXX",
"Twitter_Url": "",
"Twitter_Followers_Count": "643",
"Twitter_Listed_Count": "3",
"Twitter_Favourites_Count": "985",
"Twitter_Time_Zone": "Paris",
"Twitter_Lang": "en",
"Twitter_Profil_Image": "http:\/\/pbs.twimg.com\/profile_images\/XXXXXXXXXXXXXX\/XXXXXXXXXXXXXX.jpg",
"Twitter_Email": "xxxxxxx@xxx.xx"
},
"ConnectorGoogle": {
"Google_ID": "XXXXXXXXXXXXXX",
"Google_Email": "xxxxxx@xxxx.xx",
"Google_Verified_Email": "1",
"Google_Name": "xxxxxxxxx",
"Google_Given_Name": "xxxxxxxx",
"Google_Family_Name": "xxxxxxxxx",
"Google_Link": "https:\/\/plus.google.com\/xxxxxxxxxxxxxxxxx",
"Google_Picture": "https:\/\/lh3.googleusercontent.com\/xxxxxxxxxxxxxxxxx/photo.jpg",
"Google_Gender": "female",
"Google_Locale": "fr"
},
"ConnectorLinkedin": {
"Linkedin_id": "XXXXXXXXX",
"Linkedin_email_address": "xxxxxx@xxxx.xx",
"Linkedin_first_name": "xxxxxxxxx",
"Linkedin_last_name": "xxxxxxxx",
"Linkedin_location_country": "fr_FR",
"Linkedin_pictureurl": "https:\/\/media.licdn.com\/dms\/xxxxxxxxxxxxxxxxx"
},
"infos_complementaires": {
"id": "8389",
"last_update": "2017-05-04 16:14:55",
"nom": "",
"prenom": "",
"annee": "",
"sexe": "",
"telephone": ""
"email": "",
"code_postal": "",
"pays": ""
}
}]
}Déconnexion d'un utilisateur un ligne ¶
logout userGET/online-users/{mac}/actions/logout
Déconnecter un utilisateur en ligne via son adresse MAC
Example URI
- mac
string(required) Example: 7c:5c:f8:30:78:75Adresse MAC de l’utilisateur à déconnecter
200Headers
Content-Type: application/jsonBody
{
"meta": {
"version": 2,
"contexte": "hotspot",
"total": 0
},
"message": "L'utilisateur '7c:5c:f8:30:78:75' a été déconnecté"
}Logs ¶
Liste des logs ¶
logs de connexionGET/logs/{?start,end,period,optin,verify,context,hotspot}
Liste et détaille l’ensemble des connexions réalisées sur le hotspot.
Example URI
- start
string(required) Example: Y-m-dDate du début de la période d’export. Doit être utilisé avec le paramètre
end. Incompatible avecperiod.- end
string(required) Example: Y-m-dDate de fin de la période d’export. Doit être utilisé avec le paramètre
start. Incompatible avecperiod.- period
string(required) Example: 3h|24h|48hPeriode annulant les dates précédentes : 3h, 24h, 48h. Incompatible avec
startetend.- optin
boolean(required) Example: true|falsePermet de filtrer les logs en fonction des connexions ayant au moins un optin coché.
- verify
boolean(required) Example: true|falsePermet de filtrer les logs en fonction des connexions ayant validé une adresse email.
- context
string(optional) Example: hotspotLe contexte peut-être : hotspot/manager/group.
- hotspot
string(optional) Example: XXXYY-ZZZhotspot dont les données seront extraites, hotspot Parent dans le contexte
group, ignoré dans le contexte manager .
200Headers
Content-Type: application/jsonBody
{
"meta": {
"version": 2,
"contexte": "hotspot",
"total": 1
},
"data": [{
"token_id": "d4d968efef2e5fc67fc2a44e4a0f39e7",
"timestamp_in": "2016-05-21 23:52:58.052457",
"timestamp_out": "2016-05-22 01:56:01.962058",
"user_login": "XXXXXXXXXXXXX",
"email": "xxxx@xxxx.xx",
"user_ip": "XX.XX.XX.XX",
"user_mac": "XX:XX:XX:XX:XX:XX",
"user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; GT-I9192 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/50.0.2661.89 Mobile Safari\/537.36",
"incoming": 85694239,
"outgoing": 10977787,
"email_verifier": 1,
"hotspot": "XXXYY-ZZZ",
"duree": "1542",
"fastpass": null,
"info_client": null,
"autoconnect": "oui",
"logout_reason": "4",
"lang_sys": "fr-FR",
"lang_portail": "fr",
"type_auth": "ConnectorFB",
"ap_mac": "XX:XX:XX:XX:XX:XX",
"optin": "oui",
"platform": "Defaut",
"browser": "Defaut",
"ismobiledevice": "Non",
"verifie_txt": "Oui",
"ConnectorFB": {
"FB_ID": "XXXXXXXXXXXXXX",
"FB_Email": "xxxx@xxxx.xx",
"FB_LastName": "XXXX",
"FB_FirstName": "XXXXXXX",
"FB_Birthday": "",
"FB_Link": "https:\/\/www.facebook.com\/app_scoped_user_id\/XXXXXXXXXXXXXX\/",
"FB_Sexe": "female",
"FB_Locale": "fr_FR",
"FB_City": "",
"verif": 1
},
"ConnectorTwitter": {
"Twitter_ID": "XXXXXXXXXXXXXX",
"Twitter_Name": "XXXX",
"Twitter_ScreenName": "XXXX",
"Twitter_Location": "XXXX",
"Twitter_Url": "",
"Twitter_Followers_Count": "643",
"Twitter_Listed_Count": "3",
"Twitter_Favourites_Count": "985",
"Twitter_Time_Zone": "Paris",
"Twitter_Lang": "en",
"Twitter_Profil_Image": "http:\/\/pbs.twimg.com\/profile_images\/XXXXXXXXXXXXXX\/XXXXXXXXXXXXXX.jpg",
"Twitter_Email": "xxxxxxx@xxx.xx"
},
"ConnectorGoogle": {
"Google_ID": "XXXXXXXXXXXXXX",
"Google_Email": "xxxxxxxx@xxxxx.x",
"Google_Verified_Email": "1",
"Google_Name": "xxxxxxxxx",
"Google_Given_Name": "xxxxxxxx",
"Google_Family_Name": "xxxxxxxxx",
"Google_Link": "https:\/\/plus.google.com\/xxxxxxxxxxxxxxxxx",
"Google_Picture": "https:\/\/lh3.googleusercontent.com\/xxxxxxxxxxxxxxxxx/photo.jpg",
"Google_Gender": "female",
"Google_Locale": "fr"
},
"ConnectorLinkedin": {
"Linkedin_id": "XXXXXXXXX",
"Linkedin_email_address": "xxxxxx@xxxx.xx",
"Linkedin_first_name": "xxxxxxxxx",
"Linkedin_last_name": "xxxxxxxx",
"Linkedin_location_country": "fr_FR",
"Linkedin_pictureurl": "https:\/\/media.licdn.com\/dms\/xxxxxxxxxxxxxxxxx"
},
"infos_complementaires": {
"id": "8389",
"last_update": "2017-05-04 16:14:55",
"nom": "",
"prenom": "",
"annee": "",
"sexe": "",
"telephone": ""
"email": "",
"code_postal": "",
"pays": ""
}
}]
}