Zurück zur AnwendungHilfe · Swagger UI · file_upload.md · openapi-datahub.yaml

File Upload API

API-Basis (Produktion): https://repo.iab.de

Test-Zugangsdaten

FeldWert
Emaildemo@iab.de
Passwordwinter123456

Authentication

All upload endpoints require a Bearer token. Token via:

POST /api/tokens
Content-Type: application/json

{
  "email": "demo@iab.de",
  "password": "winter123456",
  "token_name": "my-client"
}

Response:

{ "token": "1|xxxxxxxxxxxx" }

Token widerrufen:

DELETE /api/tokens/current
Authorization: Bearer <token>

Endpoints

CRUD-Uebersicht

OperationHTTPEndpointBeschreibung
CreatePOST/api/filesEine oder mehrere Dateien hochladen
Read (List)GET/api/filesEigene Dateien paginiert auflisten
Read (Single)GET/api/files/{id}Metadaten einer einzelnen Datei lesen
UpdatePATCH/api/files/{id}Metadaten (und optional path) aktualisieren
DeleteDELETE/api/files/{id}Datei inkl. Metadaten loeschen

Datei erstellen (Create)

POST /api/files
Authorization: Bearer <token>
Content-Type: multipart/form-data
FeldTypPflichtBeschreibung
files[]File(s)ja1–25 Dateien, je max. 200 MB
pathstringneinVirtueller Zielpfad, z. B. projekte/2026/q1
aktiv_idstringneinExterne Aktivitäts- oder Vorgangsnummer
reprotypstringneinRepräsentationstyp, z. B. forschungsbericht
titelstringneinTitel der Datei/Publikation
beschreibungstringneinKurzbeschreibung (max. 5000 Zeichen)
autorenstringneinAutorenangabe(n)
sachschlagwoerterstringneinSachschlagwörter
iab_themenstringneinIAB-Themenbereich
sperrfristdateneinSperrdatum (ISO 8601), Download bis dahin gesperrt
reihenfolgeintegerneinSortierreihenfolge (default: 0)
freigabebooleanneinOb die Datei abrufbar ist (default: true)

Der path definiert die Ordnerstruktur. Erlaubte Zeichen: a-z A-Z 0-9 . _ - und / als Trennzeichen. Kein führender oder abschließender Slash, keine ..-Segmente.

Beispiel

curl -X POST https://repo.iab.de/api/files \
  -H "Authorization: Bearer <token>" \
  -F "files[]=@bericht.pdf" \
  -F "files[]=@daten.xlsx" \
  -F "path=projekte/2026/q1"

Response 201

{
    "files": [
        {
            "id": "018f1a2b-...",
            "aktiv_id": "AKT-2026-001",
            "original_name": "bericht.pdf",
            "path": "projekte/2026/q1",
            "mime_type": "application/pdf",
            "size": 204800,
            "reprotyp": "forschungsbericht",
            "titel": "Arbeitsmarktbericht 2026",
            "beschreibung": null,
            "autoren": "Max Mustermann",
            "sachschlagwoerter": null,
            "iab_themen": null,
            "sperrfrist": null,
            "reihenfolge": 0,
            "freigabe": true,
            "created_at": "2026-04-30T10:00:00.000000Z"
        }
    ]
}

Datei herunterladen

GET /api/files/{id}/download
Authorization: Bearer <token>

Liefert die Datei als Download mit korrektem Content-Type und originalem Dateinamen. Nur eigene Dateien sind abrufbar (sonst 404). Bei freigabe=false oder sperrfrist in der Zukunft → 403.

curl -OJ "https://repo.iab.de/api/files/018f1a2b-.../download" \
  -H "Authorization: Bearer <token>"

Datei lesen (Read Single)

GET /api/files/{id}
Authorization: Bearer <token>

Gibt die Metadaten einer einzelnen eigenen Datei zurueck. Nur eigene Dateien sind abrufbar (sonst 404).

Response 200

{
    "id": "018f1a2b-...",
    "aktiv_id": "AKT-2026-001",
    "original_name": "bericht.pdf",
    "path": "projekte/2026/q1",
    "mime_type": "application/pdf",
    "size": 204800,
    "reprotyp": "forschungsbericht",
    "titel": "Arbeitsmarktbericht 2026",
    "beschreibung": null,
    "autoren": "Max Mustermann",
    "sachschlagwoerter": null,
    "iab_themen": null,
    "sperrfrist": null,
    "reihenfolge": 0,
    "freigabe": true,
    "created_at": "2026-04-30T10:00:00.000000Z",
    "updated_at": "2026-04-30T10:00:00.000000Z"
}
curl "https://repo.iab.de/api/files/018f1a2b-..." \
  -H "Authorization: Bearer <token>"

Dateien auflisten

GET /api/files
Authorization: Bearer <token>

