L’état d’un marquage
GET https://api.kennmarq.com/v1/marks/{id}
Une vidéo est marquée sous forme de tâche (POST /v1/mark répond 202 avec son ID) : interrogez cet endpoint jusqu’à ce qu’elle soit prête, puis téléchargez la vidéo marquée. Ces requêtes ne décomptent aucun marquage. Nécessite une clé avec la portée mark, de l’organisation et de l’environnement du marquage.
Exemple
curl https://api.kennmarq.com/v1/marks/mk_… -H "Authorization: Bearer $KENNMARQ_API_KEY"{
"object": "mark", "id": "mk_…", "status": "completed", "kind": "clip",
"created_at": "2026-11-12T10:00:00.000Z", "finished_at": "2026-11-12T10:01:12.000Z",
"file": { "type": "video/mp4", "bytes": 18734211, "sha256": "…", "seconds": 9.6, "width": 1920, "height": 1080, "frames": 230 },
"watermark_id": "1d455a804e9802a6",
"watermarks": { "video": { "alg": "Meta Video Seal 1.0", "id": "1d455a804e9802a6", "read_back": 1, "frames": 64, "strength": 0.2 },
"audio": { "alg": "Meta AudioSeal (16 bits)", "claimed": true, "detected": 0.71, "bits": 16 } },
"manifest": "urn:c2pa:…", "log_index": 1234, "marks": 10, "safety": null,
"download": { "url": "https://…", "expires_at": "2026-11-12T10:06:12.000Z" },
"download_until": "2026-11-13T10:01:12.000Z", "download_links_left": 4, "download_error": null
}Tant que la tâche tourne, la réponse est {"object": "mark", "id": "mk_…", "status": "running", …}. La plupart des vidéos prennent une minute ou deux ; interrogez l’API toutes les quelques secondes, ou laissez un webhook vous prévenir. Le lien de téléchargement ne demande aucune clé : c’est lui qui fait office d’autorisation, alors partagez-le avec précaution. Une image ou un morceau a été marqué dans son propre appel : ici, il apparaît completed, sans téléchargement.
Téléchargements
Le fichier d’une vidéo terminée est conservé une journée. Chaque lien vers ce fichier est valable 5 minutes : lancez le téléchargement dans ce délai (un téléchargement commencé va jusqu’au bout). Une nouvelle demande dans ces 5 minutes renvoie le même lien, avec la même échéance ; passé ce délai, un nouveau lien, jusqu’à 5 par vidéo. La taille du fichier est décomptée de vos données du mois une fois à la fin de la tâche, ce qui couvre le premier lien, puis à nouveau pour chaque lien ultérieur. Une fois les données du mois épuisées, aucun nouveau lien n’est créé avant le 1er du mois (UTC) ou le passage à une offre supérieure.
Champs
| Champ | Description |
|---|---|
status | running, completed ou failed. |
kind | picture, song ou clip (un MP4 qui ne contient que du son revient en tant que song). |
file | Le fichier marqué : type, bytes, sha256, seconds et, pour une vidéo, width, height et frames. |
watermark_id | L’ID Video Seal d’une vidéo (16 chiffres hexadécimaux), qui mène à ses Content Credentials durables ; null pour un morceau. |
watermarks | video : l’ID et la part relue ; audio : si le marquage du son a été déclaré (claimed). |
manifest, log_index | Le libellé du manifeste, et la position de sa signature dans le journal de transparence. |
marks | Les marquages décomptés : cinq par seconde, et deux par image contrôlée. |
safety | Avec check activé : la politique et le verdict (allow ou flag, avec le motif d’un signalement). |
download | url et expires_at : un lien vers le fichier marqué, valable 5 minutes (voir Téléchargements) ; null s’il n’y en a pas, avec la raison dans download_error. |
download_until | Le fichier est conservé une journée après la fin de la tâche. |
download_links_left | Le nombre de liens que la vidéo peut encore obtenir : 5 au total. |
download_error | Pourquoi download vaut null : gone (sa journée est passée), download_limit (ses 5 liens sont utilisés), quota_exceeded (les données du mois sont épuisées), storage_unavailable (réessayez). Sinon null. |
error | Le code et le message d’une tâche échouée (comme dans un corps d’erreur), et safety pour une image bloquée. |
Justificatifs
GET https://api.kennmarq.com/v1/marks/{id}/receipt
Un marquage fait avec markets a un justificatif : pour chaque marché, la loi, ce que le fichier porte à son titre, ce qui lui manque éventuellement, et ce qui reste de votre ressort en tant que fournisseur. Nous le signons avec notre clé de vérificateur quand vous le demandez, pour que vous puissiez le conserver comme preuve ; GET /v1/verify/key fournit cette même clé. Les marquages faits sans markets, ou en mode local, n’en ont pas (404 not_found).
curl https://api.kennmarq.com/v1/marks/mk_4Q8oT1n6mWc2fLr0aZ9eYb/receipt \
-H "Authorization: Bearer $KENNMARQ_API_KEY"{
"receipt": {
"object": "receipt",
"mark_id": "mk_4Q8oT1n6mWc2fLr0aZ9eYb",
"made_at": "2026-10-24T10:00:00Z",
"file": { "type": "image/png", "sha256": "…" },
"marks": {
"credential": { "manifest": "urn:c2pa:…", "time_stamp": { "serial": "…", "time": "2026-10-24T10:00:00Z" } },
"watermark": { "alg": "com.adobe.trustmark.Q", "id": "1a2b3c4d5e6f7081" },
"sound_watermark": null
},
"origin": { "provider": "Acme Inc.", "system": "Acme Studio", "system_version": "2.1", "source": "created", … },
"markets": [
{ "market": "us-ca", "law": "California AI Transparency Act …", "applied": ["a latent disclosure: …", …], "missing": [], "yours": ["being the covered provider", …] }
],
"rules_checked": "2026-10-24",
"guarantee": "…"
},
"jws": "eyJhbGciOiJFUzI1NiIs…",
"key_id": "…",
"public_key": "-----BEGIN PUBLIC KEY-----…"
}Quand une tâche échoue
status: failed, avec l’erreur qu’un appel aurait renvoyée : content_blocked (une image que le contrôle de sécurité a bloquée, dans safety, avec son frame), quota_exceeded (la vidéo nécessite plus de marquages qu’il n’en restait), payload_too_large (au-delà de nos limites), invalid_request (un fichier que nous ne pouvons pas lire), mark_failed ou marker_unavailable. Une tâche échouée ne décompte rien, sauf les contrôles d’un blocage quand vous les avez demandés. Après un échec de notre côté, l’envoi redevient utilisable jusqu’à la fin de son heure. Les vidéos qui échouent avec mark_failed après que nous les avons traitées sont plafonnées par jour (vidéos).
401, 403, 404 not_found, 429.