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 :
| 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¶
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 :
Vérifier une attestation¶
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¶
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.