Gibt alle eigenen Uploads zurück, sortiert nach Hochladezeitpunkt (neueste zuerst), paginiert (100 pro Seite).

Optionale Filter (kombinierbar):

ParameterBeschreibungBeispiel
pathPfad-Präfixpath=projekte/2026
aktiv_idExakte Aktivitäts-IDaktiv_id=AKT-2026-001
sinceNur Dateien ab diesem Zeitpunktsince=2026-04-30T12:00:00%2B02:00
freigabeNach Freigabe filternfreigabe=1 oder freigabe=0
reprotypNach Repräsentationstyp filternreprotyp=forschungsbericht

since – Zeitpunkt mit Zeitzone

Der Wert muss ISO 8601 sein. Ohne Offset wird UTC angenommen – bei lokaler Zeit (z. B. Europe/Berlin, CEST = UTC+2) immer den Offset mitsenden:

# Alle Uploads seit 30. April 12:00 Uhr Berliner Zeit
curl "https://repo.iab.de/api/files?since=2026-04-30T12:00:00%2B02:00" \
  -H "Authorization: Bearer <token>"
# Alternativ direkt als UTC
curl "https://repo.iab.de/api/files?since=2026-04-30T10:00:00Z" \
  -H "Authorization: Bearer <token>"
curl "https://repo.iab.de/api/files?aktiv_id=AKT-2026-001" \
  -H "Authorization: Bearer <token>"
curl "https://repo.iab.de/api/files?path=projekte/2026" \
  -H "Authorization: Bearer <token>"

Datei aktualisieren (Update)

PATCH /api/files/{id}
Authorization: Bearer <token>
Content-Type: application/json

Aktualisiert Metadaten einer bestehenden eigenen Datei. Es werden nur uebergebene Felder geaendert (partielles Update). Optional kann auch path geaendert werden.

FeldTypPflichtBeschreibung
pathstringneinNeuer virtueller Zielpfad
aktiv_idstringneinExterne Aktivitaets- oder Vorgangsnummer
reprotypstringneinRepraesentationstyp
titelstringneinTitel der Datei/Publikation
beschreibungstringneinKurzbeschreibung (max. 5000 Zeichen)
autorenstringneinAutorenangabe(n)
sachschlagwoerterstringneinSachschlagwoerter
iab_themenstringneinIAB-Themenbereich
sperrfristdateneinSperrdatum (ISO 8601)
reihenfolgeintegerneinSortierreihenfolge
freigabebooleanneinOb die Datei abrufbar ist
curl -X PATCH "https://repo.iab.de/api/files/018f1a2b-..." \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "titel": "Arbeitsmarktbericht 2026 (final)",
    "freigabe": true,
    "reihenfolge": 10
  }'

Response 200

{
    "id": "018f1a2b-...",
    "titel": "Arbeitsmarktbericht 2026 (final)",
    "freigabe": true,
    "reihenfolge": 10,
    "updated_at": "2026-05-01T09:15:00.000000Z"
}

Datei löschen

DELETE /api/files/{id}
Authorization: Bearer <token>

Löscht Datei und Metadaten-Eintrag. Nur eigene Dateien können gelöscht werden (sonst 404).


Erlaubte Dateitypen

ExtensionMIME Type
pdfapplication/pdf
txttext/plain
csvtext/csv
jpg / jpegimage/jpeg
pngimage/png
gifimage/gif
webpimage/webp
docapplication/msword
docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
zipapplication/zip
mp4video/mp4
rdfapplication/rdf+xml
wavaudio/wav
mp3audio/mpeg
oggaudio/ogg
jsonapplication/json

Der MIME-Typ wird server-seitig anhand der Datei-Magic-Bytes geprüft, nicht anhand des Client-Headers.


Limits & Rate Limiting

ParameterWert
Max. Dateien pro Request25
Max. Dateigröße200 MB
Rate Limit Upload60 Requests / Minute
Rate Limit Token-Erstellung10 Requests / Minute

Fehler

CodeBedeutung
401Kein oder ungültiger Token
403Download gesperrt (freigabe=false oder sperrfrist in der Zukunft)
404Datei nicht gefunden oder gehört anderem Nutzer
422Validierungsfehler (Dateityp, Größe, ungültiger Pfad, ungültige Update-Felder/Werte)
429Rate Limit überschritten

Beispiel Validierungsfehler

{
    "message": "The files.0 field must be a file of type: pdf, txt, ...",
    "errors": {
        "files.0": ["Unsupported file type."]
    }
}

Speicherstruktur

Dateien werden privat gespeichert (nicht öffentlich erreichbar) unter:

storage/app/private/uploads/{user_id}/{path}/{filename}

Bei Namenskollision wird automatisch ein Suffix angehängt:

storage/app/private/uploads/1/projekte/2026/bericht_aB3xYz9k.pdf