KoKonna Open API

Affichez des photos de famille, des bulletins quotidiens et vos propres automatisations sur un cadre KoKonna. Envoyez-les via notre cloud depuis n’importe où, ou directement au cadre par le Wi‑Fi de votre domicile.

POSThttps://api.kokonna.art/openapi/upload Authorization: Bearer <API_KEY> Content-Type: application/json { "base64": "/9j/4AAQSkZJRg…", "name": "morning.jpg" }

200 OK{ "id": 789, "counter": 10 }

Importer une image Elle devient l’image active dès que le cadre se synchronise.
Quelle API utiliser ?Comparer Cloud et local
Ce qui change API Cloud API locale
Mode du cadre Géré via l’application KoKonna Mode local, géré dans l’interface web du cadre
Destination des requêtes https://api.kokonna.art/openapi http://<frame-ip>/api/v1
Connexion HTTPS via Internet HTTP sur le même réseau local de confiance, pendant que le cadre est éveillé
Clé d’accès Clé API de l’appareil, dans les réglages du cadre de l’application Un jeton distinct de 32 caractères, dans Settings → Local API
Envoi d’une image Base64 dans du JSON ; la nouvelle image devient active JPEG en multipart, ou Y4 pour les cadres de 28,5 pouces ; enregistrement possible sans affichage
Sélection d’une image ID ou nom de l’image dans le cloud Nom de fichier renvoyé par le cadre, par exemple local_3.jpg
Limites 20 requêtes par minute et par clé ; 50 MB par requête 16 MiB par import ; les requêtes doivent tenir dans une fenêtre d’éveil

Utilisez l’API qui correspond au mode actuel du cadre. En mode local, le cadre conserve sa propre photothèque et l’application KoKonna ne la gère pas : les clés cloud, les ID d’image et les imports JSON ne s’appliquent donc pas à l’API locale.

Accédez à votre cadre via le cloud

Consultez les informations de l’appareil, importez et gérez des images, et changez ce qu’affiche un cadre KoKonna, depuis n’importe où.

Choisissez l’API Cloud pour une application, un service hébergé ou des mises à jour envoyées depuis l’extérieur du domicile. Elle fonctionne avec les cadres gérés dans l’application KoKonna. Pour un cadre en mode local, utilisez l’API locale.

URL de base
https://api.kokonna.art/openapi
Transport
HTTPS
Authentification
Jeton Bearer
Format
JSON

Conçue pour des intégrations légères

Usages courants de l’API Cloud avec les cadres :

  • Des photos de famille depuis n’importe où

    Envoyez une nouvelle photo de vacances sur un cadre familial depuis votre propre application ou service, puis vérifiez qu’elle a bien été synchronisée.

  • Tableau de bord de l’état des appareils

    Surveillez le heartbeat, la batterie, l’état de charge, la géométrie de l’écran et l’état de synchronisation de vos cadres.

  • Gestion de la galerie

    Listez les images existantes, supprimez celles qui sont obsolètes et choisissez l’image affichée.

  • Publication planifiée

    Laissez votre backend transformer un menu du jour, un agenda ou le planning d’un atelier en image, puis la publier sur le cadre.

  • Intégrations d’agents IA

    Rendez visibles les œuvres générées, les résultats de tâches, les bulletins et les mises à jour contextuelles.

Donnez à votre agent un ensemble d’outils pour le cadre

OpenClaw, Claude Code, ChatGPT ou tout agent capable d’appeler des outils peut piloter un cadre KoKonna grâce à une petite intégration côté serveur. Conservez la clé de l’appareil dans l’environnement d’exécution de l’agent, associez les opérations de l’API à des outils, et laissez l’agent inspecter, choisir, importer et afficher des œuvres.

Configuration initiale

  1. Obtenir la clé

    Copiez la clé API de l’appareil depuis les réglages du cadre dans l’application KoKonna.

  2. La garder privée

    Stockez-la dans les secrets côté serveur de l’agent, jamais dans le code client.

  3. Déclarer les outils

    Associez les opérations de l’API ci-dessous à des outils que l’agent peut appeler.

    Environnement
    BASE_URL=https://api.kokonna.art/openapi
    API_KEY=<DEVICE_API_KEY>

