Skip to content

The App Execution API resolves, searches, and runs applications across configured package sources. Use these endpoints to look up candidates, plan an execution, delegate to a terminal session, run preflight checks, or batch multiple requests in a single call. The API supports query-parameter selectors, JSON body selectors, and bookmarkable path-based URLs.

Returns the full persisted runtime configuration including sources, profiles, and the currently selected profile.

This endpoint takes no parameters.

Terminal window
curl -X GET 'https://api.hoody.com/api/v1/run/config' \
-H 'Authorization: Bearer <token>'

Search for runnable application candidates across all configured and enabled package sources. Returns a ranked list of candidates with stable ordering for pick-by-index operations. The returned set_id can be used with subsequent run requests to ensure race-free candidate selection.

NameInTypeRequiredDescription
appquerystringYesPrimary name query (aliases q, name)
osqueryapp_OsNoTarget OS filter
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryapp_AppKindNoApp kind filter (gui, cli, any)
archqueryapp_ArchNoTarget CPU architecture filter
tagsqueryarrayNoFree-form tags for filtering and ranking (repeatable)
profilequerystringNoNamed profile for default preferences
channelquerystringNoRelease channel hint (for example stable or beta)
versionquerystringNoExact version or provider-defined version constraint
variantquerystringNoProvider-specific variant hint (for example portable or headless)
publisherquerystringNoPublisher hint for curated registries
repoquerystringNoRepository hint such as owner/name
releasequerystringNoRelease hint such as a tag name
assetquerystringNoDesired asset name or pattern
limitqueryintegerNoMax candidates to return (default 25)
Terminal window
curl -X GET 'https://api.hoody.com/api/v1/run/search?app=firefox&os=linux&kind=any&limit=10' \
-H 'Authorization: Bearer <token>'

Resolve a full ranked candidate set under a bounded cap, then page through it with an opaque cursor. This is the stable pagination contract for large result sets. The SDK call returns an async iterator that transparently pages through results.

Request Body: JSON body conforming to the app_PagedSearchRequest schema.

Terminal window
curl -X POST 'https://api.hoody.com/api/v1/run/search/paged' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"selector": {
"app": "code",
"os": "linux",
"kind": "any"
},
"page_size": 25
}'

Resolve and select an application using query parameters, then return the exact shell command to run. Supports all selector fields plus pick mode, output control, deferred execution metadata, and redirect behavior.

NameInTypeRequiredDescription
appquerystringYesPrimary name query
osqueryapp_OsNoTarget OS filter
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryapp_AppKindNoApp kind filter
archqueryapp_ArchNoTarget CPU architecture filter
tagsqueryarrayNoFree-form tags for filtering and ranking (repeatable)
profilequerystringNoNamed profile for default preferences
channelquerystringNoRelease channel hint
versionquerystringNoExact version or provider-defined version constraint
variantquerystringNoProvider-specific variant hint
publisherquerystringNoPublisher hint for curated registries
repoquerystringNoRepository hint such as owner/name
releasequerystringNoRelease hint such as a tag name
assetquerystringNoDesired asset name or pattern
pickqueryapp_PickModeNoCandidate selection mode (ask, first, index, id)
pick_indexqueryintegerNoCandidate index (required when pick=index)
candidate_idquerystringNoSpecific candidate ID (required when pick=id)
set_idquerystringNoBind pick to a specific candidate set
terminal_idqueryintegerNoTerminal session ID (default 1)
displayquerystringNoX11 DISPLAY number
originquerystringNoOrigin identifier for observability propagation
defer_pidqueryintegerNoDefer command injection until this PID exits
defer_start_time_ticksquerystringNoStart-time ticks used to avoid PID reuse bugs
defer_timeout_msqueryintegerNoMaximum defer wait time in milliseconds
defer_poll_msqueryintegerNoDefer polling interval in milliseconds
dry_runquerybooleanNoIf true, force command-only response (no delegation)
print_curlqueryapp_PrintCurlModeNoGenerate curl command (hoody-run or hoody-terminal)
formatqueryapp_OutputFormatNoOutput format (json or html)
redirectquerybooleanNoRedirect to display page after scheduling
redirect_toquerystringNoOverride redirect target URL
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -X GET 'https://api.hoody.com/api/v1/run/run?app=firefox&os=linux&kind=any&pick=first&terminal_id=1' \
-H 'Authorization: Bearer <token>'

Same behavior as GET /api/v1/run/run but accepts the full Selector as a JSON request body. Useful for programmatic clients and complex selectors.

Request Body: JSON body conforming to the app_Selector schema.

Terminal window
curl -X POST 'https://api.hoody.com/api/v1/run/run' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"app": "firefox",
"os": "linux",
"kind": "any",
"pick": "first",
"terminal_id": 1
}'

Resolve an application using clean, bookmarkable path-based URLs. Supports both positional and key-value path segments.

Positional examples:

  • /api/v1/run/go/{app}
  • /api/v1/run/go/{os}/{app}
  • /api/v1/run/go/{os}/{source}/{app}
  • /api/v1/run/go/{os}/{source}/{kind}/{app}

Key-value example: /api/v1/run/go/app/{app}/os/{os}/source/{source}/kind/{kind}/pick/{pick}/...

