API REST · v1

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.
L'écriture (création / modification) est disponible pour clients, sites, demandes et interventions. Les autres ressources sont en lecture. La suppression n'est pas exposée.

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 :

http
x-api-key: iv_live_votre_cle_ici

L'en-tête Authorization: Bearer iv_live_… est également accepté. Ne partagez jamais votre clé publiquement (elle donne accès à vos données).

Démo vs Live. Deux types de clés : 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/v1

Une liste renvoie un objet data (tableau) + pagination :

json
{
  "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.

RessourceDescriptionFiltre par statut
interventionsInterventions terrain (statut, planification, technicien, client…) Oui
demandesDemandes d'intervention émises par vos clients Oui
clientsVos clients finauxNon
sitesSites / lieux d'intervention de vos clientsNon
invoicesFactures Oui
prebillingsRelevés de préfacturation clients (par période) Oui
contractsContrats clients Oui
extra-costsFrais supplémentaires d'intervention Oui
projectsProjets Oui
ratingsNotes / évaluations d'interventionNon
shipmentsExpéditions de matériel (logistique) Oui
teamMembres internes de votre organisationNon
subcontractorsVos sociétés sous-traitantesNon
statsStatistiques / KPI de l'organisation — autorisation de l'endpoint /stats (agrégat, pas de liste)Non

Endpoints

GET /{ressource}

Liste paginée. Paramètres : limit (1–200, défaut 50), offset (défaut 0), status (ressources avec « Oui » dans le tableau ci-dessus).

GET /{ressource}/{id}

Un enregistrement précis de votre organisation.

GET /

Informations sur l'API et liste des ressources.

GET /stats?start&end

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.

GET /clients/{id}/statement?start&end

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).

GET /subcontractors/{id}/statement?start&end

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

http
GET https://api.intervizio.fr/v1/interventions?status=completed&limit=10

Exemple : relevé d'un client sur une période

http
GET https://api.intervizio.fr/v1/clients/{id}/statement?start=2026-01-01&end=2026-06-30

Exemple : relevé d'un sous-traitant

http
GET https://api.intervizio.fr/v1/subcontractors/{id}/statement?start=2026-07-01&end=2026-09-30

Une 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.

POST /{ressource}

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.

PUT /{ressource}/{id}

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)

bash
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)

bash
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

bash
curl -H "x-api-key: iv_live_..." \
  "https://api.intervizio.fr/v1/interventions?limit=10"

JavaScript (fetch)

javascript
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)

python
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

CodeSignification
401Clé absente, invalide, expirée ou révoquée
403L'accès API est réservé au pack Grand Compte (network_500)
404Ressource inconnue ou enregistrement introuvable dans votre organisation
429Limite de débit dépassée (120 req/min) — réessayez après le délai Retry-After
Débit : 120 requêtes par minute et par clé. Au-delà, réponse 429 avec un en-tête Retry-After.