Ontvang een lanceringsmelding

Guides & API Reference

Open API Documentation

Bring family photos, daily briefings, and your own automations to Inkanva. Connect through the cloud or control your frame on your local Wi-Fi.

Cloud API · Remote access Local API · Your network
Which API should I use?

Start here

Two ways to make it yours.

Cloud API

Send photos while you are away, connect a hosted app, or publish artwork from a remote service. Your integration talks to Inkanva’s cloud.

Read the Cloud API guide

Local API

Connect a home server, NAS, or automation on your own Wi-Fi. Photos go straight to the frame, with no cloud authentication needed.

Set up Local API
Choose the connection that fits your setup
What changes?Cloud APILocal API
Frame modeManaged through the Inkanva AppLocal mode, managed in the frame’s browser interface
Where requests gohttps://api.inkanva.com/openapihttp://<frame-ip>/api/v1
ConnectionHTTPS over the internetHTTP on the same trusted local network, while the frame is awake
Access keyDevice API key from Frame settingsSeparate 32-character access token from local Settings → Local API
Sending an imageBase64 in JSON; the new image becomes activeJPEG multipart, or Y4 for 28.5-inch frames; optionally save without displaying
Selecting an imageCloud image ID or nameFilename returned by the frame, such as local_3.jpg
Limits20 requests/minute per key; 50 MB request payload16 MiB upload limit; requests must fit an awake window

Choose the API for the frame’s current mode. Local mode uses its own photo library and controls; the Inkanva App does not manage the frame in this mode. Cloud keys, image IDs, and JSON upload examples do not apply to Local API.

Cloud API / 01

Reach your frame through the cloud.

Use this API to query device information, upload and manage images, and switch the displayed image on an Inkanva Frame remotely. Choose Cloud API for an app, a hosted service, or updates sent from outside the home. Use it with a frame managed through the Inkanva App; for local mode, select the Local API tab.

Base URL
https://api.inkanva.com/openapi
Transport
HTTPS
Authentication
Bearer Token
Format
JSON

Cloud API / 02

Built for lightweight integrations.

Family Photos from Anywhere

Send a new holiday photo to a family frame from your own app or service. Upload the image, then check device sync status.

Device Status Dashboard

Monitor heartbeat, battery, charging state, screen geometry, and sync status.

Gallery Management

List existing images, remove outdated assets, and select the active image.

Scheduled Content Publishing

Have your backend turn a daily menu, calendar, or studio schedule into an image and publish it to the frame.

AI Agent Integrations

Turn generated artwork, task results, briefings, and context-aware updates into visible output.

Cloud API / 03

Give your agent a set of frame tools.

OpenClaw, Claude Code, ChatGPT, or any tool-calling agent can control Inkanva through a small server-side integration. Keep the device key in the agent runtime, map the API operations to tools, then let the agent inspect, select, upload, and display artwork.

Set up once

  1. 01

    Get the keyCopy it from the Frame settings page.

  2. 02

    Keep it privateStore it in the agent’s server-side secrets.

  3. 03

    Register toolsMap the API operations to callable agent tools.

BASE_URLhttps://api.inkanva.com/openapi API_KEY<DEVICE_API_KEY>

Every request

01Ask 02Inspect 03Display 04Verify
User “Display a quiet blue landscape in the studio.”

The agent checks the frame, reuses or creates artwork, displays it, then confirms the active image.

Agent toolAPI operationPurpose
get_frame_statusPOST /device

Check online, battery, sync, and current image.

list_frame_imagesPOST /listImages

Find existing artwork before uploading a duplicate.

upload_frame_imagePOST /upload

Upload raw base64 artwork and make it active.

display_frame_imagePOST /displayImageById

Switch to an existing image by ID.

delete_frame_imagePOST /deleteImage

Remove an image only after user confirmation.

Agent instruction template
You control an Inkanva 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.

Cloud API / 04

Authenticate with the device key.

  • Use a Bearer token in the Authorization header.
  • The token is the device API key shown on the Frame settings page.
  • Send JSON requests with the Content-Type: application/json header.