NameInTypeRequiredDescription
restpathstringYesPath segments for positional or key-value app specification
osqueryapp_OsNoTarget OS filter when not supplied in the path
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryapp_AppKindNoApp kind filter when not supplied in the path
archqueryapp_ArchNoTarget CPU architecture filter
tagsqueryarrayNoFree-form tags for filtering and ranking (repeatable)
profilequerystringNoNamed profile for default preferences
channelquerystringNoRelease channel hint
versionquerystringNoExact version or provider-defined version constraint
variantquerystringNoProvider-specific variant hint
publisherquerystringNoPublisher hint for curated registries
repoquerystringNoRepository hint such as owner/name
releasequerystringNoRelease hint such as a tag name
assetquerystringNoDesired asset name or pattern
pickqueryapp_PickModeNoCandidate selection mode (ask, first, index, id)
pick_indexqueryintegerNoCandidate index (required when pick=index)
candidate_idquerystringNoSpecific candidate ID (required when pick=id)
set_idquerystringNoBind pick to a specific candidate set
terminal_idqueryintegerNoTerminal session ID when not supplied in the path
displayquerystringNoX11 DISPLAY number
originquerystringNoOrigin identifier for observability propagation
defer_pidqueryintegerNoDefer command injection until this PID exits
defer_start_time_ticksquerystringNoStart-time ticks used to avoid PID reuse bugs
defer_timeout_msqueryintegerNoMaximum defer wait time in milliseconds
defer_poll_msqueryintegerNoDefer polling interval in milliseconds
dry_runquerybooleanNoIf true, force command-only response (no delegation)
print_curlqueryapp_PrintCurlModeNoGenerate curl command (hoody-run or hoody-terminal)
formatqueryapp_OutputFormatNoOutput format (json or html)
redirectquerybooleanNoRedirect to display page after scheduling
redirect_toquerystringNoOverride redirect target URL
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -X GET 'https://api.hoody.com/api/v1/run/go/linux/nix/firefox?pick=first&terminal_id=1' \
-H 'Authorization: Bearer <token>'

Same as /api/v1/run/go/{rest} but with terminal_id extracted from the path prefix. Allows clean URLs that specify both the target terminal and the application in a single path.

Example: /api/v1/run/t/2/go/linux/nix/firefox runs Firefox in terminal 2.

NameInTypeRequiredDescription
terminal_idpathintegerYesTerminal session ID (1-65535)
restpathstringYesPath segments for app specification
osqueryapp_OsNoTarget OS filter when not supplied in the path
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryapp_AppKindNoApp kind filter when not supplied in the path
archqueryapp_ArchNoTarget CPU architecture filter
tagsqueryarrayNoFree-form tags for filtering and ranking (repeatable)
profilequerystringNoNamed profile for default preferences
channelquerystringNoRelease channel hint
versionquerystringNoExact version or provider-defined version constraint
variantquerystringNoProvider-specific variant hint
publisherquerystringNoPublisher hint for curated registries
repoquerystringNoRepository hint such as owner/name
releasequerystringNoRelease hint such as a tag name
assetquerystringNoDesired asset name or pattern
pickqueryapp_PickModeNoCandidate selection mode (ask, first, index, id)
pick_indexqueryintegerNoCandidate index (required when pick=index)
candidate_idquerystringNoSpecific candidate ID (required when pick=id)
set_idquerystringNoBind pick to a specific candidate set
displayquerystringNoX11 DISPLAY number
originquerystringNoOrigin identifier for observability propagation
defer_pidqueryintegerNoDefer command injection until this PID exits
defer_start_time_ticksquerystringNoStart-time ticks used to avoid PID reuse bugs
defer_timeout_msqueryintegerNoMaximum defer wait time in milliseconds
defer_poll_msqueryintegerNoDefer polling interval in milliseconds
dry_runquerybooleanNoIf true, force command-only response (no delegation)
print_curlqueryapp_PrintCurlModeNoGenerate curl command (hoody-run or hoody-terminal)
formatqueryapp_OutputFormatNoOutput format (json or html)
redirectquerybooleanNoRedirect to display page after scheduling
redirect_toquerystringNoOverride redirect target URL
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -X GET 'https://api.hoody.com/api/v1/run/t/2/go/linux/nix/firefox?pick=first' \
-H 'Authorization: Bearer <token>'

Resolve, optionally pick, and normalize the execution plan for a selector without scheduling execution. Use this endpoint to inspect what would happen — including missing requirements, recommended mode, and effective policy — before actually running a request.

Request Body: JSON body conforming to the app_Selector schema.

Terminal window
curl -X POST 'https://api.hoody.com/api/v1/run/preflight' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"app": "firefox",
"os": "linux",
"kind": "any",
"pick": "first"
}'

Process multiple search or command-only run items in one request. Each item produces its own success or error payload. Use this endpoint to amortize overhead when you need to resolve or run several apps at once.

Request Body: JSON body conforming to the app_BatchRequest schema.

Terminal window
curl -X POST 'https://api.hoody.com/api/v1/run/batch' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{
"items": [
{
"request_id": "req-1",
"mode": "search",
"selector": { "app": "firefox", "os": "linux", "kind": "any" }
},
{
"request_id": "req-2",
"mode": "run",
"selector": { "app": "code", "os": "linux", "kind": "any", "pick": "first" }
}
]
}'

Returns the OpenAPI 3.0.3 specification for this API in JSON format. Converted from the canonical YAML source.

This endpoint takes no parameters.

Terminal window
curl -X GET 'https://api.hoody.com/api/v1/run/openapi.json' \
-H 'Authorization: Bearer <token>'

Returns the OpenAPI 3.0.3 specification for this API in YAML format.

This endpoint takes no parameters.

Terminal window
curl -X GET 'https://api.hoody.com/api/v1/run/openapi.yaml' \
-H 'Authorization: Bearer <token>'