À chaque demande

« Affiche un paysage bleu et paisible dans l’atelier. » L’agent vérifie le cadre, réutilise ou crée une œuvre, l’affiche, puis confirme l’image active.
  1. DemanderL’utilisateur décrit ce qu’il souhaite voir au mur.
  2. InspecterLire l’état du cadre et les images existantes.
  3. AfficherRéutiliser une image ou en importer une nouvelle.
  4. VérifierContrôler l’appareil et rendre compte du résultat.
Outil de l’agent Opération de l’API Rôle
get_frame_status POST /device Vérifier la connexion, la batterie, la synchronisation et l’image actuelle.
list_frame_images POST /listImages Rechercher une œuvre existante avant d’importer un doublon.
upload_frame_image POST /upload Importer une œuvre en base64 brut et la rendre active.
display_frame_image POST /displayImageById Passer à une image existante à partir de son ID.
delete_frame_image POST /deleteImage Supprimer une image, uniquement après confirmation de l’utilisateur.
Modèle d’instructions pour l’agent
Prompt système
You control a KoKonna Frame with the provided tools.

1. Inspect the frame before changing it when its state is unknown.
2. Reuse a suitable image from the library when possible.
3. For new artwork: generate image → encode raw base64 → upload.
4. Remember that upload makes the new image active immediately.
5. Ask for confirmation before deleting any image.
6. After a write action, check device status and report the result.

S’authentifier avec la clé de l’appareil

  • Envoyez un jeton Bearer dans l’en-tête Authorization.
  • Le jeton est la clé API de l’appareil affichée dans les réglages du cadre.
  • Envoyez du JSON avec l’en-tête Content-Type: application/json.
En-têtes de requête
Authorization: Bearer <API_KEY>
Content-Type: application/json

Limitation du débit

20 requêtes par minute et par clé d’appareil

Au-delà de cette limite, l’API renvoie HTTP 429. Patientez un instant, puis réessayez.

Réponse 429
{ "message": "Too many requests, please try again later." }

Opérations sur l’appareil et les images

Tous les chemins commencent par https://api.kokonna.art/openapi.

POST/device

Obtenir les informations de l’appareil

Corps de la requête : {} ou omis.

Réponse 200
{
  "firmware": "B100V050610",
  "nickname": "KoKonna",
  "lastHeartbeat": "2026-06-16T06:56:25.782Z",
  "isCharging": false,
  "batteryLevel": 100,
  "sdUsedSize": 0,
  "switchType": "queue",
  "switchMinute": 60,
  "imageId": 423,
  "coverId": null,
  "timezone": "America/Adak",
  "point": 30,
  "screenWidth": 800,
  "screenHeight": 480,
  "screenRotate": 270,
  "synced": false,
  "online": false
}

Description des champs

firmware
Version actuelle du firmware.
nickname
Nom de l’appareil.
lastHeartbeat
Horodatage ISO 8601 du dernier heartbeat.
isCharging, batteryLevel
État d’alimentation actuel.
sdUsedSize
Espace utilisé sur la carte SD, en octets.
switchType, switchMinute
Mode de changement d’image (queue ou random) et intervalle en minutes.
imageId, coverId
ID de l’image actuelle et de l’image de couverture.
screenWidth, screenHeight, screenRotate
Géométrie de l’écran.
synced, online
Indique si la dernière image a été appliquée et si le cadre est connecté.
cURL
curl -X POST https://api.kokonna.art/openapi/device \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{}'

POST/upload

Importer une image

Corps de la requête
{
  "base64": "/9j/4AAQSkZJRgABAQEAAAAAAAD...",
  "name": "photo.jpg"
}
  • base64 est obligatoire : données d’image en base64 brut, sans préfixe d’URL de données tel que data:image/jpeg;base64,.
  • Le compteur d’images du cadre augmente et la nouvelle image devient active.
  • name est facultatif ; par défaut, il reprend le nom du fichier d’origine.
  • Les images sont recadrées à la zone d’affichage : respectez si possible le format de l’écran.
Réponse 200
{ "id": 789, "counter": 10 }

id est l’ID de la nouvelle image ; counter est le compteur d’images mis à jour.

