API-Dokumentation

Archivdaten klar abrufen.

Durchsuche, filtere und extrahiere belegte Produkt-Dossiers in einem strukturierten Aufruf – oder nutze die Archiv-API für Dokumentdetails, Run-Monitoring und kontrollierte Archivläufe.

POST /api/v1/dossiers/query
Authorization: Bearer fyn_dossier_preview_2026_07

{"filters":{"productTypes":["tagesgeld"]},
 "select":{"fields":["interest"]}}
200 OKdossiers[] · typed facts · evidence · pagination

Authentifizierung

Bearer Token pro Anfrage.

Sende den Token im HTTP-Header. Lesende und schreibende Zugriffe sind bewusst getrennt, damit Integrationen nur die nötigen Rechte erhalten.

Dossier Preview (read-only)

fyn_dossier_preview_2026_07Produkte, strukturierte Fakten und Quelldokumente

Lesender Zugriff

ARCHIVE_READ_TOKENSuche, Details, Runs und Capabilities

Schreibender Zugriff

ARCHIVE_WRITE_TOKENNeue Archivläufe, Flue-Batches und Audit-Refreshes auslösen
Header
Authorization: Bearer fyn_dossier_preview_2026_07

Für AI Agents

Dossiers in einem Aufruf filtern und extrahieren.

POST /api/v1/dossiers/query durchsucht Produktnamen, Fakten, Werte, Belegzitate und Dokumenttitel. Typisierte Bedingungen wie gte filtern Zahlen direkt; mit select.fields kommt nur die benötigte Fakten-Projektion samt Quellenbeleg zurück.

Machine discovery
GET /llms.txt
GET /api/v1/openapi.json
Beispiel: Tagesgeld ab 2 %
curl -X POST https://archive.fynfyn.com/api/v1/dossiers/query \
  -H 'Authorization: Bearer fyn_dossier_preview_2026_07' \
  -H 'Content-Type: application/json' \
  -d '{
    "filters": {
      "productTypes": ["tagesgeld"],
      "verifiedEvidenceOnly": true,
      "conditions": [{
        "field": "interest.baseRate",
        "operator": "gte",
        "value": 2
      }]
    },
    "select": {
      "fields": ["interest"],
      "includeEvidence": true
    }
  }'

Read-only Playground

GET-Endpunkte direkt testen.

Der Playground führt nur sichere GET-Anfragen aus. Der Token bleibt im Speicher dieser Seite und wird nicht gespeichert.

Dokumenttypen, Kategorien und API-Fähigkeiten abrufen.https://archive.fynfyn.com/api/v1/capabilities
Antwortidle
Noch keine Anfrage gesendet.

Referenz

Alle Archiv-Endpunkte.

Die Beispiele verwenden die konfigurierte Archiv-Basis-URL dieser Umgebung. Pfadparameter wie fileId, documentId und runId ersetzt du durch IDs aus Such- oder Listen-Antworten.

GET/api/v1/health
Kein Token

Health prüfen

Prüft, ob der Archivdienst erreichbar ist und die SQLite-Datenbank geöffnet werden kann.

Keine Parameter.
cURL
curl -X GET 'https://archive.fynfyn.com/api/v1/health'
JavaScript
const response = await fetch('https://archive.fynfyn.com/api/v1/health', {
  headers: {}
})

if (!response.ok) throw new Error(await response.text())
const data = await response.json()
AntwortJSON
{
  "ok": true,
  "service": "fynfyn.archive",
  "sqlite": {
    "path": "/app/apps/archive/data/archive.sqlite"
  }
}
GET/api/v1/capabilities
Read Token

Capabilities abrufen

Liefert erlaubte Dokumenttypen, Kategorien und die aktuellen API-Fähigkeiten.

Keine Parameter.
cURL
curl -X GET 'https://archive.fynfyn.com/api/v1/capabilities' \
  -H 'Authorization: Bearer <ARCHIVE_READ_TOKEN>'
JavaScript
const response = await fetch('https://archive.fynfyn.com/api/v1/capabilities', {
  headers: {
    Authorization: 'Bearer <ARCHIVE_READ_TOKEN>'
  }
})

if (!response.ok) throw new Error(await response.text())
const data = await response.json()
AntwortJSON
{
  "schema": "fynfyn.archive.capabilities",
  "version": 1,
  "documentTypes": ["pdf", "html"],
  "categories": ["preis_leistung", "agb", "entgeltinformation"],
	  "api": {
	    "readRequiresBearerToken": true,
	    "writeRequiresBearerToken": true,
	    "groupedFiles": true,
	    "legalAuditReviewFindings": true,
	    "legalAuditIssueRead": true,
	    "manualLegalAuditIssueAdjudication": true
	  }
	}
GET/api/v1/files/{fileId}
Read Token

Datei-Details abrufen

Liefert eine gruppierte Datei, extrahierten Text und alle bekannten Fundstellen.

NameTypPflichtBeschreibung
fileIdstringJaID der gruppierten Datei aus der Dateisuche.
cURL
curl -X GET 'https://archive.fynfyn.com/api/v1/files/file_123' \
  -H 'Authorization: Bearer <ARCHIVE_READ_TOKEN>'
JavaScript
const response = await fetch('https://archive.fynfyn.com/api/v1/files/file_123', {
  headers: {
    Authorization: 'Bearer <ARCHIVE_READ_TOKEN>'
  }
})

if (!response.ok) throw new Error(await response.text())
const data = await response.json()
AntwortJSON
{
  "file": {
    "id": "file_...",
    "title": "Entgeltinformation",
    "textUrl": "https://archive.fynfyn.com/files/file_.../text.txt"
  },
  "text": {
    "extractionStatus": "extracted",
    "text": "..."
  },
  "occurrences": []
}
GET/api/v1/documents/{documentId}
Read Token

