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: xxxxxxxxxxxxxxxxxxxxxxxxx
Body
{
"login": "paul",
"password": "azerty",
"email": "paul@mail.com",
"comment": "Un commentaire",
"secondary_comment": "Un second commentaire"
}
201
Headers
Content-Type: application/json
Body
{
"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
200
Headers
Content-Type: application/json
Body
{
"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"
]
}
404
Headers
Content-Type: application/json
Body
{
"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: xxxxxxxxxxxxxxxxxxxxxxxxx
Body
{
"password": "azerty2",
"email": "paul@mail2.com",
"comment": "Un commentaire 2",
"secondary_comment": "Un second commentaire 2"
}
200
Headers
Content-Type: application/json
Body
{
"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
204
Architecture ¶
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
.required
uniquement dans le contextegroup
200
Headers
Content-Type: application/json
Body
{
"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
200
Headers
Content-Type: application/json
Body
{
"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.
200
Headers
Content-Type: application/json
Body
{
"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.
200
Headers
Content-Type: application/json
Body
{
"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
200
Headers
Content-Type: application/json
Body
{
"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
start
etend
.- 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 .
200
Headers
Content-Type: application/json
Body
{
"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": ""
}
}]
}