Request headers
Authorization: Bearer <API_KEY>
Content-Type: application/json

Cloud API / 05

20 requests per minute.

20requests per minute
per device key

Exceeding the limit returns HTTP 429.

429 response
{ "message": "Too many requests, please try again later." }

Cloud API / 06

Device and image operations.

POST /device

Get Device Information

Request body: {} or omitted.

Response 200

{
  "firmware": "B100V050610",
  "nickname": "Inkanva",
  "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
}

Field Notes

firmware
Current firmware version.
nickname
Device nickname.
lastHeartbeat
ISO8601 timestamp of the last heartbeat.
isCharging, batteryLevel
Current power state.
switchType, switchMinute
Image change strategy and interval.
screenWidth, screenHeight, screenRotate
Display geometry.
synced, online
Latest-image sync and connection status.

cURL

curl -X POST https://api.inkanva.com/openapi/device \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{}'
POST /upload

Upload Image

Request Body

{
  "base64": "/9j/4AAQSkZJRgABAQEAAAAAAAD...",
  "name": "photo.jpg"
}

Rules and Behavior

  • base64 is required and must contain raw base64 image data without a data URL prefix.
  • The frame image counter is incremented and the new image becomes active.
  • name is optional and defaults to the original filename.
  • Images are automatically cropped to the display area; match the screen ratio when possible.

Response 200

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

cURL

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

List Images

Request body: {} or omitted.

Response 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
    }
  ]
}

Field Notes

  • total is the number of images belonging to the device.
  • list contains images ordered by ID descending.
  • current is true when the image is currently active.

cURL

curl -X POST https://api.inkanva.com/openapi/listImages \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{}'
POST /deleteImage

Delete Image

Request Body

{ "imageId": 123 }

Rules and Behavior

  • imageId is required and must belong to the device.
  • The image file and database record are deleted together.
  • The frame image counter is incremented after deletion.
  • If the active image is deleted, the server switches to the next available image.
  • If no images remain, the current image becomes null.

Response 200

{
  "success": true,
  "id": 123,
  "imageId": 122,
  "counter": 11
}

Errors

  • 500 with { "message": "imageId is empty" } when the ID is missing or invalid.
  • 500 with { "message": "image not found" } when the image does not belong to the device.

cURL

curl -X POST https://api.inkanva.com/openapi/deleteImage \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"imageId":123}'
GET /image/:apikey/:imageId

Get Image by API Key and Image ID

Path Parameters

apikey
Device API key shown on the Frame settings page.
imageId
Image ID returned by the upload or list APIs.

The API key is passed in the URL path, so the Authorization header is not required.

Behavior

  • Returns the original stored image file.
  • The image must belong to the device identified by apikey.
  • The response type is derived from the stored file extension, typically image/jpeg.

Response 200

Binary image stream.

Errors

  • 404 with { "message": "image not found" } for an invalid or unrelated image ID.
  • 500 with { "message": "can not find robot <apikey>" } for an unknown device key.

cURL

curl -L "https://api.inkanva.com/openapi/image/<API_KEY>/123" \
  -o image.jpg
POST /displayImageById

Display Image by ID

Request Body

{ "imageId": 123 }

Response 200

{ "success": true }

Returns 500 with { "message": "image not found" } when the image does not belong to the device.

cURL

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

Display Image by Name

Request Body

{ "imageName": "photo.jpg" }

Response 200

{ "success": true }

Returns 500 with { "message": "image not found" } when the image name is not found.

cURL

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

Cloud API / 07

HTTP status and JSON messages.

404

Not Found

Unknown method in URL.

{ "message": "can not find method <method_name>" }
429

Too Many Requests

Rate limit exceeded.

{ "message": "Too many requests, please try again later." }
500

Internal Server Error

The device cannot be found, or another server-side failure occurred.

{ "message": "<error_message>" }

Cloud API / 08

Maximum request: 50 MB.

The Cloud API accepts request payloads up to 50 MB. Ensure base64 image uploads fit within this limit. Local API has its own upload formats and limits.