Use these endpoints to drive low-level interaction with a running display container: dispatch synthetic mouse and keyboard events, manage windows, read on-screen geometry, and capture screenshots. Every endpoint targets the container’s display service and supports the optional displayId query parameter to override the hostname instance segment.
The base URL for all examples below is https://{projectId}-{containerId}-display-1.{server}.containers.hoody.com.
Returns the dimensions of the display.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
curl -X GET " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/display-geometry " \
-H " Authorization: Bearer $HOODY_TOKEN "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . geometry ();
" message " : " No display context available "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Returns the current cursor position and the window beneath it.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
curl -X GET " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/location " \
-H " Authorization: Bearer $HOODY_TOKEN "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseLocation ();
" message " : " No display context available "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Returns the position and size of a window by ID.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999 windowIdpath string Yes Window ID (decimal or hex)
curl -X GET " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/12345/geometry " \
-H " Authorization: Bearer $HOODY_TOKEN "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowGeometry ( " 12345 " );
" message " : " No display context available "
" message " : " Window not found "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Returns the title of a window by ID.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999 windowIdpath string Yes Window ID (decimal or hex)
curl -X GET " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/12345/name " \
-H " Authorization: Bearer $HOODY_TOKEN "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowName ( " 12345 " );
" name " : " Untitled - gedit "
" message " : " No display context available "
" message " : " Window not found "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Returns the ID of the currently focused window.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
curl -X GET " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/active " \
-H " Authorization: Bearer $HOODY_TOKEN "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowActive ();
" message " : " No display context available "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Executes a single named action with an optional screenshot capture.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description actionstring Yes Action path (e.g. mouse/click, keyboard/type) paramsobject No Action-specific parameters screenshotboolean No Capture screenshot after action. Default: true screenshotDelayinteger No Delay before screenshot in milliseconds. Default: 100 screenshotRegionstring No Crop region in format x1,y1,x2,y2
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/act " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"action":"mouse/click","params":{"button":1},"screenshot":true} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . act ({
" timestamp " : " 2024-01-15T12:34:56.789Z " ,
" data " : " iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB... " ,
" dataUrl " : " data:image/png;base64,iVBORw0KGgoAAAANSUhEUg... "
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Executes a sequence of actions atomically and returns per-action results.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description actionsarray Yes Ordered list of actions to execute (1-50 items). Each item has action (string, required) and params (object, optional).
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/batch " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"actions":[{"action":"mouse/move","params":{"x":100,"y":100}},{"action":"mouse/click","params":{"button":1}}]} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . batch ({
{ action : " mouse/move " , params : { x : 100 , y : 100 } },
{ action : " mouse/click " , params : { button : 1 } }
{ " index " : 0 , " action " : " mouse/move " , " success " : true },
{ " index " : 1 , " action " : " mouse/click " , " success " : true }
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Moves the cursor to a position and clicks.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description xinteger Yes Target X coordinate yinteger Yes Target Y coordinate buttoninteger No Mouse button (1=left, 2=middle, 3=right, 4-7=extra). Default: 1
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/click-at " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"x":250,"y":140,"button":1} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . clickAt ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Drags from a start point to an end point.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description startXinteger Yes Start X coordinate startYinteger Yes Start Y coordinate endXinteger Yes End X coordinate endYinteger Yes End Y coordinate buttoninteger No Mouse button (1=left, 2=middle, 3=right, 4-7=extra). Default: 1 stepsinteger No Number of intermediate mouse positions for smooth drag (1-1000)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/drag " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"startX":100,"startY":100,"endX":500,"endY":500,"steps":20} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . drag ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Emergency release of all held inputs (mouse buttons and keys).
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/reset " \
-H " Authorization: Bearer $HOODY_TOKEN "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . reset ();
" message " : " No display context available "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Selects a range by clicking the start point and shift-clicking the end point.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description xinteger Yes Start X coordinate yinteger Yes Start Y coordinate endXinteger Yes End X coordinate endYinteger Yes End Y coordinate
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/select " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"x":120,"y":80,"endX":420,"endY":280} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . select ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Moves to a position, clicks to focus, and types text — all in one call.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description xinteger Yes Target X coordinate yinteger Yes Target Y coordinate textstring Yes Text to type (max 10000 chars) delayinteger No Inter-keystroke delay in milliseconds (0-1000)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/type-at " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"x":300,"y":200,"text":"hello world","delay":10} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . typeAt ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Waits for a specified duration and optionally captures a screenshot.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description msinteger Yes Wait duration in milliseconds (50-30000) screenshotboolean No Capture screenshot after wait. Default: false
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/input/wait " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"ms":500,"screenshot":true} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . wait ({
" timestamp " : " 2024-01-15T12:34:56.789Z " ,
" data " : " iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB... " ,
" dataUrl " : " data:image/png;base64,iVBORw0KGgoAAAANSUhEUg... "
" message " : " No display context available "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Presses one or more key combinations. Each element of keys is pressed in sequence.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description keysarray Yes Key combinations (e.g. ["ctrl+c", "Return"]); 1-20 items, max 100 chars each windowinteger | string No Target window ID (decimal or hex) delayinteger No Delay in milliseconds (0-5000) clearModifiersboolean No Clear modifier keys before pressing
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/keyboard/key " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"keys":["ctrl+a","Delete"],"clearModifiers":true} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . keyboardKey ({
keys : [ " ctrl+a " , " Delete " ],
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Holds a single key down. Pair with key-up to release.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description keystring Yes Key name (X11 keysym, e.g. Shift_L, ctrl); max 100 chars windowinteger | string No Target window ID holdMsinteger No Auto-release after this many milliseconds (100-60000)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/keyboard/key-down " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"key":"Shift_L","holdMs":2000} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . keyboardKeyDown ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Releases a key previously held with key-down.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description keystring Yes Key name (X11 keysym); max 100 chars windowinteger | string No Target window ID
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/keyboard/key-up " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . keyboardKeyUp ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Types a string of text into the focused window.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description textstring Yes Text to type (max 10000 chars) windowinteger | string No Target window ID delayinteger No Inter-keystroke delay in milliseconds (0-1000) clearModifiersboolean No Clear modifier keys before typing
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/keyboard/type " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"text":"The quick brown fox.","delay":5} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . keyboardType ({
text : " The quick brown fox. " ,
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Clicks the mouse button at the current cursor position.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description buttoninteger No Mouse button (1=left, 2=middle, 3=right, 4-7=extra). Default: 1 repeatinteger No Number of repeated clicks (1-100). Default: 1 delayinteger No Delay between repeats in milliseconds (0-5000) windowinteger | string No Target window ID (decimal or hex 0x...)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/click " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"button":1,"repeat":1} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseClick ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Double-clicks the mouse button at the current cursor position.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description buttoninteger No Mouse button (1=left, 2=middle, 3=right, 4-7=extra). Default: 1 windowinteger | string No Target window ID
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/double-click " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseDoubleClick ({
" action " : " double-click " ,
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Presses and holds a mouse button. Pair with mouse/up to release, or set holdMs to auto-release.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description buttoninteger No Mouse button (1=left, 2=middle, 3=right, 4-7=extra). Default: 1 windowinteger | string No Target window ID holdMsinteger No Auto-release after this many milliseconds (100-60000)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/down " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"button":1,"holdMs":1500} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseDown ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Moves the cursor to an absolute screen coordinate.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description xinteger Yes Target X coordinate (-65535 to 65535) yinteger Yes Target Y coordinate (-65535 to 65535) windowinteger | string No Target window ID screeninteger No Target screen index (0-15) syncboolean No Wait for the move to settle before returning
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/move " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"x":640,"y":360,"screen":0} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseMove ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Moves the cursor by a relative offset from its current position.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description xinteger Yes Horizontal offset yinteger Yes Vertical offset syncboolean No Wait for the move to settle before returning
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/move-relative " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseMoveRelative ({
" action " : " move-relative " ,
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Scrolls in one of four directions.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description directionstring Yes Scroll direction. One of: up, down, left, right clicksinteger No Number of scroll clicks (1-100). Default: 5
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/scroll " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"direction":"down","clicks":5} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseScroll ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Releases a mouse button previously held with mouse/down.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description buttoninteger No Mouse button (1=left, 2=middle, 3=right, 4-7=extra). Default: 1 windowinteger | string No Target window ID
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/mouse/up " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . mouseUp ({
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Closes a window by ID.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description windowIdinteger | string Yes Window ID (decimal or hex 0x...)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/close " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowClose ({
" message " : " No display context available "
" message " : " Window not found "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Focuses (activates) a window by ID.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description windowIdinteger | string Yes Window ID (decimal or hex 0x...)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/focus " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowFocus ({
" message " : " No display context available "
" message " : " Window not found "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Minimizes a window by ID.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description windowIdinteger | string Yes Window ID (decimal or hex 0x...)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/minimize " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowMinimize ({
" message " : " No display context available "
" message " : " Window not found "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Moves a window to a new position. Use relative: true to offset from the current position.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description windowIdinteger | string Yes Window ID (decimal or hex 0x...) xinteger Yes Target X coordinate yinteger Yes Target Y coordinate syncboolean No Wait for the move to settle before returning relativeboolean No Treat x/y as offsets from the current position
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/move " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"windowId":12345,"x":50,"y":50} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowMove ({
" message " : " No display context available "
" message " : " Window not found "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Raises a window to the top of the stacking order.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description windowIdinteger | string Yes Window ID (decimal or hex 0x...)
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/raise " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowRaise ({
" message " : " No display context available "
" message " : " Window not found "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Resizes a window.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description windowIdinteger | string Yes Window ID (decimal or hex 0x...) widthinteger Yes New width (min 0) heightinteger Yes New height (min 0) syncboolean No Wait for the resize to settle before returning useHintsboolean No Use WM size hints instead of forcing the window manager to resize
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/resize " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"windowId":12345,"width":1024,"height":768} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowResize ({
" message " : " No display context available "
" message " : " Window not found "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "
Searches for windows whose name, class, or classname matches a regex pattern.
Name In Type Required Description displayIdquery integer No Display ID to use (overrides the *-display-N.* hostname pattern). Valid range: 1-999999
Name Type Required Description patternstring Yes Search pattern (regex); max 200 chars nameboolean No Search by window name/title classboolean No Search by window class classnameboolean No Search by window classname onlyVisibleboolean No Only return visible windows
curl -X POST " https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com/api/v1/display/window/search " \
-H " Authorization: Bearer $HOODY_TOKEN " \
-H " Content-Type: application/json " \
-d ' {"pattern":"^Terminal","name":true,"onlyVisible":true} '
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://67e89abc123def456789abcd-890abcdef12345678901cdef-display-1.node-us.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . display . input . windowSearch ({
" windows " : [ 12345 , 67890 ]
" message " : " No display context available "
" error " : " Too Many Requests " ,
" message " : " Action queue is full "
" error " : " Internal Server Error " ,
" message " : " Input action failed "
" error " : " Service Unavailable " ,
" message " : " Display is not available "