Anmelden

Dateien und Status

Als Markdown ansehen

Eine Datei ist ein PDF, ein Bild oder eine E-Rechnung, die Sie schicken. Sie enthält einen oder mehrere Belege: Ein Scan von drei Rechnungen ist eine Datei mit drei Belegen.

Eine Datei schicken

POST /public/v1/files, multipart/form-data, Berechtigung documents:write:

FeldBedeutung
filePflicht. PDF, Bild (JPEG, PNG, TIFF, WebP) oder XML einer E-Rechnung (XRechnung, UBL, CII), bis 25 MB. Keine Archive in dieser Version.
nameDer Dateiname; sonst der des Uploads.
external_refIhre eigene Kennung, bis 200 Zeichen (Odoo: account.move,<id>), kommt mit der Datei zurück. Erneut geschickte Bytes behalten die erste.
AntwortBedeutung
202 AcceptedNeue Datei, status: "received"; das Lesen beginnt sofort.
200 OKDieselben Bytes (nach SHA-256, nicht nach Namen) kamen schon: diese Datei, wie sie jetzt ist, weder neu gelesen noch gezählt.
409 urn:ocost:file:keptDieselben Bytes liegen dort, wo Schlüssel sie nicht sehen (der eigene Upload einer Person). Nichts ändert sich.
413 urn:ocost:file:too_large, 415 urn:ocost:file:format, 411Zu groß, ein Format, das Ocost nicht liest, kein Content-Length.

Jede Antwort trägt X-Ocost-Documents-Left, die Belege, die Ihr Tarif in diesem Monat noch hat.

Shell
curl -sS https://api.ocost.io/public/v1/files \
  -H "Authorization: Bearer $OCOST_KEY" \
  -F "file=@scan.pdf" -F "name=scan.pdf" -F "external_ref=account.move,42"

Status

GET /public/v1/files/{file_id} (Berechtigung documents:read) liefert die Datei mit ihrem status:

StatusBedeutung
receivedGespeichert, noch nicht gelesen.
readingWird gelesen; antwortet kein Lesedienst, versucht Ocost es bis zu einen Tag lang erneut.
readdocuments listet jeden Beleg: id, kind, number, pages.
not_readGespeichert, nicht gelesen; siehe reason.
failedNicht lesbar; siehe reason.
GrundBeiBedeutung
limitnot_readDie Belege des Monats sind aufgebraucht; Ocost liest die Datei am renews_on.
model_offnot_readFür dieses Unternehmen werden PDFs und Bilder nicht gelesen, E-Rechnungen schon.
nothing_foundnot_readKein Beleg darin.
too_largenot_readZu viele Seiten oder ein zu großes Bild.
damagedfailedKeine Datei, die Ocost öffnen kann.
unavailablefailedEinen Tag lang antwortete kein Lesedienst; schicken Sie die Bytes erneut.
failedfailedAlles andere.
otherbeideEin Grund, den diese API noch nicht benennt.

Auf eine Datei warten

Fragen Sie eine halbe Minute lang alle 2 bis 3 Sekunden ab, danach alle 10 bis 30. Die meisten PDFs brauchen unter einer Minute, lange einige.

Für viele Dateien listen Sie die Änderungen: zuerst mit updated_since (oder ohne, für alle), dann dem Cursor nach.

Shell
curl -sS -G https://api.ocost.io/public/v1/files \
  -H "Authorization: Bearer $OCOST_KEY" \
  --data-urlencode "updated_since=2026-11-09T08:00:00Z" \
  --data-urlencode "status=read" --data-urlencode "status=not_read" \
  --data-urlencode "status=failed"
  • Älteste Änderung zuerst, bis zu limit (1 bis 100, Standard 50), eine Datei einmal je Änderung.
  • Solange more wahr ist, holen Sie mit cursor=<next_cursor> die nächste Seite; danach merken Sie sich den Cursor für die nächste Abfrage.
  • status filtert erst nach dem Blättern, eine Seite kann also weniger als limit enthalten: Folgen Sie more, nicht der Anzahl.

Auf eine Datei warten und alles einsammeln, was sich seit der letzten Abfrage geändert hat:

def wait_for(session, file_id, timeout=300):
    started = time.monotonic()
    while time.monotonic() - started < timeout:
        file = session.get(f"{API}/files/{file_id}", timeout=15).json()
        if file["status"] not in ("received", "reading"):
            return file
        time.sleep(3 if time.monotonic() - started < 30 else 15)
    return file

Das Original

GET /public/v1/files/{file_id}/content liefert die Bytes, wie sie geschickt wurden.

Eine Datei löschen

DELETE /public/v1/files/{file_id} (Berechtigung documents:write) löscht die Datei mit ihren Belegen, allem Gelesenen, ihrem Suchindex und dem Original, sofort und endgültig.

AntwortBedeutung
204Gelöscht; danach 404.
409 urn:ocost:file:readingWird gerade gelesen; später erneut versuchen.
409 urn:ocost:file:linkedOcost braucht sie noch: eine gebuchte Rechnung (ob bezahlt, abgeglichen, exportiert oder nicht), ein Kontoauszug, eine offene Frage, die Datei eines Projekts. detail sagt, was davon; löschen Sie sie in Ocost, sobald nichts sie mehr braucht.