Back to top

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 Utilisateur
POST/users

Génère un utilisateur.

Example URI

POST https://api-hotspot.2isr.fr/v2/users
Request
HideShow
Headers
Content-Type: application/json
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxx
Body
{
  "login": "paul",
  "password": "azerty",
  "email": "paul@mail.com",
  "comment": "Un commentaire",
  "secondary_comment": "Un second commentaire"
}
Response  201
HideShow
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 Utilisateur
GET/users/{login}

Récupère un utilisateur via son login.

Example URI

GET https://api-hotspot.2isr.fr/v2/users/paul
URI Parameters
HideShow
login
string (required) Example: paul

Login utilisateur

Response  200
HideShow
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"
  ]
}
Response  404
HideShow
Headers
Content-Type: application/json
Body
{
  "code": 1700,
  "message": "Unknown user <XXXX>.",
  "meta": {
    "version": 2,
    "contexte": "hotspot"
  }
}

PUT Utilisateur
PUT/users/{login}

Modifie un utilisateur.

Example URI

PUT https://api-hotspot.2isr.fr/v2/users/paul
URI Parameters
HideShow
login
string (required) Example: paul

Login utilisateur

Request
HideShow
Headers
Content-Type: application/json
Authorization: xxxxxxxxxxxxxxxxxxxxxxxxx
Body
{
  "password": "azerty2",
  "email": "paul@mail2.com",
  "comment": "Un commentaire 2",
  "secondary_comment": "Un second commentaire 2"
}
Response  200
HideShow
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 Utilisateur
DELETE/users/{login}

Supprime un utilisateur.

Example URI

DELETE https://api-hotspot.2isr.fr/v2/users/paul
URI Parameters
HideShow
login
string (required) Example: paul

Login utilisateur

Response  204

Architecture

Liste des hotspots

hotspots
GET/hotspots/{?context,hotspot}

Liste l’ensemble des hotspots et leurs configurations suivant le contexte.

Example URI

GET https://api-hotspot.2isr.fr/v2/hotspots/?context=hotspot&hotspot=XXXYY-ZZZ
URI Parameters
HideShow
context
string (optional) Example: hotspot

Le contexte peut-être : hotspot/manager/group.

hotspot
string (optional) Example: XXXYY-ZZZ

hotspot parent dans le contexte group. required uniquement dans le contexte group

Response  200
HideShow
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

groups
GET/groups

Liste l’ensemble des groupes territoriaux du compte lié à la clé API

Example URI

GET https://api-hotspot.2isr.fr/v2/groups
Response  200
HideShow
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-points
GET/access-points/{?context}

Liste l’ensemble des points d’accès d’un hotspot

Example URI

GET https://api-hotspot.2isr.fr/v2/access-points/?context=hotspot
URI Parameters
HideShow
context
string (optional) Example: hotspot

Le contexte peut-être : hotspot/manager/group.

Response  200
HideShow
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-users
GET/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

GET https://api-hotspot.2isr.fr/v2/online-users/?context=hotspot&hotspot=XXXYY-ZZZ&optin=true|false&verify=true|false
URI Parameters
HideShow
context
string (optional) Example: hotspot

Le contexte peut-être : hotspot/manager/group.

hotspot
string (optional) Example: XXXYY-ZZZ

hotspot dont les données seront extraites, hotspot Parent dans le contexte group, ignoré dans le contexte manager .

optin
boolean (required) Example: true|false

Permet de filtrer les utilisateurs en ligne en fonction de l’optin.

verify
boolean (required) Example: true|false

Permet de filtrer les utilisateurs en ligne ayant validé une adresse email.

Response  200
HideShow
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 user
GET/online-users/{mac}/actions/logout

Déconnecter un utilisateur en ligne via son adresse MAC

Example URI

GET https://api-hotspot.2isr.fr/v2/online-users/7c:5c:f8:30:78:75/actions/logout
URI Parameters
HideShow
mac
string (required) Example: 7c:5c:f8:30:78:75

Adresse MAC de l’utilisateur à déconnecter

Response  200
HideShow
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 connexion
GET/logs/{?start,end,period,optin,verify,context,hotspot}

Liste et détaille l’ensemble des connexions réalisées sur le hotspot.

Example URI

GET https://api-hotspot.2isr.fr/v2/logs/?start=Y-m-d&end=Y-m-d&period=3h|24h|48h&optin=true|false&verify=true|false&context=hotspot&hotspot=XXXYY-ZZZ
URI Parameters
HideShow
start
string (required) Example: Y-m-d

Date du début de la période d’export. Doit être utilisé avec le paramètre end. Incompatible avec period.

end
string (required) Example: Y-m-d

Date de fin de la période d’export. Doit être utilisé avec le paramètre start. Incompatible avec period.

period
string (required) Example: 3h|24h|48h

Periode annulant les dates précédentes : 3h, 24h, 48h. Incompatible avec start et end.

optin
boolean (required) Example: true|false

Permet de filtrer les logs en fonction des connexions ayant au moins un optin coché.

verify
boolean (required) Example: true|false

Permet de filtrer les logs en fonction des connexions ayant validé une adresse email.

context
string (optional) Example: hotspot

Le contexte peut-être : hotspot/manager/group.

hotspot
string (optional) Example: XXXYY-ZZZ

hotspot dont les données seront extraites, hotspot Parent dans le contexte group, ignoré dans le contexte manager .

Response  200
HideShow
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": ""
        }
    }]
}

Generated by aglio on 21 Mar 2023