Dokument-Details abrufen

Liefert ein einzelnes Dokument mit Download-URL, Text-URL, Extraktionsstatus und Versionshistorie.

NameTypPflichtBeschreibung
documentIdstringJaDokument-ID aus der Dokumentensuche.
cURL
curl -X GET 'https://archive.fynfyn.com/api/v1/documents/doc_123' \
  -H 'Authorization: Bearer <ARCHIVE_READ_TOKEN>'
JavaScript
const response = await fetch('https://archive.fynfyn.com/api/v1/documents/doc_123', {
  headers: {
    Authorization: 'Bearer <ARCHIVE_READ_TOKEN>'
  }
})

if (!response.ok) throw new Error(await response.text())
const data = await response.json()
AntwortJSON
{
  "document": {
    "id": "doc_...",
    "title": "AGB",
    "downloadUrl": "https://archive.fynfyn.com/documents/doc_.../download"
  },
  "text": {
    "extractionStatus": "extracted",
    "text": "..."
  },
  "versions": [
    {
      "id": "doc_...",
      "revisionNumber": 2,
      "versionDate": "2026-02-01"
    }
  ]
}
GET/api/v1/runs
Read Token

Archivläufe listen

Liefert die neuesten Archivläufe mit Status, Zeitstempeln, Filtern und Totals.

NameTypPflichtBeschreibung
limitnumberNein1 bis 100, Standardwert 30.
cURL
curl -X GET 'https://archive.fynfyn.com/api/v1/runs?limit=10' \
  -H 'Authorization: Bearer <ARCHIVE_READ_TOKEN>'
JavaScript
const response = await fetch('https://archive.fynfyn.com/api/v1/runs?limit=10', {
  headers: {
    Authorization: 'Bearer <ARCHIVE_READ_TOKEN>'
  }
})

if (!response.ok) throw new Error(await response.text())
const data = await response.json()
AntwortJSON
{
  "runs": [
    {
      "id": "run_...",
      "rootUrl": "https://example-bank.de",
      "status": "succeeded",
      "totals": {
        "discovered": 12,
        "downloaded": 5
      }
    }
  ]
}
GET/api/v1/runs/{runId}
Read Token

Archivlauf abrufen

Liefert einen Archivlauf mit gefundenen Dokumenten und Discovery-Zeilen.

NameTypPflichtBeschreibung
runIdstringJaRun-ID aus der Run-Liste oder aus einer Create-Run-Antwort.
cURL
curl -X GET 'https://archive.fynfyn.com/api/v1/runs/run_123' \
  -H 'Authorization: Bearer <ARCHIVE_READ_TOKEN>'
JavaScript
const response = await fetch('https://archive.fynfyn.com/api/v1/runs/run_123', {
  headers: {
    Authorization: 'Bearer <ARCHIVE_READ_TOKEN>'
  }
})

if (!response.ok) throw new Error(await response.text())
const data = await response.json()
AntwortJSON
{
  "run": {
    "id": "run_...",
    "status": "succeeded"
  },
  "documents": [],
  "discoveries": []
}
POST/api/v1/runs
Write Token

Archivlauf anlegen

Legt einen neuen Archivlauf an. Dieser Endpunkt wird absichtlich nicht im Playground ausgeführt.

NameTypPflichtBeschreibung
rootUrlurlJaStart-URL des zu archivierenden Anbieterbereichs.
allowedDomainsstring[]NeinErlaubte Hostnamen. Standard ist der Host der rootUrl.
seedUrlsurl[]NeinZusätzliche Suchstartpunkte, z.B. Rechts-, AGB- oder Downloadseiten.
documentTypes("pdf" | "html")[]NeinZu sammelnde Dokumenttypen.
categoriesArchiveDocumentCategory[]NeinGesuchte Dokumentkategorien.
knownDocuments{ url: string; title?: string }[]NeinBekannte Dokument-URLs, die direkt berücksichtigt werden.
stopWhenCategoriesFoundArchiveDocumentCategory[]NeinKategorien, die im Lauf priorisiert werden. Archivläufe sammeln trotzdem weiter.
maxDepthnumberNein0 bis 4, Standardwert 1.
maxPagesnumberNein1 bis 500, Standardwert 80.
cURL
curl -X POST 'https://archive.fynfyn.com/api/v1/runs' \
  -H 'Authorization: Bearer <ARCHIVE_WRITE_TOKEN>' \
  -H 'Content-Type: application/json' \
  --data '{
  "rootUrl": "https://www.example-bank.de",
  "seedUrls": [
    "https://www.example-bank.de/rechtliche-hinweise/"
  ],
  "documentTypes": [
    "pdf",
    "html"
  ],
  "categories": [
    "preis_leistung",
    "agb",
    "entgeltinformation"
  ],
  "maxDepth": 1,
  "maxPages": 80
}'
JavaScript
const response = await fetch('https://archive.fynfyn.com/api/v1/runs', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <ARCHIVE_WRITE_TOKEN>',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
  "rootUrl": "https://www.example-bank.de",
  "seedUrls": [
    "https://www.example-bank.de/rechtliche-hinweise/"
  ],
  "documentTypes": [
    "pdf",
    "html"
  ],
  "categories": [
    "preis_leistung",
    "agb",
    "entgeltinformation"
  ],
  "maxDepth": 1,
  "maxPages": 80
})
})

if (!response.ok) throw new Error(await response.text())
const data = await response.json()
AntwortJSON
{
  "run": {
    "id": "run_...",
    "rootUrl": "https://example-bank.de",
    "status": "pending",
    "filters": {
      "maxDepth": 1,
      "maxPages": 80
    }
  }
}