Skip to content

The Display Screenshot API provides endpoints to capture, retrieve, and manage display screenshots, thumbnails, window information, and clipboard contents. Use these endpoints to integrate visual display access into applications, build screenshot inventory systems, or programmatically interact with a display’s window manager.

All endpoints accept an optional displayId query parameter to target a specific display, overriding the *-display-N.* hostname pattern.

Retrieves information about the current display including all available screenshots. This is the standardized RESTful version of /display.

Use this for: RESTful API integrations, display management systems, screenshot inventory queries.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"display": 6,
"screenshots": [
{
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
}
]
}
const result = await client.display.getInformation({
displayId: 6,
});

Returns a list of all available screenshots for the current display with their metadata. Standardized API version of /screenshots.

Use this for: RESTful API integrations, screenshot management applications, historical screenshot browsing.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"display": 6,
"screenshots": [
{
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
},
{
"timestamp": "1749537600",
"timestamp_human": "2026-02-23T16:00:00+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749537600.png",
"size": 238104,
"width": 1920,
"height": 1080
},
"thumbnail": null
}
]
}
const result = await client.display.listScreenshots({
displayId: 6,
});

Captures a fresh screenshot of the display and returns the image file. Standardized API endpoint, identical to /screenshot.

Response Formats:

  • Binary PNG image (default)
  • Base64 JSON (with ?base64=true)
NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Useful for AI agents and systems that can’t handle binary data. Accepted values: true, 1, “ (empty) → Return base64 JSON; false, 0 → Return binary (default)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"info": {
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
}
}
const result = await client.display.screenshots.capture({
displayId: 6,
base64: true,
});

Takes a new screenshot but returns only metadata without the image data. Standardized API version of /screenshot/info.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
}
const result = await client.display.screenshots.captureMetadata({
displayId: 6,
});

GET /api/v1/display/screenshot/{timestamp}

Section titled “GET /api/v1/display/screenshot/{timestamp}”

Retrieves a previously captured screenshot using its Unix timestamp. Standardized API version of /screenshot/{timestamp}.

NameInTypeRequiredDescription
timestamppathstringYesUnix timestamp of the screenshot. Use the timestamp field returned by screenshot metadata/list endpoints. Do not use timestamp_human for path queries. Must be numeric only for security.
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Useful for AI agents and systems that can’t handle binary data. Accepted values: true, 1, “ (empty) → Return base64 JSON; false, 0 → Return binary (default)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"info": {
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
}
}
const result = await client.display.screenshots.getByTimestamp({
timestamp: "1749541160",
displayId: 6,
});

Returns the latest screenshot that was previously captured. Standardized API version of /screenshot/last.

NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Useful for AI agents and systems that can’t handle binary data. Accepted values: true, 1, “ (empty) → Return base64 JSON; false, 0 → Return binary (default)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"info": {
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
}
}
const result = await client.display.screenshots.getLatest({
displayId: 6,
});

Returns metadata about the latest screenshot without downloading the image. Standardized API version of /screenshot/last/info.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
}
const result = await client.display.screenshots.getLatestMetadata({
displayId: 6,
});

Captures a new screenshot and returns the thumbnail version (320x180 scaled). Standardized API version of /thumbnail.

NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Useful for AI agents and systems that can’t handle binary data. Accepted values: true, 1, “ (empty) → Return base64 JSON; false, 0 → Return binary (default)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"info": {
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
}
}
const result = await client.display.thumbnails.capture({
displayId: 6,
});

Retrieves the thumbnail for a specific screenshot by its Unix timestamp. Standardized API version of /thumbnail/{timestamp}.

NameInTypeRequiredDescription
timestamppathstringYesUnix timestamp of the screenshot. Use the timestamp field returned by screenshot metadata/list endpoints. Do not use timestamp_human for path queries. Must be numeric only for security.
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Useful for AI agents and systems that can’t handle binary data. Accepted values: true, 1, “ (empty) → Return base64 JSON; false, 0 → Return binary (default)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"info": {
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
}
}
const result = await client.display.thumbnails.getByTimestamp({
timestamp: "1749541160",
displayId: 6,
});

Returns the thumbnail of the latest screenshot. Standardized API version of /thumbnail/last.

NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Useful for AI agents and systems that can’t handle binary data. Accepted values: true, 1, “ (empty) → Return base64 JSON; false, 0 → Return binary (default)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"info": {
"timestamp": "1749541160",
"timestamp_human": "2026-02-23T16:57:02+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160.png",
"size": 245760,
"width": 1920,
"height": 1080
},
"thumbnail": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749541160_thumb.png",
"size": 12800,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
}
}
const result = await client.display.thumbnails.getLatest({
displayId: 6,
});

Lists all windows on the current display, optionally filtered to visible windows only.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
onlyVisiblequerybooleanNoIf true, only include visible windows
{
"success": true,
"display": 6,
"focusedWindowId": 1048579,
"windows": [
{
"windowId": 1048579,
"name": "Terminal — bash",
"class": ["terminal", "Terminal"],
"desktop": 0,
"geometry": {
"x": 120,
"y": 80,
"width": 1024,
"height": 768
},
"focused": true,
"states": ["focused", "active"]
},
{
"windowId": 1048580,
"name": "Code Editor",
"class": ["code", "Code"],
"desktop": 0,
"geometry": {
"x": 0,
"y": 0,
"width": 1920,
"height": 1080
},
"focused": false,
"states": ["maximized"]
}
]
}
const result = await client.display.listWindows({
displayId: 6,
onlyVisible: true,
});

GET /api/v1/display/window/{windowId}/properties

Section titled “GET /api/v1/display/window/{windowId}/properties”

Retrieves extended properties for a specific window, including WM class, name, role, PID, and state information.

NameInTypeRequiredDescription
windowIdpathstringYesWindow ID (decimal or hex 0x...)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"success": true,
"windowId": "1048579",
"properties": {
"wmClass": ["terminal", "Terminal"],
"wmName": "Terminal — bash",
"wmRole": "terminal",
"pid": 4321,
"wmState": ["focused", "active"],
"wmType": ["normal"],
"transientFor": null
}
}
const result = await client.display.getWindowProperties({
windowId: "1048579",
displayId: 6,
});

Reads the current clipboard text from a specific buffer selection. Use the selection parameter to target the primary, secondary, or clipboard buffer.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
selectionquerystringNoClipboard buffer selection. Default: "clipboard". Allowed values: "clipboard", "primary", "secondary"
{
"success": true,
"text": "echo 'Hello, world!'",
"selection": "clipboard"
}
const result = await client.display.getClipboard({
displayId: 6,
selection: "clipboard",
});

Writes text to the display’s clipboard buffer.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
NameTypeRequiredDescription
textstringYesClipboard text content. Max length: 1,048,576 characters
selectionstringNoClipboard buffer selection. Default: "clipboard". Allowed values: "clipboard", "primary", "secondary"
{
"text": "echo 'Hello, world!'",
"selection": "clipboard"
}
{
"success": true,
"action": "clipboard_write",
"details": {
"bytes_written": 21,
"selection": "clipboard"
}
}
const result = await client.display.setClipboard({
displayId: 6,
data: {
text: "echo 'Hello, world!'",
selection: "clipboard",
},
});