{
  "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
    },
    "subcommand": [
      {
        "path": [
          "get"
        ],
        "label": "GET a URL",
        "description": "Perform an HTTP GET request against a full URL or registered API short-name URL.",
        "source": [
          {
            "id": "ref",
            "kind": "manual",
            "url": "https://rest.sh/docs/reference/global-flags/",
            "revision": "2026-10-27",
            "evidence": "restish get <url>\n  restish get https://api.example.com/items -f body.items -o table\n-H, --rsh-header repeatable Name: Value none Add request headers.\n-q, --rsh-query repeatable key=value none Add query params without hand-editing the URL.\n-f, --rsh-filter expression none Filter with shorthand or jq.\n-o, --rsh-output-format format auto auto, json, yaml, cbor, table, ndjson, lines, gron, toon, image, or plugin formats.\n-p, --rsh-profile profile name default or RSH_PROFILE Select API profile.\n--rsh-no-cache boolean false Bypass response cache reads and writes.\n--rsh-retry integer 2 Retry attempts for network errors and transient HTTP responses; 0 disables.\n--rsh-insecure boolean false Disable certificate verification as an explicit operator override.\n-v, --rsh-verbose count 0 -v shows request/response headers; -vv adds TLS details.\n"
          }
        ],
        "field": [
          {
            "id": "url",
            "label": "URL",
            "type": "url",
            "position": 0,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "header",
            "label": "Request headers",
            "description": "One 'Name: Value' per entry.",
            "type": "string",
            "option": [
              "--rsh-header",
              "-H"
            ],
            "multiple": true,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "query",
            "label": "Query parameters",
            "description": "One key=value per entry.",
            "type": "string",
            "option": [
              "--rsh-query",
              "-q"
            ],
            "multiple": true,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "filter",
            "label": "Filter",
            "description": "Shorthand or jq expression, for example body.items.",
            "type": "string",
            "option": [
              "--rsh-filter",
              "-f"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "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"
            ]
          },
          {
            "id": "profile",
            "label": "Profile",
            "type": "string",
            "option": [
              "--rsh-profile",
              "-p"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "no_cache",
            "label": "Bypass cache",
            "type": "boolean",
            "option": [
              "--rsh-no-cache"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "retry",
            "label": "Retry attempts",
            "type": "integer",
            "option": [
              "--rsh-retry"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "insecure",
            "label": "Skip TLS verification",
            "type": "boolean",
            "option": [
              "--rsh-insecure"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "verbose",
            "label": "Verbose",
            "type": "count",
            "option": [
              "--rsh-verbose",
              "-v"
            ],
            "sources": [
              "ref"
            ]
          }
        ],
        "task": [
          {
            "id": "get_json",
            "label": "GET and filter",
            "fields": [
              "url",
              "filter",
              "output_format",
              "header",
              "query"
            ],
            "required": [
              "url"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "url",
              "header",
              "query",
              "filter",
              "output_format"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "profile",
              "no_cache",
              "retry",
              "insecure",
              "verbose"
            ]
          }
        ]
      },
      {
        "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.",
        "source": [
          {
            "id": "ref",
            "kind": "manual",
            "url": "https://rest.sh/docs/reference/global-flags/",
            "revision": "2026-10-27",
            "evidence": "restish post <url> [body...]\n  restish post https://api.example.com/items 'name: Ada, active: true'\n  restish post -c json https://api.example.com/items @item.json\nrestish post https://api.vendor.test/jobs 'name: demo' --rsh-retry 2 --rsh-retry-unsafe\n-H, --rsh-header repeatable Name: Value none Add request headers.\n-q, --rsh-query repeatable key=value none Add query params without hand-editing the URL.\n-f, --rsh-filter expression none Filter with shorthand or jq.\n-o, --rsh-output-format format auto auto, json, yaml, cbor, table, ndjson, lines, gron, toon, image, or plugin formats.\n--rsh-retry-unsafe boolean false Permit retries for POST, PUT, PATCH, and DELETE.\n"
          }
        ],
        "field": [
          {
            "id": "url",
            "label": "URL",
            "type": "url",
            "position": 0,
            "sources": [
              "ref"
            ]
          },
          {
            "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"
            ]
          },
          {
            "id": "header",
            "label": "Request headers",
            "type": "string",
            "option": [
              "--rsh-header",
              "-H"
            ],
            "multiple": true,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "query",
            "label": "Query parameters",
            "type": "string",
            "option": [
              "--rsh-query",
              "-q"
            ],
            "multiple": true,
            "sources": [
              "ref"
            ]
          },
          {
            "id": "filter",
            "label": "Filter",
            "type": "string",
            "option": [
              "--rsh-filter",
              "-f"
            ],
            "sources": [
              "ref"
            ]
          },
          {
            "id": "retry_unsafe",
            "label": "Allow retries for POST",
            "type": "boolean",
            "option": [
              "--rsh-retry-unsafe"
            ],
            "sources": [
              "ref"
            ]
          }
        ],
        "task": [
          {
            "id": "post_json",
            "label": "POST a body",
            "fields": [
              "url",
              "body",
              "header",
              "filter"
            ],
            "required": [
              "url"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "url",
              "body",
              "header",
              "query",
              "filter"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "retry_unsafe"
            ]
          }
        ]
      }
    ]
  }
}
