Fichiers volumineux
POST https://api.kennmarq.com/v1/uploads
Une requête à l’API transporte au plus 4 Mo. Pour un fichier plus lourd, jusqu’à 25 Mo (jusqu’à 1 Go pour une vidéo à marquer), téléversez-le d’abord, directement dans notre stockage à Zurich, puis désignez l’envoi dans l’appel au lieu d’y joindre le fichier. Les SDK JavaScript et Python le font d’eux-mêmes.
Fonctionnement
- Demandez un envoi en indiquant la taille du fichier :
{"bytes": 12345678}. - Envoyez le fichier par
PUTà l’urlreçue, avec sesheaders, dans les 15 minutes. - Indiquez l’envoi dans
uploadau lieu defilesur /v1/mark, /v1/check ou /v1/verify, ou dansinput_uploadau lieu deinputsur /v1/mark.
# 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.pngRequête
application/json avec un seul champ, bytes : la taille du fichier, de 1 octet à 1 Go (1 073 741 824 octets). Chaque appel applique sa propre limite aux fichiers qu’il lit : 25 Mo (26 214 400 octets), et 1 Go pour une vidéo à marquer ; un appel qui indique un envoi plus volumineux répond 413 payload_too_large. Nécessite une clé avec la portée mark ou check. Demander un envoi compte dans les appels par minute de l’organisation, jamais dans ses marquages ; une clé peut avoir 100 envois en attente à la fois.
Réponse
201, application/json :
| Champ | Valeur |
|---|---|
object | "upload" |
id | L’ID de l’envoi (up_…) : indiquez-le dans le champ upload de l’appel. |
bytes | La taille que vous avez déclarée ; le fichier doit faire exactement cette taille. |
url | Où envoyer le fichier par PUT : notre stockage à Zurich. L’URL elle-même fait office d’autorisation : n’envoyez donc pas d’en-tête Authorization. |
method | "PUT" |
headers | Les en-têtes que le PUT doit porter : Content-Length, pour lequel l’URL est signée. |
url_expires_at | L’URL est valable 15 minutes. |
expires_at | L’envoi peut être utilisé pendant une heure ; ensuite, il est supprimé sans avoir servi. |
Les règles
- Un envoi ne sert qu’une fois, dans l’heure, avec la clé qui l’a créé. Une autre clé, un deuxième appel ou un appel plus tardif reçoit
404 upload_not_found. - Le PUT doit envoyer exactement la taille déclarée ; toute autre taille est refusée. Un appel qui indique un envoi dont le fichier n’est pas encore arrivé reçoit
400 invalid_request. - Un appel qui échoue pour une raison qui lui est propre (une faute de frappe dans une option, notre service momentanément indisponible) laisse l’envoi disponible pour la nouvelle tentative. Un appel qui l’a utilisé, ou qui a refusé son contenu (un fichier qu’il n’accepte pas, ou bloqué par le contrôle de sécurité), le consomme. La tâche d’une vidéo garde son envoi jusqu’à ce qu’elle soit terminée ; après un échec de notre côté, il redevient utilisable pendant son heure.
- Sur
/v1/verify, qui ne demande aucune clé pour un fichier envoyé dans la requête, indiquer un envoi nécessite la clé qui l’a créé.
Erreurs
| Statut | Code | Quand |
|---|---|---|
| 400 | invalid_request | bytes est absent, n’est pas un nombre entier, ou est inférieur à 1. |
| 400 | unknown_field | Un champ autre que bytes. |
| 401 | missing_api_key, invalid_api_key, api_key_revoked | Voir Authentification. |
| 403 | insufficient_scope, ip_not_allowed | La clé n’a ni la portée mark ni la portée check, ou l’adresse ne figure pas sur la liste d’IP autorisées. |
| 413 | payload_too_large | bytes dépasse 1 Go. |
| 415 | unsupported_media_type | Le corps n’est pas envoyé en application/json. |
| 429 | rate_limited | Trop d’appels cette minute, ou 100 envois déjà en attente pour cette clé ; réessayez après le nombre de secondes indiqué dans Retry-After. |
| 503 | storage_unavailable | Les envois sont momentanément indisponibles. Réessayez. |
Les corps d’erreur suivent le format commun.