Introduction

L'API VOP permet à des applications tierces et à des portails clients d'accéder aux données de la plateforme Revtelecom. Elle est accessible à l'adresse https://vopapi.revtelecom.net.

URL de base

https://vopapi.revtelecom.net/v1

Tous les endpoints sont préfixés par /v1.

Authentification

L'API utilise des tokens JWT (JSON Web Token) d'une durée de validité d'1 heure. Pour obtenir un token, appelez POST /v1/auth/token avec vos identifiants VOP.

Incluez ensuite le token dans le header Authorization de chaque requête :

Authorization: Bearer <votre_token>
Le token expire après 1 heure. Une nouvelle authentification est nécessaire pour obtenir un nouveau token.

Exemple avec cURL

# 1. Obtenir un token
curl -X POST https://vopapi.revtelecom.net/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"username":"user@societe.fr","password":"motdepasse"}'

# 2. Utiliser le token
curl https://vopapi.revtelecom.net/v1/acces \
  -H "Authorization: Bearer eyJhbGci..."

Codes d'erreur

Code HTTPSignification
200Succès
201Ressource créée
400Requête invalide (paramètre manquant ou incorrect)
401Non authentifié (token absent, invalide ou expiré)
403Accès refusé (ressource appartenant à un autre revendeur)
404Ressource introuvable
500Erreur serveur interne

Format d'une réponse d'erreur

{
  "success": false,
  "error":   "Token invalide ou expiré"
}

Format d'une réponse réussie

{
  "success": true,
  "data":    { /* contenu de la réponse */ }
}

Format d'une réponse paginée

{
  "success": true,
  "data": [ /* tableau de résultats */ ],
  "meta": {
    "total":    142,
    "page":     1,
    "per_page": 25,
    "pages":    6
  }
}

Auth

POST /v1/auth/token Obtenir un token JWT

Authentifie un utilisateur VOP et retourne un token JWT valable 1 heure.

Corps de la requête

ChampTypeRequisDescription
usernamestringRequisIdentifiant VOP (email ou username)
passwordstringRequisMot de passe VOP

Exemple de requête

POST /v1/auth/token
Content-Type: application/json

{
  "username": "user@societe.fr",
  "password": "motdepasse"
}

Exemple de réponse

{
  "success":    true,
  "data": {
    "token":      "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expires_in": 3600,
    "token_type": "Bearer",
    "societe":    "MA SOCIETE"
  }
}

Trunk SIP

GET /v1/trunk Liste des trunks Auth requis

Retourne la liste des trunks SIP actifs.

Paramètres query

ParamètreTypeDéfautDescription
pageinteger1Numéro de page
per_pageinteger25Résultats par page (max 100)
client_idintegerFiltrer par client

Exemple de réponse

{
  "success": true,
  "data": [
    { "id": 25, "ref": "MASTRU00013", "client": "MA SOCIETE" }
  ],
  "meta": { "total": 5, "page": 1, "per_page": 25, "pages": 1 }
}
GET /v1/trunk/{id}/infos Informations du trunk Auth requis

Retourne les informations complètes d'un trunk : générales, configuration et statut.

Exemple de réponse

{
  "success": true,
  "data": {
    "generales": {
      "id": 25, "ref": "MASTRU00013", "client": "MA SOCIETE",
      "server": "sip01.revtelecom.net", "type": "SIP",
      "datesub": "2024-01-15", "dateend": "2026-01-15", "nb_sda": 12
    },
    "trunk": {
      "name": "sip-client-01", "mode": "trunk",
      "inbound": 10, "outbound": 10, "global": 20,
      "DPT": "75", "strip": 0,
      "ips": [{ "ip": "1.2.3.4", "pays": "France", "isp": "Orange" }],
      "zones": { "zone1": true, "zone2": true, "zone3": false }
    },
    "status": {
      "statut": "Actif",
      "plafond": "500.00", "plafond_sva": "100.00",
      "conso_appels": 3600, "conso_spec": 0, "conso_ent": 120
    }
  }
}
GET /v1/trunk/{id}/cdr/recus Appels reçus Auth requis

Paramètres query

ParamètreTypeDéfautDescription
pageinteger1Numéro de page
per_pageinteger25Résultats par page (max 500)
date_startstring1er du moisDate début (YYYY-MM-DD HH:MM:SS)
date_endstringAujourd'huiDate fin (YYYY-MM-DD HH:MM:SS)

Exemple de réponse

