Aller au contenu

API

Tout ce que fait l'interface web passe par cette API. Elle est publique et documentée pour que vous puissiez automatiser ce que vous voulez : créer un plan depuis votre dépôt d'infrastructure, déclencher une exécution après une sauvegarde, exporter vos rapports.

Base : https://api.restoreproof.io/api/v1

Les routes ci-dessous sont celles que le serveur enregistre réellement. Le runner ne figure pas ici : il parle un autre protocole (gRPC), sur un autre port.

Authentification

Un jeton d'accès JWT dans l'en-tête :

Authorization: Bearer <access_token>
Jeton Durée de vie par défaut
Accès 15 minutes
Rafraîchissement 7 jours

Obtenir un jeton

curl -X POST https://api.restoreproof.io/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"vous@exemple.fr","password":"..."}'

Si la double authentification est activée, la réponse est un défi à échanger contre une session sur POST /auth/two-factor/verify.

Le rafraîchir

curl -X POST https://api.restoreproof.io/api/v1/auth/refresh \
  -H 'Content-Type: application/json' \
  -d '{"refresh_token":"..."}'

Routes d'authentification

Méthode Route Jeton requis
POST /auth/register non
POST /auth/login non
POST /auth/two-factor/verify non
POST /auth/refresh non
POST /auth/magic-link non
GET /auth/verify-magic-link non
POST /auth/complete-registration non
GET /auth/verify-email non
POST /auth/password-reset/request non
POST /auth/password-reset/confirm non
POST /auth/logout oui
GET /auth/me oui
POST /auth/verify-email/resend oui
GET /auth/two-factor oui
POST /auth/two-factor/setup oui
POST /auth/two-factor/confirm oui
POST /auth/two-factor/disable oui
POST /auth/two-factor/recovery-codes oui

Les routes d'authentification ont leur propre limite de débit, plus stricte que le reste de l'API.

Ce que vous manipulez

Toutes les routes qui suivent exigent un jeton, et sont automatiquement limitées à votre organisation : il n'existe aucun moyen de lire les données d'une autre.

Les écritures demandent au moins le rôle operator.

Runners

Méthode Route Rôle
GET /runners
POST /runners operator
GET /runners/{id}
PUT /runners/{id} operator
DELETE /runners/{id} operator
GET /runners/{id}/instructions
POST /runners/{id}/regenerate-key operator
GET /runners/{id}/config operator — en lecture aussi

/runners/{id}/config rend le fichier de configuration prérempli, avec la clé d'API en clair. C'est la seule route en lecture qui exige le rôle operator.

Sources

Méthode Route
GET /sources
POST /sources
GET /sources/{id}
PUT /sources/{id}
DELETE /sources/{id}

Plans

Méthode Route
GET /plans
POST /plans
GET /plans/{id}
PUT /plans/{id}
DELETE /plans/{id}

Le mode essai, pour éprouver un plan qui n'est pas encore enregistré :

Méthode Route
POST /plans/trial
GET /plans/trial/{id}
POST /plans/trial/{id}/cancel

Il est monté sous /plans parce que ce qu'il exécute est un document de plan — en général un plan encore en cours d'écriture, qui n'a pas d'identifiant.

Exécutions

Méthode Route Note
GET /runs
POST /runs Décompte votre quota mensuel.
GET /runs/stats
GET /runs/{id}
DELETE /runs/{id} Essais seulement, et seulement une fois terminés.
POST /runs/{id}/cancel
GET /runs/{id}/report

Rapports

Méthode Route
GET /reports
GET /reports/{id}/download

/download rend un fichier autonome, vérifiable hors ligne : c'est l'artefact destiné à un auditeur.

Planifications et déclencheurs

Méthode Route
GET POST /schedules
GET PUT DELETE /schedules/{id}
POST /schedules/{id}/trigger
GET POST /webhook-triggers
GET PUT DELETE /webhook-triggers/{id}
POST /webhook-triggers/{id}/regenerate-token
GET /webhook-triggers/{id}/events

Organisation

Méthode Route
GET PUT DELETE /organization
PUT /organization/slug
GET POST /organization/members
PUT DELETE /organization/members/{id}
GET /organization/invitations
DELETE /organization/invitations/{id}

Facturation

Méthode Route Rôle
GET /billing/subscription
GET /billing/plans
GET /billing/invoices
GET /billing/usage
POST /billing/checkout admin — premier achat uniquement
POST /billing/change-plan admin — tout changement ensuite
POST /billing/portal admin

Warning

/billing/checkout sert au premier achat. L'appeler sur une organisation déjà abonnée crée un second abonnement. Pour tout changement, c'est /billing/change-plan.

Journal d'audit

Méthode Route
GET /audit-logs
GET /audit-logs/filters
GET /audit-logs/export (CSV)
GET /audit-logs/{id}

Modèles de plan

Méthode Route
GET /templates
GET /templates/{id}

Les routes sans jeton

Trois routes n'en demandent pas, chacune pour une raison précise.

Déclencher une exécution depuis votre système de sauvegarde

POST /webhooks/trigger/{token}

Le jeton est l'authentification. C'est ce qu'on appelle à la fin d'une tâche de sauvegarde pour vérifier tout de suite ce qui vient d'être écrit :

curl -X POST https://api.restoreproof.io/api/v1/webhooks/trigger/$RP_TRIGGER_TOKEN

Vérifier une attestation

GET /public/attestations/{id}

Publique volontairement : le lecteur est un auditeur qui tient un rapport téléchargé et n'a pas de compte. Elle confirme une empreinte qu'il possède déjà et ne rend aucune donnée client. Son débit est limité à part, à 2 requêtes par seconde, pour que parcourir des identifiants de rapport reste aussi lent que c'est inutile.

Le webhook Stripe

POST /webhooks/stripe

Réservé à Stripe. La signature de chaque événement est vérifiée.

Santé du service

Route Rend
GET /health Vivant.
GET /health/detailed Détail, dont la base de données.
GET /ready Prêt à servir.
GET /live Sonde de vivacité.

Ces routes ne sont pas sous /api/v1.

Codes de réponse

Code Signification
200 / 201 Succès.
400 Requête mal formée.
401 Jeton absent, invalide ou expiré.
403 Rôle insuffisant.
404 Inexistant — ou n'appartenant pas à votre organisation.
402 Quota dépassé. Nombre de plans, de runners, ou d'exécutions du mois.
429 Trop de requêtes.
500 Erreur du service.

Un 402 n'est pas une erreur technique : c'est votre offre qui est atteinte. La réponse dit quelle limite, et l'interface propose le changement d'offre.