Skip to content
Hoody.com

The Run service is a pure application resolver. It takes a Selector (an app name plus optional filters such as os, source, kind, arch, channel, version, pick, and terminal_id), searches every enabled package source, ranks the candidates, and returns an exact shell command. The service never starts the application itself — it returns status: "resolved" (candidates listed but none selected) or status: "dry-run" (a single candidate selected and its shell command returned). When a browser handoff preview is available, it is exposed only through handoff.preview_display_url and handoff.preview_terminal_url.

Use these endpoints whenever you need to map a human-friendly program name to an executable command, batch multiple resolutions, paginate large candidate sets, or read the live runtime configuration and OpenAPI documents.

The base URL for every operation below is:

https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com

Substitute {projectId} and {containerId} with the 24-character hexadecimal project and container identifiers from your control plane, and {server} with the region node label (for example node-us).

Returns the standardized 9-field health response. Unauthenticated. The endpoint always returns HTTP 200 with application/json while the service is running.

This endpoint takes no parameters.

Terminal window
curl -sS "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/health"

Returns the full persisted runtime configuration, including every configured source, every profile, the currently selected profile, and any saved recipes and webhooks.

This endpoint takes no parameters.

Terminal window
curl -sS "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/config"

Returns the OpenAPI 3.0.3 specification for this API in JSON format. The document is generated from the canonical YAML source and reflects every operation on this page.

This endpoint takes no parameters.

Terminal window
curl -sS "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/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 "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/openapi.yaml"

The four endpoints below all execute the same core algorithm: validate the selector, search every enabled source, rank candidates, and either return the ranked list or select one. Every candidate carries a kind field equal to gui, cli, or any — the last value means the source did not classify the candidate.

Resolve and select an application using query parameters, then return the exact shell command. Supports every selector field plus pick mode and output control.

NameInTypeRequiredDescription
appquerystringYesPrimary name query
osqueryrun_OsNoTarget OS filter
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryrun_AppKindNoApp kind filter
archqueryrun_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
pickqueryrun_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
dry_runquerybooleanNoForce command-only response (the Run service never executes)
print_curlqueryrun_PrintCurlModeNoGenerate curl command
formatqueryrun_OutputFormatNoOutput format (json or html)
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -sS "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/resolve?app=firefox&os=linux&kind=any&pick=first"

Same behavior as GET /api/v1/run/resolve but accepts the full Selector as a JSON request body. Use this when the selector is too complex to encode cleanly in a URL.

This endpoint takes no parameters.

{
"app": "firefox",
"os": "linux",
"kind": "any",
"source": ["nix"],
"arch": "amd64",
"tags": ["browser"],
"profile": "default",
"channel": "stable",
"version": "128.0.3",
"variant": "headless",
"publisher": "mozilla",
"repo": "mozilla/firefox",
"release": "v128.0.3",
"asset": "firefox-linux-x86_64.tar.bz2",
"pick": "first",
"pick_index": 0,
"candidate_id": "nix-firefox-128",
"set_id": "a1b2c3d4e5f6",
"terminal_id": 1,
"display": ":1",
"origin": "cli",
"format": "json",
"dry_run": true,
"print_curl": "hoody-run",
"limit": 25
}
Terminal window
curl -sS -X POST "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/resolve" \
-H "content-type: application/json" \
-d '{"app":"firefox","os":"linux","kind":"any","pick":"first","limit":25}'

Path-based resolve that produces clean, bookmarkable URLs. Supports both positional and key-value path segments.

Positional forms:

  • /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 form:

  • /api/v1/run/go/app/{app}/os/{os}/source/{source}/kind/{kind}/pick/{pick}/...
NameInTypeRequiredDescription
restpathstringYesPath segments for positional or key-value app specification
osqueryrun_OsNoTarget OS filter when not supplied in the path
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryrun_AppKindNoApp kind filter when not supplied in the path
archqueryrun_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
pickqueryrun_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
dry_runquerybooleanNoForce command-only response (the Run service never executes)
print_curlqueryrun_PrintCurlModeNoGenerate curl command
formatqueryrun_OutputFormatNoOutput format (json or html)
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -sS "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/go/linux/nix/firefox"

Same as /api/v1/run/go/{rest} but with terminal_id extracted from the path prefix. The combined URL specifies both the target terminal and the application in a single path, for example /api/v1/run/t/2/go/linux/nix/firefox.

NameInTypeRequiredDescription
terminal_idpathintegerYesTerminal session ID (1 to 65535)
restpathstringYesPath segments for app specification
osqueryrun_OsNoTarget OS filter when not supplied in the path
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryrun_AppKindNoApp kind filter when not supplied in the path
archqueryrun_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
pickqueryrun_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
dry_runquerybooleanNoForce command-only response (the Run service never executes)
print_curlqueryrun_PrintCurlModeNoGenerate curl command
formatqueryrun_OutputFormatNoOutput format (json or html)
limitqueryintegerNoMax candidates (default 25)
Terminal window
curl -sS "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/t/2/go/linux/nix/firefox"

Search for runnable application candidates across every configured and enabled package source. Returns a ranked list with stable ordering for pick-by-index operations. Pass the returned set_id to a follow-up resolve request to guarantee race-free candidate selection.

NameInTypeRequiredDescription
appquerystringYesPrimary name query (aliases q, name)
osqueryrun_OsNoTarget OS filter
sourcequeryarrayNoSource kind filter (repeatable)
kindqueryrun_AppKindNoApp kind filter (gui, cli, any)
archqueryrun_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 -sS "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/search?app=firefox&os=linux&kind=any"

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.

{
"selector": {
"app": "firefox",
"os": "linux",
"kind": "any",
"limit": 25
},
"cursor": "eyJzZXRfaWQiOiJhMWIyYzNkNGU1ZjYiLCJvZmZzZXQiOjI1fQ==",
"page_size": 25
}
Terminal window
curl -sS -X POST "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/search/paged" \
-H "content-type: application/json" \
-d '{"selector":{"app":"firefox","os":"linux","kind":"any"},"page_size":25}'

Resolve, optionally pick, and normalize the execution plan for a selector without scheduling execution. The response reports the recommended execution mode (search-only, dry-run, or printed-curl) and lists any missing requirements.

This endpoint takes no parameters.

{
"app": "firefox",
"os": "linux",
"kind": "any",
"source": ["nix"],
"profile": "default",
"pick": "first",
"terminal_id": 1,
"display": ":1",
"limit": 25
}
Terminal window
curl -sS -X POST "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/preflight" \
-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 in the request produces its own success or error payload in the response. Item-level errors do not abort the rest of the batch.

This endpoint takes no parameters.

{
"items": [
{
"request_id": "req-001",
"mode": "search",
"selector": {
"app": "firefox",
"os": "linux",
"kind": "any"
}
},
{
"request_id": "req-002",
"mode": "run",
"selector": {
"app": "firefox",
"os": "linux",
"kind": "any",
"pick": "first"
}
}
]
}
Terminal window
curl -sS -X POST "https://{projectId}-{containerId}-run-1.{server}.containers.hoody.com/api/v1/run/batch" \
-H "content-type: application/json" \
-d '{
"items": [
{"request_id":"req-001","mode":"search","selector":{"app":"firefox","os":"linux","kind":"any"}},
{"request_id":"req-002","mode":"run","selector":{"app":"firefox","os":"linux","kind":"any","pick":"first"}}
]
}'