🔒 Private Beta — wir schließen unser qualifiziertes eIDAS-Siegel ab. Frühen Zugang anfragen →
Entwickler · REST-API

Zertifizierung digitaler Inhalte über die API automatisieren

Mit der InstantProof-REST-API können Sie jede öffentliche URL programmatisch zertifizieren. Authentifizieren Sie sich mit einem Bearer-API-Schlüssel, senden Sie eine URL per POST und erhalten Sie ein signiertes PDF-Zertifikat mit vollständigem Beweispaket — mit demselben RFC 3161-Zeitstempel und derselben Ed25519-Signatur wie über die Weboberfläche.

RESTJSON über HTTPS
BearerAPI-Schlüssel-Authentifizierung
RFC 3161Qualifizierte Zeitstempel
Illustration der API-Zertifizierung

Voraussetzungen

1
Pro-Tarif oder höherDie API erfordert das Pro-Abonnement (Funktion api_access). Hier abonnieren.
2
Ein API-SchlüsselErstellen Sie einen unter Einstellungen → API-Schlüssel. Kopieren Sie den Schlüssel sofort — er wird nur einmal angezeigt.
3
Eine zu zertifizierende https://-URLDie API zertifiziert öffentlich erreichbare Webseiten. Die URL muss eine gültige https://-Adresse sein.

Schnellstart

Drei Schritte von null bis zum signierten PDF-Zertifikat.

Schritt 1 — Einen API-Schlüssel erstellen

Melden Sie sich an, gehen Sie zu Entwickler → API-Schlüssel und klicken Sie auf API-Schlüssel erstellen. Kopieren Sie den Schlüssel — er wird nur einmal angezeigt.

Schritt 2 — Ein Zertifikat erstellen

Senden Sie eine POST-Anfrage mit Ihrer 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"}'

Antwort 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"
  }
}

Schritt 3 — Das PDF-Zertifikat herunterladen

Folgen Sie der URL links.certificate mit Ihrem API-Schlüssel. Der Server gibt eine 302-Weiterleitung zu einer vorsignierten Download-URL zurück:

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

Das heruntergeladene PDF ist dasselbe signierte PDF-Zertifikat, das die Weboberfläche erzeugt, und kann unter /de/certificate.html überprüft werden.

API-Referenz

Basis-URL: https://secure.instantproof.legal
Alle Endpunkte geben JSON zurück. Authentifizierung: Authorization: Bearer <key>.

POST /api/v1/certificates

Erstellt ein neues Website-Zertifikat. Die Plattform erfasst die URL in einem Headless-Browser, erzeugt ein HAR-Netzwerkprotokoll und einen Screenshot, signiert das Manifest mit Ed25519 und verankert es mit einem qualifizierten RFC 3161-Zeitstempel. Der Vorgang dauert 10–60 Sekunden.

Anfragetext (JSON)

FeldTypBeschreibung
urlstringerforderlichEine gültige https://-URL zur Zertifizierung. Muss öffentlich erreichbar sein.

Antwort 201 Created

FeldTypBeschreibung
certificateIdstringMenschenlesbare Zertifikats-ID (auf dem PDF angezeigt).
recordingIdstringInterne Aufzeichnungs-UUID. In nachfolgenden API-Aufrufen verwenden.
urlstringDie von Ihnen übermittelte URL.
finalUrlstringDie URL nach etwaigen Weiterleitungen, wie vom Browser gesehen.
statusstring"ready" — das Zertifikat ist sofort verfügbar.
links.selfstringPfad zum Abrufen der Metadaten dieses Zertifikats.
links.certificatestringPfad zum Herunterladen des PDFs. Erfordert Authentifizierung.

Fehlerantworten

StatuserrorBedeutung
400invalid_urlDas Feld url fehlt oder ist keine gültige https://-Adresse.
400invalid_jsonDer Anfragetext ist kein gültiges JSON.
401invalid_api_keyFehlender oder ungültiger Authorization-Header.
402api_access_requiredIhr Konto verfügt nicht über den Pro-Tarif. Abonnieren.
403subscription_requiredWebsite-Zertifikate erfordern ein Pauschal-Abonnement.
403insufficient_scopeDem API-Schlüssel fehlt der Geltungsbereich certificates:write.
413payload_too_largeDer Anfragetext überschreitet 64 KB.
429quota_exceededTägliches API-Erfassungskontingent erreicht. Wird täglich zurückgesetzt.
429rate_limitedZu viele Anfragen. Siehe Retry-After-Header.
429service_busyErfassungsdienst ausgelastet. Nach ca. 30 Sekunden erneut versuchen.
502capture_failedDer Browser konnte die URL nicht laden.
502certification_failedDie Erfassung lieferte keine verwertbaren Beweise (z. B. leeres HAR).

