Documentation de l'API InterVizio
Accédez aux données de votre organisation (interventions, demandes, clients, factures…) pour brancher vos propres applications, ERP ou tableaux de bord. Réservée au pack Grand Compte.
Introduction
L'API InterVizio est une API REST qui renvoie les données de votre organisation au format JSON. Chaque clé est cloisonnée : elle n'accède qu'aux données de l'organisation qui l'a émise.
Chaque clé porte deux niveaux d'autorisation, choisis à la création :
- Ressources : accès complet, ou restreint à certaines (ex. seulement les factures, ou les clients).
- Opérations : Lecture (toujours), Création et/ou Modification.
Pour obtenir une clé : dans l'application, Réglages → API & Développeurs → Générer une clé(réservé aux administrateurs de l'organisation sur le pack Grand Compte ; chaque création/suppression est protégée par la double authentification 2FA).
Authentification
Chaque requête doit inclure votre clé API dans l'en-tête x-api-key :
x-api-key: iv_live_votre_cle_iciL'en-tête Authorization: Bearer iv_live_… est également accepté. Ne partagez jamais votre clé publiquement (elle donne accès à vos données).
iv_test_… (Démo, pour tester votre intégration — résultats plafonnés à 10 par liste) et iv_live_… (Live, accès complet en production). Commencez toujours en Démo, puis passez en Live.URL de base & format de réponse
Toutes les URL sont préfixées par :
https://api.intervizio.fr/v1Une liste renvoie un objet data (tableau) + pagination :
{
"data": [ { "id": "…", "reference": "INT-0433", "status": "completed", … } ],
"pagination": { "limit": 50, "offset": 0, "total": 433 }
}Un accès par identifiant renvoie { "data": { … } }. Une erreur renvoie { "error": "…" } avec le code HTTP correspondant.
Ressources disponibles
Toutes ces ressources sont disponibles. La dernière colonne indique seulement si le paramètre ?status peut filtrer cette ressource — « Non » ne veut pas dire indisponible.
| Ressource | Description | Filtre par statut |
|---|---|---|
| interventions | Interventions terrain (statut, planification, technicien, client…) | Oui |
| demandes | Demandes d'intervention émises par vos clients | Oui |
| clients | Vos clients finaux | Non |
| sites | Sites / lieux d'intervention de vos clients | Non |
| invoices | Factures | Oui |
| prebillings | Relevés de préfacturation clients (par période) | Oui |
| contracts | Contrats clients | Oui |
| extra-costs | Frais supplémentaires d'intervention | Oui |
| projects | Projets | Oui |
| ratings | Notes / évaluations d'intervention | Non |
| shipments | Expéditions de matériel (logistique) | Oui |
| team | Membres internes de votre organisation | Non |
| subcontractors | Vos sociétés sous-traitantes | Non |
| stats | Statistiques / KPI de l'organisation — autorisation de l'endpoint /stats (agrégat, pas de liste) | Non |
Endpoints
Liste paginée. Paramètres : limit (1–200, défaut 50), offset (défaut 0), status (ressources avec « Oui » dans le tableau ci-dessus).
Un enregistrement précis de votre organisation.
Informations sur l'API et liste des ressources.
KPI de l'organisation : interventions (total, par statut, terminées, durée moyenne), factures, et compteurs (clients, sites, sous-traitants, équipe). Filtres de période optionnels.
Relevé d'un client pour la facturation : ses interventions, factures et préfacturations sur la période, avec les totaux (montant facturé, coût des interventions).
Relevé d'un sous-traitant : ce qu'on lui doit, et pour quelles interventions. Renvoie subcontractor, period, interventions[] (avec le montant arrêté, l'état de la préfacturation et si elle est déjà facturée), extra_costs[], invoices[] (avec source : qonto ou depot) et totals.
Lire totals.net_to_pay, pas le total facturé. Il ne compte que ce qui est réellement dû : lignes validées, pas encore rattachées à une facture. Une ligne en attente d'accord tarifaire n'est pas une dette — le sous-traitant peut encore la contester — et une ligne déjà rattachée à une facture ne doit pas être comptée deux fois. Les autres totaux (prebilled_amount, extra_costs_amount, awaiting_tarif_acceptance) servent au contrôle, pas au règlement.
Exemple : les 10 dernières interventions terminées
GET https://api.intervizio.fr/v1/interventions?status=completed&limit=10Exemple : relevé d'un client sur une période
GET https://api.intervizio.fr/v1/clients/{id}/statement?start=2026-01-01&end=2026-06-30Exemple : relevé d'un sous-traitant
GET https://api.intervizio.fr/v1/subcontractors/{id}/statement?start=2026-07-01&end=2026-09-30Une sous-ressource inconnue renvoie désormais 404, et non plus la fiche de la ressource en 200 : une API qui répond « oui » à une route absente ne se débogue pas.
Écriture (création & modification)
Disponible pour clients, sites, demandes, interventions, avec une clé disposant de l'opération Création et/ou Modification. Corps au format JSON.
Crée un enregistrement. organization_id est forcé sur votre organisation (ignoré dans le corps). Les liens fournis (client_id, demande_id, site_id) doivent appartenir à votre organisation. Réponse 201.
Modifie un enregistrement de votre organisation (mise à jour partielle : seuls les champs fournis sont modifiés). Utilisez PUT pour les modifications. PATCH est aussi accepté via l'en-tête X-HTTP-Method-Override: PATCH sur une requête POST.
Champs requis à la création : clients/sites → name ; demandes → title, client_id ; interventions → title.
Créer un client (cURL)
curl -X POST -H "x-api-key: iv_live_..." -H "Content-Type: application/json" \
-d '{"name":"Nouveau client","city":"Paris","email":"contact@client.fr"}' \
"https://api.intervizio.fr/v1/clients"Modifier un client (cURL)
curl -X PUT -H "x-api-key: iv_live_..." -H "Content-Type: application/json" \
-d '{"phone":"0102030405"}' \
"https://api.intervizio.fr/v1/clients/{id}"Exemples de code (lecture)
cURL
curl -H "x-api-key: iv_live_..." \
"https://api.intervizio.fr/v1/interventions?limit=10"JavaScript (fetch)
const res = await fetch(
"https://api.intervizio.fr/v1/interventions?limit=10",
{ headers: { "x-api-key": "iv_live_..." } }
);
const { data, pagination } = await res.json();
console.log(pagination.total, data);Python (requests)
import requests
r = requests.get(
"https://api.intervizio.fr/v1/interventions",
headers={"x-api-key": "iv_live_..."},
params={"limit": 10, "status": "completed"},
)
data = r.json()["data"]
print(data)Erreurs & limites
| Code | Signification |
|---|---|
| 401 | Clé absente, invalide, expirée ou révoquée |
| 403 | L'accès API est réservé au pack Grand Compte (network_500) |
| 404 | Ressource inconnue ou enregistrement introuvable dans votre organisation |
| 429 | Limite de débit dépassée (120 req/min) — réessayez après le délai Retry-After |
429 avec un en-tête Retry-After.