cURL
curl -X POST https://api.kokonna.art/openapi/upload \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"base64":"<BASE64_DATA>","name":"photo.jpg"}'

POST/listImages

Lister les images

Corps de la requête : {} ou omis.

Réponse 200
{
  "total": 2,
  "list": [
    {
      "id": 789,
      "name": "photo.jpg",
      "fileId": "abc123.jpg",
      "size": 182736,
      "type": "image/jpeg",
      "width": 800,
      "height": 480,
      "createdAt": "2026-05-14T08:00:00.000Z",
      "updatedAt": "2026-05-14T08:00:00.000Z",
      "current": true
    }
  ]
}
total
Nombre d’images sur l’appareil.
list
Images, de l’ID le plus récent au plus ancien.
current
true pour l’image active sur le cadre.
cURL
curl -X POST https://api.kokonna.art/openapi/listImages \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{}'

POST/deleteImage

Supprimer une image

Corps de la requête
{ "imageId": 123 }
  • imageId est obligatoire et doit appartenir à l’appareil.
  • Le fichier image et son enregistrement sont supprimés ensemble, et le compteur d’images augmente.
  • Si vous supprimez l’image active, le cadre passe à la suivante disponible.
  • S’il ne reste aucune image, l’image actuelle devient null.
Réponse 200
{
  "success": true,
  "id": 123,
  "imageId": 122,
  "counter": 11
}
id
ID de l’image supprimée.
imageId
Image active après la suppression, ou null s’il n’en reste aucune.
counter
Compteur d’images mis à jour.

Erreurs

  • 500 avec { "message": "imageId is empty" } lorsque l’ID est absent ou invalide.
  • 500 avec { "message": "image not found" } lorsque l’image n’appartient pas à l’appareil.
cURL
curl -X POST https://api.kokonna.art/openapi/deleteImage \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"imageId":123}'

GET/image/:apikey/:imageId

Télécharger une image

apikey
Clé API de l’appareil, dans les réglages du cadre.
imageId
ID de l’image renvoyé par les endpoints d’import ou de liste.

La clé figure dans le chemin de l’URL : aucun en-tête Authorization n’est nécessaire. Traitez ces URL comme privées.

  • Renvoie le fichier image d’origine stocké, sous forme de flux binaire.
  • L’image doit appartenir à l’appareil identifié par apikey.
  • Le type de contenu dépend de l’extension du fichier stocké, généralement image/jpeg.

Erreurs

  • 404 avec { "message": "image not found" } pour un ID d’image invalide ou sans rapport avec l’appareil.
  • 500 avec { "message": "can not find robot <apikey>" } pour une clé d’appareil inconnue.
cURL
curl -L "https://api.kokonna.art/openapi/image/<API_KEY>/123" \
  -o image.jpg

POST/displayImageById

Afficher une image par son ID

Corps de la requête
{ "imageId": 123 }

Renvoie { "success": true }, ou 500 avec { "message": "image not found" } si aucune image ne porte ce nom.

cURL
curl -X POST https://api.kokonna.art/openapi/displayImageById \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"imageId":123}'

POST/displayImageByName

Afficher une image par son nom

Corps de la requête
{ "imageName": "photo.jpg" }

Renvoie { "success": true }, ou 500 avec { "message": "image not found" } si aucune image ne porte ce nom.

cURL
curl -X POST https://api.kokonna.art/openapi/displayImageByName \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"imageName":"photo.jpg"}'

Gestion des erreurs

Les erreurs renvoient un statut HTTP et un message JSON.

Statut Cas Corps
404 Introuvable La méthode indiquée dans l’URL n’existe pas. { "message": "can not find method <method_name>" }
429 Trop de requêtes La limite de débit a été dépassée. { "message": "Too many requests, please try again later." }
500 Erreur serveur Aucun appareil ne correspond à la clé, ou une autre erreur côté serveur s’est produite. { "message": "can not find robot <apikey>" } or { "message": "<error_message>" }

Taille des données

L’API Cloud accepte les requêtes jusqu’à 50 MB : vos imports en base64 doivent rester sous cette taille. L’API locale a ses propres formats et limites d’import.