Jobs

Auslieferung und Start-SLA

Die Auslieferung steuert client_wait — unabhängig von der Start-SLA processing_lane. Siehe Start-SLA.

Pipeline-Slug

Job-Pfade nutzen handler___command mit drei Unterstrichen. OCR: POST /job/add/paperoffice_aiocr___generate. IDP: POST /job/add/workflow. Kein Punkt und kein po-* im Pfad.

Punkt-Notation (handler.command) liefert HTTP 400 (JOB_CONFIG_INVALID).

IDP POST /job/add/workflow akzeptiert nur Multipart-file oder pofid — keine JSON-URL-Arrays.

Standard — Verbindung halten

POST /job/add/{pipeline}  →  Verbindung halten bis ~295s  →  200 result ODER HTTP 202 + job_id + poll_url

Nach Ablauf des Hold-Fensters läuft der Job weiter. GET /job/get/{job_id} alle 5–10 Sekunden oder poll_url aus der Response verwenden.

Wartende, laufende und abgeschlossene API-Jobs unter Konto → API → Job-Warteschlange (/paperoffice-account/api-queue).

Sofortige job_id

client_wait=false  ODER  async_only=true

1. POST /job/add/{pipeline}     → job_id sofort (~100ms)
2. GET  /job/get/{job_id}        → Alle 5–10 s pollen, bis job_status = "completed"
3. GET  /job/download/{token}    → Nur wenn job_result eine Download-URL enthält

HTTP 202 — Job läuft weiter

HTTP 202 ist ein Erfolgspfad, kein Fehler. Der Job bleibt aktiv. job_id und poll_url pollen, bis job_status den Wert completed hat. Das Ergebnis steht in job_result.

Bei Connection Hold steht das fertige Ergebnis in result. Beim Pollen steht es in job_result. Clients werten den stabilen code aus, nicht den lokalisierten message-Text.

Response-Format

Alle Responses sind JSON und enthalten processing_time.

Erfolg:

{
  "status": "success",
  "job_id": "abc123",
  "result": { "text": "…" },
  "processing_time": "45.12ms"
}

Polling / HTTP 202:

{
  "status": "success",
  "job_id": "abc123",
  "poll_url": "/job/get/abc123",
  "client_wait": false,
  "max_wait_seconds": 60,
  "message": "Job queued — poll for result",
  "processing_time": "45.12ms"
}

Fehler:

{
  "status": "error",
  "code": "INSUFFICIENT_CREDITS",
  "message": "Not enough credits for this job",
  "processing_time": "12.04ms"
}

Error-Codes

HTTPCodeBedeutungLösung
400INVALID_REQUESTFehlende / ungültige ParameterRequest-Body prüfen
400JOB_CONFIG_INVALIDUngültiger Pipeline-Slughandler___command verwenden, keine Punkt-Notation
401AUTH_REQUIREDKein Bearer-TokenAuthorization: Bearer YOUR_TOKEN setzen
401INVALID_TOKENToken ungültigToken-Format prüfen (po_sk_, po_ut_, po_gt_, po_pk_)
401BEARERTOKEN_EXPIREDToken abgelaufenNeuen Token anfordern
402INSUFFICIENT_CREDITSCredits nicht ausreichendCredits aufladen oder niedrigere Lane wählen
402BUDGET_EXHAUSTEDPublishable-Key-Budget erreichtNeuen po_pk_ erstellen oder Budget-Cap erhöhen
403FORBIDDENAktion nicht erlaubtScope, Origin oder Lizenz prüfen
403TIER_RESTRICTEDProdukt-API ohne Token (VISITOR)Bearer-Token setzen — das ist kein HTTP 401
403JOB_REQUIRES_PAID_TIERFree-Tier unzulässigBezahlten Plan verwenden
404NOT_FOUNDNicht gefundenURL-Pfad prüfen
429RATE_LIMIT_EXCEEDEDZu viele RequestsRetry-After beachten
429QUEUE_LIMIT_REACHEDQueue vollSpäter erneut senden
500INTERNAL_ERRORServer-FehlerNach kurzer Pause erneut versuchen
503SERVICE_UNAVAILABLEService nicht erreichbarMit Backoff erneut versuchen

Weiter