{
  "success": true,
  "data": [
    {
      "date":        "2026-06-24 10:32:11",
      "appelant":    "0612345678",
      "numero":      "0123456789",
      "duree":       "00:02:34",
      "disposition": "ANSWERED"
    }
  ],
  "meta": { "total": 142, "page": 1, "per_page": 25, "pages": 6 }
}
GET /v1/trunk/{id}/cdr/emis Appels émis Auth requis

Mêmes paramètres que /cdr/recus.

Exemple de réponse

{
  "success": true,
  "data": [
    {
      "date":        "2026-06-24 09:15:00",
      "appelant":    "0123456789",
      "destination": "0698765432",
      "duree":       "00:01:12",
      "disposition": "ANSWERED"
    }
  ],
  "meta": { "total": 98, "page": 1, "per_page": 25, "pages": 4 }
}

Mobile

GET /v1/mobile Liste des lignes mobiles Auth requis

Retourne la liste des lignes mobiles actives.

Paramètres query

ParamètreTypeDéfautDescription
pageinteger1Numéro de page
per_pageinteger25Résultats par page (max 100)
client_idintegerFiltrer par client

Exemple de réponse

{
  "success": true,
  "data": [
    { "id": 18, "ref": "MASMOB00014", "client": "MA SOCIETE" }
  ],
  "meta": { "total": 2, "page": 1, "per_page": 25, "pages": 1 }
}
GET /v1/mobile/{id}/infos Informations de la ligne Auth requis

Exemple de réponse

{
  "success": true,
  "data": {
    "generales": {
      "id": 18, "ref": "MASMOB00014", "client": "MA SOCIETE",
      "abonne": "Dupont Jean", "ligne": "0612345678",
      "datesub": "01/03/2024", "dateend": "01/03/2026"
    },
    "ligne": {
      "serial": "8933012345678901234",
      "forfait": "20 Go", "data": "20480",
      "option_5g": false, "ip_fixe": ""
    },
    "status": { "statut": "Actif" }
  }
}
GET /v1/mobile/{id}/cdr/data Consommation data Auth requis

Paramètres query

ParamètreTypeDéfautDescription
pageinteger1Numéro de page
per_pageinteger25Max 500
date_startstring1er du moisYYYY-MM-DD HH:MM:SS
date_endstringAujourd'huiYYYY-MM-DD HH:MM:SS

Exemple de réponse

{
  "success": true,
  "data": [
    {
      "date": "2026-06-24 10:00:00", "apn": "mobiledata",
      "volume": "12.45 Mo", "pays": "France",
      "roaming": "Non", "imei": "354123456789012", "rat": "4G"
    }
  ],
  "meta": { "total": 48, "page": 1, "per_page": 25, "pages": 2 }
}
GET /v1/mobile/{id}/cdr/voix Appels et SMS Auth requis

Mêmes paramètres que /cdr/data.

Exemple de réponse

{
  "success": true,
  "data": [
    {
      "date": "2026-06-24 09:15:00", "type": "Appel sortant",
      "appelant": "0612345678", "destination": "0698765432",
      "duree": "00:02:15", "roaming": "Non"
    }
  ],
  "meta": { "total": 23, "page": 1, "per_page": 25, "pages": 1 }
}

IoT / M2M

GET /v1/iot Liste des SIM IoT Auth requis

Retourne la liste des cartes SIM IoT actives.

Paramètres query

ParamètreTypeDéfautDescription
pageinteger1Numéro de page
per_pageinteger25Résultats par page (max 100)
client_idintegerFiltrer par client

Exemple de réponse

{
  "success": true,
  "data": [
    { "id": 5, "ref": "MASM2M00001", "client": "MA SOCIETE" }
  ],
  "meta": { "total": 1, "page": 1, "per_page": 25, "pages": 1 }
}
GET /v1/iot/{id}/infos Informations de la SIM IoT Auth requis

Exemple de réponse

{
  "success": true,
  "data": {
    "generales": {
      "id": 5, "ref": "MASM2M00001", "client": "MA SOCIETE",
      "abonne": "Capteur Site A", "ligne": "33612345678",
      "datesub": "01/01/2025", "dateend": "01/01/2027"
    },
    "sim": {
      "serial": "8933012345678901234",
      "forfait": "1 Mo Europe", "data": "1", "tarif": "2.50"
    },
    "status": { "statut": "Actif" }
  }
}
GET /v1/iot/{id}/cdr/data Consommation data IoT Auth requis

Mêmes paramètres et format de réponse que /v1/mobile/{id}/cdr/data.

GET /v1/iot/{id}/cdr/voix Appels IoT Auth requis

Mêmes paramètres et format de réponse que /v1/mobile/{id}/cdr/voix.