id = "restish"
name = "Restish"
homepage = "https://rest.sh/"
description = "A CLI for interacting with REST APIs that expose an OpenAPI spec."
executables = ["restish"]
[dotfiles]
paths = []
secret = [
"[configHome]/restish/restish.json",
"%APPDATA%/restish/restish.json",
"[configHome]/restish/apis.json",
"[appData]/restish/apis.json",
"%APPDATA%/restish/apis.json",
]
[commands]
format = 1
label = "Restish"
description = "Make a one-off HTTP GET or POST request with headers, query parameters, filtering and output format. Registered-API commands, auth setup, pagination and plugins are not covered."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false }
[[commands.subcommand]]
path = ["get"]
label = "GET a URL"
description = "Perform an HTTP GET request against a full URL or registered API short-name URL."
[[commands.subcommand.source]]
id = "ref"
kind = "manual"
url = "https://rest.sh/docs/reference/global-flags/"
revision = "2026-10-27"
evidence = """
restish get <url>
restish get https://api.example.com/items -f body.items -o table
-H, --rsh-header repeatable Name: Value none Add request headers.
-q, --rsh-query repeatable key=value none Add query params without hand-editing the URL.
-f, --rsh-filter expression none Filter with shorthand or jq.
-o, --rsh-output-format format auto auto, json, yaml, cbor, table, ndjson, lines, gron, toon, image, or plugin formats.
-p, --rsh-profile profile name default or RSH_PROFILE Select API profile.
--rsh-no-cache boolean false Bypass response cache reads and writes.
--rsh-retry integer 2 Retry attempts for network errors and transient HTTP responses; 0 disables.
--rsh-insecure boolean false Disable certificate verification as an explicit operator override.
-v, --rsh-verbose count 0 -v shows request/response headers; -vv adds TLS details.
"""
[[commands.subcommand.field]]
id = "url"
label = "URL"
type = "url"
position = 0
sources = ["ref"]
[[commands.subcommand.field]]
id = "header"
label = "Request headers"
description = "One 'Name: Value' per entry."
type = "string"
option = ["--rsh-header", "-H"]
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "query"
label = "Query parameters"
description = "One key=value per entry."
type = "string"
option = ["--rsh-query", "-q"]
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "filter"
label = "Filter"
description = "Shorthand or jq expression, for example body.items."
type = "string"
option = ["--rsh-filter", "-f"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "output_format"
label = "Output format"
type = "enum"
choices = [{ value = "auto", label = "Auto" }, { value = "json", label = "JSON" }, { value = "yaml", label = "YAML" }, { value = "table", label = "Table" }, { value = "ndjson", label = "NDJSON" }, { value = "lines", label = "Lines" }, { value = "gron", label = "Gron" }]
option = ["--rsh-output-format", "-o"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "profile"
label = "Profile"
type = "string"
option = ["--rsh-profile", "-p"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "no_cache"
label = "Bypass cache"
type = "boolean"
option = ["--rsh-no-cache"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "retry"
label = "Retry attempts"
type = "integer"
option = ["--rsh-retry"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "insecure"
label = "Skip TLS verification"
type = "boolean"
option = ["--rsh-insecure"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "verbose"
label = "Verbose"
type = "count"
option = ["--rsh-verbose", "-v"]
sources = ["ref"]
[[commands.subcommand.task]]
id = "get_json"
label = "GET and filter"
fields = ["url", "filter", "output_format", "header", "query"]
required = ["url"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["url", "header", "query", "filter", "output_format"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["profile", "no_cache", "retry", "insecure", "verbose"]
[[commands.subcommand]]
path = ["post"]
label = "POST to a URL"
description = "Perform an HTTP POST with an optional shorthand body, @file or stdin. Body arguments use Restish shorthand."
[[commands.subcommand.source]]
id = "ref"
kind = "manual"
url = "https://rest.sh/docs/reference/global-flags/"
revision = "2026-10-27"
evidence = """
restish post <url> [body...]
restish post https://api.example.com/items 'name: Ada, active: true'
restish post -c json https://api.example.com/items @item.json
restish post https://api.vendor.test/jobs 'name: demo' --rsh-retry 2 --rsh-retry-unsafe
-H, --rsh-header repeatable Name: Value none Add request headers.
-q, --rsh-query repeatable key=value none Add query params without hand-editing the URL.
-f, --rsh-filter expression none Filter with shorthand or jq.
-o, --rsh-output-format format auto auto, json, yaml, cbor, table, ndjson, lines, gron, toon, image, or plugin formats.
--rsh-retry-unsafe boolean false Permit retries for POST, PUT, PATCH, and DELETE.
"""
[[commands.subcommand.field]]
id = "url"
label = "URL"
type = "url"
position = 0
sources = ["ref"]
[[commands.subcommand.field]]
id = "body"
label = "Body"
description = "Shorthand such as 'name: Ada, active: true', or @file.json. Leave empty to read stdin."
type = "string"
position = 1
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "header"
label = "Request headers"
type = "string"
option = ["--rsh-header", "-H"]
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "query"
label = "Query parameters"
type = "string"
option = ["--rsh-query", "-q"]
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "filter"
label = "Filter"
type = "string"
option = ["--rsh-filter", "-f"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "retry_unsafe"
label = "Allow retries for POST"
type = "boolean"
option = ["--rsh-retry-unsafe"]
sources = ["ref"]
[[commands.subcommand.task]]
id = "post_json"
label = "POST a body"
fields = ["url", "body", "header", "filter"]
required = ["url"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["url", "body", "header", "query", "filter"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["retry_unsafe"]