Skip to content

The App Execution API resolves applications from configured sources and either schedules them through hoody-terminal or returns the exact shell command to run. Use these endpoints to search candidates, preflight an execution plan, run individual apps (via query, path, or JSON body), or batch multiple operations in a single request.

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

This endpoint takes no parameters.

Terminal window
curl -sS 'http://127.0.0.1:7682/api/v1/run/config'

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 -sS 'http://127.0.0.1:7682/api/v1/run/openapi.json'

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

This endpoint takes no parameters.

Terminal window
curl -sS 'http://127.0.0.1:7682/api/v1/run/openapi.yaml'

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)
osquerystring (linux, windows, any)NoTarget OS filter
sourcequeryarrayNoSource kind filter (repeatable)
kindquerystring (gui, cli, any)NoApp kind filter
archquerystring (amd64, arm64, any)NoTarget 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 -sS 'http://127.0.0.1:7682/api/v1/run/search?app=firefox&os=linux&limit=10'

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.

This endpoint takes no parameters.

Accepts a JSON body matching the PagedSearchRequest schema.

{
"selector": {
"app": "firefox",
"os": "linux",
"kind": "any",
"limit": 100
},
"cursor": null,
"page_size": 25
}
Terminal window
curl -sS -X POST 'http://127.0.0.1:7682/api/v1/run/search/paged' \
-H 'content-type: application/json' \
-d '{"selector":{"app":"firefox","os":"linux","limit":100},"page_size":25}'

Resolve, optionally pick, and normalize the execution plan for a selector without scheduling execution.

This endpoint takes no parameters.

Accepts a JSON body matching the Selector schema.

{
"app": "firefox",
"os": "linux",
"kind": "any",
"pick": "first",
"terminal_id": 1
}
Terminal window
curl -sS -X POST 'http://127.0.0.1:7682/api/v1/run/preflight' \
-H 'content-type: application/json' \
-d '{"app":"firefox","os":"linux","kind":"any","pick":"first","terminal_id":1}'

Resolve and select an application using query parameters, then return the exact shell command to run. By default this endpoint is command-only and does not call hoody-terminal. Legacy delegation is opt-in via HOODY_RUN_ENABLE_TERMINAL_EXECUTE=true. Supports all selector fields plus pick mode, output control, deferred execution metadata, and redirect behavior.

NameInTypeRequiredDescription
appquerystringYesPrimary name query
osquerystring (linux, windows, any)NoTarget OS filter
sourcequeryarrayNoSource kind filter (repeatable)
kindquerystring (gui, cli, any)NoApp kind filter
archquerystring (amd64, arm64, any)NoTarget 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
pickquerystring (ask, first, index, id)NoCandidate selection mode
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_curlquerystring (hoody-run, hoody-terminal)NoGenerate curl command
formatquerystring (json, html)NoOutput format
redirectquerybooleanNoRedirect to display page after scheduling
redirect_toquerystringNoOverride redirect target URL
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -sS 'http://127.0.0.1:7682/api/v1/run/run?app=firefox&os=linux&pick=first'

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.

This endpoint takes no parameters.

Accepts a JSON body matching the Selector schema.

{
"app": "firefox",
"os": "linux",
"kind": "any",
"source": ["nix"],
"pick": "first",
"terminal_id": 1,
"format": "json"
}
Terminal window
curl -sS -X POST 'http://127.0.0.1:7682/api/v1/run/run' \
-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: /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: /api/v1/run/go/app/{app}/os/{os}/source/{source}/kind/{kind}/pick/{pick}/...

NameInTypeRequiredDescription
restpathstringYesPath segments for positional or key-value app specification
osquerystring (linux, windows, any)NoTarget OS filter when not supplied in the path
sourcequeryarrayNoSource kind filter (repeatable)
kindquerystring (gui, cli, any)NoApp kind filter when not supplied in the path
archquerystring (amd64, arm64, any)NoTarget 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
pickquerystring (ask, first, index, id)NoCandidate selection mode
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_curlquerystring (hoody-run, hoody-terminal)NoGenerate curl command
formatquerystring (json, html)NoOutput format
redirectquerybooleanNoRedirect to display page after scheduling
redirect_toquerystringNoOverride redirect target URL
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -sS 'http://127.0.0.1:7682/api/v1/run/go/linux/nix/firefox?pick=first'

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
osquerystring (linux, windows, any)NoTarget OS filter when not supplied in the path
sourcequeryarrayNoSource kind filter (repeatable)
kindquerystring (gui, cli, any)NoApp kind filter when not supplied in the path
archquerystring (amd64, arm64, any)NoTarget 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
pickquerystring (ask, first, index, id)NoCandidate selection mode
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_curlquerystring (hoody-run, hoody-terminal)NoGenerate curl command
formatquerystring (json, html)NoOutput format
redirectquerybooleanNoRedirect to display page after scheduling
redirect_toquerystringNoOverride redirect target URL
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -sS 'http://127.0.0.1:7682/api/v1/run/t/2/go/linux/nix/firefox?pick=first'

Process multiple search or command-only run items in one request. Each item produces its own success or error payload.

This endpoint takes no parameters.

Accepts a JSON body matching the BatchRequest schema.

{
"items": [
{
"request_id": "req-1",
"mode": "search",
"selector": {
"app": "firefox",
"os": "linux",
"limit": 5
}
},
{
"request_id": "req-2",
"mode": "run",
"selector": {
"app": "firefox",
"pick": "first",
"terminal_id": 1
}
}
]
}
Terminal window
curl -sS -X POST 'http://127.0.0.1:7682/api/v1/run/batch' \
-H 'content-type: application/json' \
-d '{"items":[{"request_id":"req-1","mode":"search","selector":{"app":"firefox","os":"linux","limit":5}},{"request_id":"req-2","mode":"run","selector":{"app":"firefox","pick":"first","terminal_id":1}}]}'