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.
- Toutes les réponses sont au format JSON
- L'authentification utilise des tokens JWT Bearer
- La version courante de l'API est v1
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>
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 HTTP | Signification |
|---|---|
| 200 | Succès |
| 201 | Ressource créée |
| 400 | Requête invalide (paramètre manquant ou incorrect) |
| 401 | Non authentifié (token absent, invalide ou expiré) |
| 403 | Accès refusé (ressource appartenant à un autre revendeur) |
| 404 | Ressource introuvable |
| 500 | Erreur 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
Authentifie un utilisateur VOP et retourne un token JWT valable 1 heure.
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
| username | string | Requis | Identifiant VOP (email ou username) |
| password | string | Requis | Mot 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
Retourne la liste des trunks SIP actifs.
Paramètres query
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| page | integer | 1 | Numéro de page |
| per_page | integer | 25 | Résultats par page (max 100) |
| client_id | integer | — | Filtrer 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 }
}
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
}
}
}
Paramètres query
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| page | integer | 1 | Numéro de page |
| per_page | integer | 25 | Résultats par page (max 500) |
| date_start | string | 1er du mois | Date début (YYYY-MM-DD HH:MM:SS) |
| date_end | string | Aujourd'hui | Date 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 }
}
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
Retourne la liste des numéros SDA actifs. Filtrable par trunk via le paramètre trunk_id.
Paramètres query
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| page | integer | 1 | Numéro de page |
| per_page | integer | 25 | Résultats par page (max 100) |
| trunk_id | integer | — | Filtrer 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 }
}
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
Retourne la liste des lignes mobiles actives.
Paramètres query
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| page | integer | 1 | Numéro de page |
| per_page | integer | 25 | Résultats par page (max 100) |
| client_id | integer | — | Filtrer 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 }
}
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" }
}
}
Paramètres query
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| page | integer | 1 | Numéro de page |
| per_page | integer | 25 | Max 500 |
| date_start | string | 1er du mois | YYYY-MM-DD HH:MM:SS |
| date_end | string | Aujourd'hui | YYYY-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 }
}
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
Retourne la liste des cartes SIM IoT actives.
Paramètres query
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| page | integer | 1 | Numéro de page |
| per_page | integer | 25 | Résultats par page (max 100) |
| client_id | integer | — | Filtrer 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 }
}
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" }
}
}
Mêmes paramètres et format de réponse que /v1/mobile/{id}/cdr/data.
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.
Retourne la liste des agents IA actifs du revendeur authentifié, avec leur consommation du mois en cours.
Paramètres query
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| page | integer | 1 | Numéro de page |
| per_page | integer | 25 | Résultats par page (max 100) |
| client_id | integer | — | Filtrer 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
| Champ | Type | Description |
|---|---|---|
| id | integer | Identifiant interne |
| ref | string | Référence de l'agent |
| nom | string | Nom de l'agent |
| type | string | Forfait souscrit (Lite / Standard / Premium) |
| client | string | Société cliente associée (vide si non renseigné) |
| datesub | string | Date de souscription (JJ/MM/AAAA) |
| dateend | string | Date de fin d'engagement (JJ/MM/AAAA) |
| conso.mois | string | Mois de consommation (AAAA-MM) |
| conso.duree_minutes | float | Minutes consommées sur le mois |
| conso.minutes_incluses | integer | Minutes incluses dans le forfait |
| conso.minutes_hf | float | Minutes hors forfait (dépassement) |
| conso.cout_min_client | float | Coût à la minute en € (marge incluse) |
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
}
}
}