🔒 Bêta privée — nous finalisons notre cachet électronique qualifié eIDAS. Demander un accès anticipé →
Développeur · API REST

Automatisez la certification de contenu numérique via l'API

L'API REST d'InstantProof vous permet de certifier n'importe quelle URL publique de façon programmatique. Authentifiez-vous avec une clé API Bearer, envoyez une URL en POST et recevez un certificat PDF signé accompagné d'un dossier de preuves complet — le même horodatage RFC 3161 et la même signature Ed25519 que l'interface web.

RESTJSON sur HTTPS
BearerAuthentification par clé API
RFC 3161Horodatages qualifiés
Illustration de certification via l'API

Prérequis

1
Forfait Pro ou supérieurL'API nécessite l'abonnement Pro (fonctionnalité api_access). Abonnez-vous ici.
2
Une clé APICréez-en une depuis Paramètres → Clés API. Copiez la clé immédiatement — elle n'est affichée qu'une seule fois.
3
Une URL en https:// à certifierL'API certifie les pages web accessibles publiquement. L'URL doit être une adresse https:// valide.

Démarrage rapide

Trois étapes pour passer de zéro à un certificat PDF signé.

Étape 1 — Créer une clé API

Connectez-vous, accédez à Développeur → Clés API, puis cliquez sur Créer une clé API. Copiez la clé — elle n'est affichée qu'une seule fois.

Étape 2 — Créer un certificat

Envoyez une requête POST avec votre URL :

curl -X POST https://secure.instantproof.legal/api/v1/certificates \
  -H "Authorization: Bearer ip_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/page-to-certify"}'

Réponse 201 Created :

{
  "certificateId": "abc123…",
  "recordingId":   "def456…",
  "url":           "https://example.com/page-to-certify",
  "finalUrl":      "https://example.com/page-to-certify",
  "status":        "ready",
  "links": {
    "self":        "/api/v1/certificates/def456…",
    "certificate": "/api/v1/certificates/def456…/download"
  }
}

Étape 3 — Télécharger le certificat PDF

Suivez l'URL links.certificate avec votre clé API. Le serveur renvoie une redirection 302 vers une URL de téléchargement pré-signée :

curl -L \
  -H "Authorization: Bearer ip_live_xxxxxxxxxxxxxxxx" \
  "https://secure.instantproof.legal/api/v1/certificates/def456…/download" \
  -o certificate.pdf

Le PDF téléchargé est le même certificat PDF signé que celui produit par l'interface web, vérifiable sur /fr/certificate.html.

Référence de l'API

URL de base : https://secure.instantproof.legal
Tous les points de terminaison renvoient du JSON. Authentification : Authorization: Bearer <key>.

POST /api/v1/certificates

Créer un nouveau certificat de site web. La plateforme capture l'URL dans un navigateur headless, produit un journal réseau HAR et une capture d'écran, signe le manifeste avec Ed25519 et l'ancre à un horodatage qualifié RFC 3161. L'opération prend de 10 à 60 secondes.

Corps de la requête (JSON)

ChampTypeDescription
urlstringrequisUne URL https:// valide à certifier. Elle doit être accessible publiquement.

Réponse 201 Created

ChampTypeDescription
certificateIdstringIdentifiant de certificat lisible (affiché sur le PDF).
recordingIdstringUUID interne de l'enregistrement. À utiliser dans les appels API ultérieurs.
urlstringL'URL que vous avez soumise.
finalUrlstringL'URL après d'éventuelles redirections, telle que vue par le navigateur.
statusstring"ready" — le certificat est immédiatement disponible.
links.selfstringChemin pour récupérer les métadonnées de ce certificat.
links.certificatestringChemin pour télécharger le PDF. Nécessite une authentification.

Réponses d'erreur

StatuterrorSignification
400invalid_urlLe champ url est absent ou n'est pas une adresse https:// valide.
400invalid_jsonLe corps de la requête n'est pas un JSON valide.
401invalid_api_keyEn-tête Authorization absent ou invalide.
402api_access_requiredVotre compte ne dispose pas du forfait Pro. Abonnez-vous.
403subscription_requiredLes certificats web nécessitent un abonnement forfaitaire.
403insufficient_scopeLa clé API ne dispose pas de la portée certificates:write.
413payload_too_largeLe corps de la requête dépasse 64 Ko.
429quota_exceededQuota quotidien de captures API atteint. Réinitialisé chaque jour.
429rate_limitedTrop de requêtes. Consultez l'en-tête Retry-After.
429service_busyService de capture saturé. Réessayez après environ 30 secondes.
502capture_failedLe navigateur n'a pas pu charger l'URL.
502certification_failedLa capture n'a produit aucune preuve exploitable (par ex. HAR vide).

GET /api/v1/certificates/:recordingId

Récupérer les métadonnées d'un certificat que vous avez créé précédemment.

Paramètres de chemin

ParamètreDescription
recordingIdrequisLe recordingId renvoyé par POST /api/v1/certificates.

Réponse 200 OK