GET /api/v1/certificates/:recordingId

Ruft die Metadaten eines zuvor von Ihnen erstellten Zertifikats ab.

Pfadparameter

ParameterBeschreibung
recordingIderforderlichDie von POST /api/v1/certificates zurückgegebene recordingId.

Antwort 200 OK

FeldTypBeschreibung
certificateIdstringMenschenlesbare Zertifikats-ID.
recordingIdstringInterne Aufzeichnungs-UUID.
typestringAufzeichnungstyp (z. B. "webcapture").
statusstring"ready", sobald das Zertifikat verfügbar ist.
urlstringDie zertifizierte URL.
createdAtstringErstellungszeitstempel im Format ISO 8601.
linksobjectPfade self und certificate.

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

Lädt das signierte PDF-Zertifikat herunter. Gibt 302 Found zurück — folgen Sie der Weiterleitung, um die Datei zu erhalten. Verwenden Sie curl -L oder requests.get(..., allow_redirects=True).

Authentifizierung

Alle API-Anfragen müssen Folgendes enthalten:

Authorization: Bearer ip_live_xxxxxxxxxxxxxxxx

Schlüssel werden unter Einstellungen → Entwickler → API-Schlüssel erstellt. Ein Schlüssel authentifiziert sich als Ihr Konto — behandeln Sie ihn wie ein Passwort. Widerrufen Sie ihn sofort, falls er offengelegt wird.

Schlüssel für Live-Konten beginnen mit dem Präfix ip_live_. Das Präfix hilft Ihnen, sie im Code oder in Umgebungsdateien zu erkennen.

Ratenbegrenzungen & Kontingente

~30

Anfragen pro Minute

30 Anfragen/Minute dauerhaft (Burst: 30). Bei Überschreitung wird 429 rate_limited mit einem Retry-After-Header zurückgegeben.

Täglich

Tägliches Erfassungskontingent

Der Pro-Tarif gewährt eine feste Anzahl an Zertifikatserstellungen pro Tag. Das Kontingent wird täglich zurückgesetzt. Bei Überschreitung wird 429 quota_exceeded zurückgegeben.

64 KB

Größenlimit des Anfragetexts

Der JSON-Anfragetext darf 64 KB nicht überschreiten. In der Praxis liegt eine URL deutlich unter diesem Limit.

Code-Beispiele

Python

import requests

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

# Ein Zertifikat erstellen
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"]

# Das PDF herunterladen
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"Certificate saved ({len(pdf.content)} bytes)")

Node.js (fetch)

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

// Ein Zertifikat erstellen
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();

// Das PDF herunterladen
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)

# Schlüssel setzen
export INSTANTPROOF_API_KEY="ip_live_xxxxxxxxxxxxxxxx"

# Erstellen
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'])")

# Herunterladen
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

Häufig gestellte Fragen

Wie lange dauert die Erstellung eines Zertifikats?

Typischerweise 10–60 Sekunden, abhängig von der Ladezeit der Zielseite. Die POST-Anfrage blockiert, bis das Zertifikat fertig ist — es gibt keinen Polling-Schritt.

Unterstützt die API Datei-Zertifikate (PDF-, Bild-Uploads)?

Die aktuelle API unterstützt ausschließlich die Website-Zertifizierung (URL). Datei-Uploads sind über die Weboberfläche unter secure.instantproof.legal/certificates/new verfügbar.

Kann ich ein über die API erstelltes Zertifikat überprüfen?

Ja. Das von der API erzeugte PDF ist identisch mit einem über die Weboberfläche erstellten. Ziehen Sie es auf instantproof.legal/de/certificate.html, um die Ed25519-Signatur und die RFC 3161-Zeitstempelkette zu überprüfen.

Was passiert, wenn die URL nicht erreichbar ist?

Der Erfassungsdienst gibt einen Fehler 502 capture_failed zurück. Ihr Tageskontingent wird nicht verbraucht.

Sind über die API erstellte Zertifikate im Web-Dashboard sichtbar?

Ja. Jedes über die API erstellte Zertifikat erscheint in Ihrem Zertifikate-Dashboard unter Meine Website-Zertifikate, zusammen mit allen über die Weboberfläche erstellten Zertifikaten.