# Grenzen und Fehler

## Ihr Tarif

Jeder gelesene Beleg zählt einmal im Monat Ihres Unternehmens ([Einstellungen › Tarif](/settings/plan)); erneut geschickte Bytes und Suchen zählen nicht. `X-Ocost-Documents-Left` an jeder Antwort von `POST /public/v1/files` sagt, was übrig ist.

An der Grenze wird eine Datei trotzdem gespeichert, als `not_read` mit `reason: "limit"` und `renews_on`, und von selbst gelesen, sobald sich der Monat erneuert oder der Tarif wächst.

## Ratenlimits

| Je Schlüssel und Minute | Grenze |
| --- | --- |
| `documents:write` (schicken, löschen) | 120 Aufrufe |
| `documents:read` (Dateien, Belege, Bytes, Liste) | 600 Aufrufe |
| `search:read` | 60 Suchen |

Darüber: `429 urn:ocost:key:rate` mit `Retry-After` in Sekunden. Von einer Adresse bekommen 30 falsche Schlüssel je Minute `401`, weitere `429`.

Je Adresse, alle Schlüssel zusammen: 50 Anfragen je Sekunde (kurz bis 200), 100 gleichzeitig offen; darüber ein `429` als Text mit `Retry-After`. Verteilen Sie einen Stapel über seine Minute.

## Größen

- Eine Datei: bis 25 MB, abgelehnt, bevor sie gelesen wird (`413 urn:ocost:file:too_large`).
- Ein langes PDF: Nur die ersten Seiten werden gelesen; `pages_read` sagt, wie viele.
- Eine Suche: `q` bis 200 Zeichen, `limit` bis 50, `offset` bis 250.

## Fehler

RFC-9457-Problems, `Content-Type: application/problem+json`. Verzweigen Sie nach `status` und `type`; `detail` ist Englisch für Ihre Logs und kann sich ändern.

```json
{
  "type": "urn:ocost:key:scope",
  "title": "Forbidden",
  "status": 403,
  "detail": "This key lacks the scope documents:write.",
  "instance": "/public/v1/files"
}
```

| Typ | Status | Bedeutung |
| --- | --- | --- |
| `urn:ocost:key:invalid` | 401 | Kein Schlüssel oder ein falscher, widerrufener oder abgelaufener. |
| `urn:ocost:key:scope` | 403 | Dem Schlüssel fehlt die Berechtigung. |
| `urn:ocost:key:rate` | 429 | Zu viele Aufrufe; warten Sie `Retry-After`. |
| `urn:ocost:file:too_large` | 413 | Über 25 MB. |
| `urn:ocost:file:format` | 415 | Ein Format, das Ocost nicht liest. |
| `urn:ocost:file:reading` | 409 | Wird gerade gelesen; später löschen. |
| `urn:ocost:file:kept` | 409 | Dieselben Bytes liegen dort, wo der Schlüssel sie nicht sieht. |
| `urn:ocost:file:linked` | 409 | Ocost braucht sie noch (bezahlt, abgeglichen, gebucht, eine offene Frage, die eines Projekts); löschen Sie sie in Ocost, sobald nichts sie mehr braucht. |
| `about:blank` | 404 | Keine solche Datei, kein solcher Beleg, oder der eines anderen Unternehmens. |
| `about:blank` | 422 | Ungültige Felder, jedes in `errors[]` mit seinem `loc`. |
| `about:blank` | 503 | Gleich noch einmal versuchen. |

## Wiederholen

- `429`, `5xx`: nach `Retry-After` oder mit wachsenden Pausen (1, 2, 4, … Sekunden, höchstens eine Minute).
- Eine Datei erneut zu schicken ist sicher: Dieselben Bytes sind dieselbe Datei. Erneutes Löschen auch (`404`).
- `401`: aufhören und einem Menschen Bescheid geben; der Schlüssel muss ersetzt werden.
- Andere `4xx`: nicht unverändert wiederholen.

## Daten

Ocost läuft in der EU. Originale, das Gelesene und der Suchindex bleiben, bis Sie die Datei löschen (`DELETE /public/v1/files/{file_id}`) oder Ihr Unternehmen gelöscht wird. Belege trainieren nie ein Modell.
