Große Dateien
POST https://api.kennmarq.com/v1/uploads
Eine Anfrage an die API umfasst höchstens 4 MB. Eine größere Datei bis 25 MB (einen zu markierenden Clip bis 1 GB) laden Sie zuerst hoch, direkt in unseren Speicher in Zürich, und geben dann den Upload an, statt die Datei zu senden. Die SDKs für JavaScript und Python erledigen das von selbst.
So funktioniert es
- Fordern Sie einen Upload mit der Größe der Datei an:
{"bytes": 12345678}. - Senden Sie die Datei innerhalb von 15 Minuten per
PUTan dieurl, die Sie zurückerhalten, mit derenheaders. - Geben Sie den Upload in
uploadstatt infilean, bei /v1/mark, /v1/check oder /v1/verify, oder bei /v1/mark ininput_uploadstatt ininput.
# 1. The upload, for the file's size
curl https://api.kennmarq.com/v1/uploads \
-H "Authorization: Bearer $KENNMARQ_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"bytes\": $(wc -c < render.png)}"
# → {"object":"upload","id":"up_…","url":"https://…","method":"PUT","headers":{"Content-Length":"…"},…}
# 2. The file, to the url (no Authorization header: the URL is the permission)
curl -X PUT --upload-file render.png "$UPLOAD_URL"
# 3. The call, naming the upload
curl https://api.kennmarq.com/v1/mark \
-H "Authorization: Bearer $KENNMARQ_API_KEY" \
-F upload=up_… -F source=created \
-o render.marked.pngAnfrage
application/json mit einem Feld, bytes: die Größe der Datei, von 1 Byte bis 1 GB (1.073.741.824 Byte). Jeder Aufruf misst die Dateien, die er liest, an seiner eigenen Grenze: 25 MB (26.214.400 Byte) und 1 GB für einen zu markierenden Clip; ein Aufruf, der einen größeren Upload angibt, antwortet mit 413 payload_too_large. Erfordert einen Schlüssel mit der Berechtigung mark oder check. Die Anforderung eines Uploads zählt zu den Aufrufen pro Minute der Organisation, nie zu ihren Markierungen; für einen Schlüssel können bis zu 100 Uploads gleichzeitig warten.
Antwort
201, application/json:
| Feld | Wert |
|---|---|
object | "upload" |
id | Die ID des Uploads (up_…): Geben Sie sie im Feld upload des Aufrufs an. |
bytes | Die von Ihnen angegebene Größe; die Datei muss genau so groß sein. |
url | Wohin die Datei per PUT geht: unser Speicher in Zürich. Die URL selbst gewährt den Zugriff, senden Sie also keinen Authorization-Header. |
method | "PUT" |
headers | Header, die der PUT mitsenden muss: Content-Length, für den die URL signiert ist. |
url_expires_at | Die URL funktioniert 15 Minuten lang. |
expires_at | Der Upload lässt sich eine Stunde lang verwenden; danach wird er ungenutzt gelöscht. |
Die Regeln
- Ein Upload funktioniert einmal, innerhalb einer Stunde, mit dem Schlüssel, der ihn erstellt hat. Ein anderer Schlüssel, ein zweiter Aufruf oder ein späterer erhält
404 upload_not_found. - Der PUT muss genau die angegebene Größe senden; alles andere wird abgelehnt. Ein Aufruf, der einen Upload angibt, dessen Datei noch nicht angekommen ist, erhält
400 invalid_request. - Ein Aufruf, der aus einem eigenen Grund fehlschlägt (ein Tippfehler in einer Option, unser Dienst kurzzeitig nicht verfügbar), lässt den Upload für den erneuten Versuch übrig. Ein Aufruf, der ihn verwendet hat oder seinen Inhalt abgelehnt hat (keine Datei, die er annimmt, oder von der Sicherheitsprüfung blockiert), verbraucht ihn. Der Auftrag eines Clips behält seinen Upload, bis er fertig ist; nach einem Fehler auf unserer Seite funktioniert der Upload wieder, solange seine Stunde läuft.
- Bei
/v1/verify, das für eine in der Anfrage gesendete Datei keinen Schlüssel braucht, erfordert die Angabe eines Uploads den Schlüssel, der ihn erstellt hat.
Fehler
| Status | Code | Wann |
|---|---|---|
| 400 | invalid_request | bytes fehlt, ist keine ganze Zahl oder kleiner als 1. |
| 400 | unknown_field | Ein anderes Feld als bytes. |
| 401 | missing_api_key, invalid_api_key, api_key_revoked | Siehe Authentifizierung. |
| 403 | insufficient_scope, ip_not_allowed | Der Schlüssel hat weder die Berechtigung mark noch check, oder die Adresse steht nicht auf der Allowlist. |
| 413 | payload_too_large | bytes ist größer als 1 GB. |
| 415 | unsupported_media_type | Der Body wird nicht als application/json gesendet. |
| 429 | rate_limited | Zu viele Aufrufe in dieser Minute, oder für diesen Schlüssel warten bereits 100 Uploads; versuchen Sie es nach Retry-After Sekunden erneut. |
| 503 | storage_unavailable | Uploads sind kurzzeitig nicht verfügbar. Versuchen Sie es erneut. |
Fehler-Bodys folgen dem gemeinsamen Format.