ChampTypeDescription
certificateIdstringIdentifiant de certificat lisible.
recordingIdstringUUID interne de l'enregistrement.
typestringType d'enregistrement (par ex. "webcapture").
statusstring"ready" une fois le certificat disponible.
urlstringL'URL qui a été certifiée.
createdAtstringHorodatage de création au format ISO 8601.
linksobjectChemins self et certificate.

GET /api/v1/certificates/:recordingId/download

Télécharger le certificat PDF signé. Renvoie 302 Found — suivez la redirection pour recevoir le fichier. Utilisez curl -L ou requests.get(..., allow_redirects=True).

Authentification

Toutes les requêtes API doivent inclure :

Authorization: Bearer ip_live_xxxxxxxxxxxxxxxx

Les clés sont créées depuis Paramètres → Développeur → Clés API. Une clé authentifie en tant que votre compte — traitez-la comme un mot de passe. Révoquez-la immédiatement en cas de fuite.

Les clés sont préfixées par ip_live_ pour les comptes en production. Ce préfixe vous aide à les identifier dans le code ou les fichiers d'environnement.

Limites de débit & quotas

~30

Requêtes par minute

30 requêtes/minute en continu (burst : 30). Au-delà, la réponse est 429 rate_limited avec un en-tête Retry-After.

Quotidien

Quota quotidien de captures

Le forfait Pro accorde un nombre fixe de créations de certificats par jour. Le quota est réinitialisé chaque jour. Le dépassement renvoie 429 quota_exceeded.

64 Ko

Limite du corps de requête

Le corps JSON de la requête ne doit pas dépasser 64 Ko. En pratique, une URL reste largement en dessous de cette limite.

Exemples de code

Python

import requests

API_KEY = "ip_live_xxxxxxxxxxxxxxxx"
BASE    = "https://secure.instantproof.legal"

# Créer un certificat
resp = requests.post(
    f"{BASE}/api/v1/certificates",
    json={"url": "https://example.com"},
    headers={"Authorization": f"Bearer {API_KEY}"},
)
resp.raise_for_status()
data = resp.json()
recording_id = data["recordingId"]

# Télécharger le PDF
pdf = requests.get(
    f"{BASE}/api/v1/certificates/{recording_id}/download",
    headers={"Authorization": f"Bearer {API_KEY}"},
    allow_redirects=True,
)
pdf.raise_for_status()
with open("certificate.pdf", "wb") as f:
    f.write(pdf.content)
print(f"Certificat enregistré ({len(pdf.content)} octets)")

Node.js (fetch)

const API_KEY = process.env.INSTANTPROOF_API_KEY;
const BASE    = "https://secure.instantproof.legal";

// Créer un certificat
const res = await fetch(`${BASE}/api/v1/certificates`, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ url: "https://example.com" }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { recordingId, links } = await res.json();

// Télécharger le PDF
const pdf = await fetch(`${BASE}${links.certificate}`, {
  headers: { "Authorization": `Bearer ${API_KEY}` },
  redirect: "follow",
});
const buffer = Buffer.from(await pdf.arrayBuffer());
require("fs").writeFileSync("certificate.pdf", buffer);

Shell (curl)

# Définissez votre clé
export INSTANTPROOF_API_KEY="ip_live_xxxxxxxxxxxxxxxx"

# Créer
CERT=$(curl -sf -X POST https://secure.instantproof.legal/api/v1/certificates \
  -H "Authorization: Bearer $INSTANTPROOF_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}')

echo "$CERT" | python3 -m json.tool

RECORDING_ID=$(echo "$CERT" | python3 -c "import sys,json; print(json.load(sys.stdin)['recordingId'])")

# Télécharger
curl -sfL \
  -H "Authorization: Bearer $INSTANTPROOF_API_KEY" \
  "https://secure.instantproof.legal/api/v1/certificates/$RECORDING_ID/download" \
  -o certificate.pdf

ls -lh certificate.pdf

Questions fréquentes

Combien de temps prend la création d'un certificat ?

En général de 10 à 60 secondes, selon le temps de chargement de la page cible. La requête POST reste bloquante jusqu'à ce que le certificat soit prêt — il n'y a pas d'étape d'interrogation (polling).

L'API prend-elle en charge les certificats de fichiers (PDF, images téléversées) ?

L'API actuelle prend uniquement en charge la certification de sites web (URL). Le téléversement de fichiers est disponible via l'interface web sur secure.instantproof.legal/certificates/new.

Puis-je vérifier un certificat créé via l'API ?

Oui. Le PDF produit par l'API est identique à celui créé via l'interface web. Glissez-le sur instantproof.legal/fr/certificate.html pour vérifier la signature Ed25519 et la chaîne d'horodatage RFC 3161.

Que se passe-t-il si l'URL est inaccessible ?

Le service de capture renvoie une erreur 502 capture_failed. Votre quota quotidien n'est pas consommé.

Les certificats créés via l'API sont-ils visibles dans le tableau de bord web ?

Oui. Chaque certificat créé via l'API apparaît dans votre tableau de bord Certificats sous Mes certificats de sites web, aux côtés des certificats créés via l'interface web.