Skip to content
Hoody.com

Capture, retrieve, and manage display screenshots, thumbnails, window information, and clipboard text. These endpoints run on the container-scoped display service and operate against the active display for the container.

Retrieves information about the current display including all available screenshots.

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": 18432,
"width": 320,
"height": 180
}
}
]
}
await client.display.getInformation();
Terminal window
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/info"

Returns a list of all available screenshots for the current display with their metadata.

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": 18432,
"width": 320,
"height": 180
}
},
{
"timestamp": "1749537000",
"timestamp_human": "2026-02-23T16:50:00+00:00",
"full": {
"path": "/hoody/storage/hoody-display/screenshots/display_6_1749537000.png",
"size": 241102,
"width": 1920,
"height": 1080
},
"thumbnail": null
}
]
}
await client.display.listScreenshots();
Terminal window
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/screenshots"

Captures a fresh screenshot of the display and returns the image file.

By default the response is a binary PNG image. Pass base64=true to receive a JSON envelope instead, which is useful for AI agents and systems that cannot handle binary data.

NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Accepted values: true, 1, empty string — 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": 18432,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}
}
await client.display.screenshots.capture();
// Base64 JSON response
await client.display.screenshots.capture({ base64: true });
Terminal window
curl -o screenshot.png \
"https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/screenshot"
# Base64 JSON response
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/screenshot?base64=true"

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

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

Retrieves a previously captured screenshot using its Unix timestamp.

NameInTypeRequiredDescription
timestamppathstringYesUnix timestamp of the screenshot. Use the timestamp field returned by screenshot metadata and 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. Accepted values: true, 1, empty string — 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": 18432,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}
}
await client.display.screenshots.getByTimestamp("1749541160");
// Base64 JSON response
await client.display.screenshots.getByTimestamp("1749541160", { base64: true });
Terminal window
curl -o screenshot.png \
"https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/screenshot/1749541160"

Takes a new screenshot but returns only metadata without the image data.

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": 18432,
"width": 320,
"height": 180
}
}
await client.display.screenshots.captureMetadata();
Terminal window
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/screenshot/info"

Returns the latest screenshot that was previously captured.

NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Accepted values: true, 1, empty string — 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": 18432,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}
}
await client.display.screenshots.getLatest();
// Base64 JSON response
await client.display.screenshots.getLatest({ base64: true });
Terminal window
curl -o screenshot.png \
"https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/screenshot/last"

Returns metadata about the latest screenshot without downloading the image.

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": 18432,
"width": 320,
"height": 180
}
}
await client.display.screenshots.getLatestMetadata();
Terminal window
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/screenshot/last/info"

Thumbnails are 320x180 scaled versions of screenshots and are useful for previews and gallery listings.

Captures a new screenshot and returns the thumbnail version.

NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Accepted values: true, 1, empty string — 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": 18432,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}
}
await client.display.thumbnails.capture();
// Base64 JSON response
await client.display.thumbnails.capture({ base64: true });
Terminal window
curl -o thumbnail.png \
"https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/thumbnail"

Retrieves the thumbnail for a specific screenshot by its Unix timestamp.

NameInTypeRequiredDescription
timestamppathstringYesUnix timestamp of the screenshot. Use the timestamp field returned by screenshot metadata and 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. Accepted values: true, 1, empty string — 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": 18432,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}
}
await client.display.thumbnails.getByTimestamp("1749541160");
// Base64 JSON response
await client.display.thumbnails.getByTimestamp("1749541160", { base64: true });
Terminal window
curl -o thumbnail.png \
"https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/thumbnail/1749541160"

Returns the thumbnail of the latest screenshot.

NameInTypeRequiredDescription
base64querybooleanNoReturn base64-encoded JSON response instead of binary image. Accepted values: true, 1, empty string — 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": 18432,
"width": 320,
"height": 180
}
},
"image": {
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB...",
"mimeType": "image/png",
"dataUrl": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}
}
await client.display.thumbnails.getLatest();
// Base64 JSON response
await client.display.thumbnails.getLatest({ base64: true });
Terminal window
curl -o thumbnail.png \
"https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/thumbnail/last"

Lists the windows currently present on the display, including geometry and focus state.

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": 4194305,
"windows": [
{
"windowId": 4194305,
"name": "Main — MyApp",
"class": ["myapp", "Myapp"],
"desktop": 0,
"geometry": {
"x": 120,
"y": 80,
"width": 1680,
"height": 920
},
"focused": true,
"states": ["Modal", "Active"]
}
]
}
await client.display.listWindows();
// Only visible windows
await client.display.listWindows({ onlyVisible: true });
Terminal window
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/windows?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 wmClass, wmName, wmRole, pid, and wmState.

NameInTypeRequiredDescription
windowIdpathstringYesWindow ID (decimal or hex 0x...)
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
{
"success": true,
"windowId": "0x400001",
"properties": {
"wmClass": ["myapp", "Myapp"],
"wmName": "Main — MyApp",
"wmRole": "MainWindow",
"pid": 4123,
"wmState": ["Modal", "Active"],
"wmType": ["Normal"],
"transientFor": null
}
}
await client.display.getWindowProperties("0x400001");
Terminal window
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/window/0x400001/properties"

Reads the current clipboard text. Supports the standard X11-style selections: clipboard, primary, and secondary.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
selectionquerystringNoClipboard buffer selection. Allowed values: clipboard (default), primary, secondary
{
"success": true,
"text": "echo hello world",
"selection": "clipboard"
}
await client.display.getClipboard();
// Read from the primary selection
await client.display.getClipboard({ selection: "primary" });
Terminal window
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/clipboard"
# Read from the primary selection
curl "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/clipboard?selection=primary"

Writes text to the clipboard. The text field is required and capped at 1048576 bytes; selection defaults to clipboard and accepts clipboard, primary, or secondary.

NameInTypeRequiredDescription
displayIdqueryintegerNoDisplay ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
NameTypeRequiredDescription
textstringYesClipboard text content. Maximum length 1048576 bytes
selectionstringNoClipboard buffer selection. Allowed values: clipboard (default), primary, secondary
{
"text": "echo hello world",
"selection": "clipboard"
}
{
"success": true,
"action": "clipboard_set",
"details": {}
}
await client.display.setClipboard({
text: "echo hello world",
selection: "clipboard"
});
Terminal window
curl -X POST "https://proj_8x7k2m-ct_4f9d1a-display-1.eu-west-1.containers.hoody.icu/api/v1/display/clipboard" \
-H "Content-Type: application/json" \
-d '{
"text": "echo hello world",
"selection": "clipboard"
}'