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 }
}

SDA

GET /v1/sda Liste des SDA Auth requis

Retourne la liste des numéros SDA actifs. Filtrable par trunk via le paramètre trunk_id.

Paramètres query

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

Exemple de réponse

{
  "success": true,
  "data": [
    {
      "id":         12,
      "ref":        "MASSDA00205",
      "num":        "0123456789",
      "sda":        "0123456789",
      "renvoi":     0,
      "datesub":    "01/01/2025",
      "dateend":    "01/01/2027",
      "trunk_ref":  "MASTRU00013",
      "trunk_name": "sip-client-01",
      "client":     "MA SOCIETE"
    }
  ],
  "meta": { "total": 31, "page": 1, "per_page": 25, "pages": 2 }
}
GET /v1/sda/{id} Détail d'un numéro SDA Auth requis

Exemple de réponse

{
  "success": true,
  "data": {
    "id":         12,
    "ref":        "MASSDA00205",
    "num":        "0123456789",
    "sda":        "0123456789",
    "rio":        "F0XXXXX",
    "renvoi":     0,
    "datesub":    "01/01/2025",
    "dateend":    "01/01/2027",
    "trunk_ref":  "MASTRU00013",
    "trunk_name": "sip-client-01",
    "trunk_id":   25,
    "client":     "MA SOCIETE"
  }
}

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.

Agent IA

Accès aux agents IA vocaux (Vapi + OpenAI) associés au revendeur authentifié. Chaque agent inclut ses données de consommation du mois en cours.

GET /v1/agentia Liste des agents IA Auth requis

Retourne la liste des agents IA actifs du revendeur authentifié, avec leur consommation du mois en cours.

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":      1,
      "ref":     "AGT00001",
      "nom":     "Lucie",
      "type":    "Lite",
      "client":  "Client",
      "datesub": "01/07/2026",
      "dateend": "00/00/0000",
      "conso": {
        "mois":             "2026-07",
        "duree_minutes":    14.32,
        "minutes_incluses": 60,
        "minutes_hf":       0.00,
        "cout_min_client":  0.1469
      }
    }
  ],
  "meta": { "total": 1, "page": 1, "per_page": 25, "pages": 1 }
}

Description des champs

ChampTypeDescription
idintegerIdentifiant interne
refstringRéférence de l'agent
nomstringNom de l'agent
typestringForfait souscrit (Lite / Standard / Premium)
clientstringSociété cliente associée (vide si non renseigné)
datesubstringDate de souscription (JJ/MM/AAAA)
dateendstringDate de fin d'engagement (JJ/MM/AAAA)
conso.moisstringMois de consommation (AAAA-MM)
conso.duree_minutesfloatMinutes consommées sur le mois
conso.minutes_inclusesintegerMinutes incluses dans le forfait
conso.minutes_hffloatMinutes hors forfait (dépassement)
conso.cout_min_clientfloatCoût à la minute en € (marge incluse)
Les valeurs de conso sont à zéro si aucun appel n'a été enregistré sur le mois en cours. La mise à jour est effectuée toutes les heures.
GET /v1/agentia/{id} Détail d'un agent IA Auth requis

Retourne le détail complet d'un agent IA ainsi que sa consommation du mois en cours.

Exemple de réponse

{
  "success": true,
  "data": {
    "id":      1,
    "ref":     "AGT00001",
    "nom":     "Lucie",
    "type":    "Lite",
    "client":  "Client",
    "datesub": "01/07/2026",
    "dateend": "00/00/0000",
    "conso": {
      "mois":             "2026-07",
      "duree_minutes":    14.32,
      "minutes_incluses": 60,
      "minutes_hf":       0.00,
      "cout_min_client":  0.1469
    }
  }
}
Un code 403 est retourné si l'agent n'appartient pas au revendeur authentifié.