{
  "openapi": "3.0.0",
  "info": {
    "title": "salt-httpbin-origin",
    "version": "0.1.0"
  },
  "paths": {
    "/get": {
      "get": {
        "summary": "Returns the request's query args, headers, origin and URL.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/post": {
      "post": {
        "summary": "Returns the POST request's body, form fields, args and headers.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/put": {
      "put": {
        "summary": "Returns the PUT request's body, form fields, args and headers.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/patch": {
      "patch": {
        "summary": "Returns the PATCH request's body, form fields, args and headers.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/delete": {
      "delete": {
        "summary": "Returns the DELETE request's body, form fields, args and headers.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/anything": {
      "get": {
        "summary": "Returns the request data for any HTTP method.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "summary": "Returns the request data for any HTTP method.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "summary": "Returns the request data for any HTTP method.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "patch": {
        "summary": "Returns the request data for any HTTP method.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "summary": "Returns the request data for any HTTP method.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/anything/*": {
      "get": {
        "summary": "Returns the request data for any method and any sub-path.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "summary": "Returns the request data for any method and any sub-path.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "summary": "Returns the request data for any method and any sub-path.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "patch": {
        "summary": "Returns the request data for any method and any sub-path.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "summary": "Returns the request data for any method and any sub-path.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/headers": {
      "get": {
        "summary": "Returns the inbound request headers.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/ip": {
      "get": {
        "summary": "Returns the caller's origin IP address.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/user-agent": {
      "get": {
        "summary": "Returns the caller's User-Agent header.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/json": {
      "get": {
        "summary": "Returns a sample JSON document.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/xml": {
      "get": {
        "summary": "Returns a sample XML document.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/html": {
      "get": {
        "summary": "Returns a sample HTML document.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/robots.txt": {
      "get": {
        "summary": "Returns a robots.txt.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/deny": {
      "get": {
        "summary": "Returns page denied by robots.txt rules.",
        "tags": [
          "Request inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/status/{codes}": {
      "get": {
        "summary": "Returns the given status code, or one sampled from a weighted list.",
        "tags": [
          "Status codes"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "summary": "Returns the given status code, or one sampled from a weighted list.",
        "tags": [
          "Status codes"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "summary": "Returns the given status code, or one sampled from a weighted list.",
        "tags": [
          "Status codes"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "patch": {
        "summary": "Returns the given status code, or one sampled from a weighted list.",
        "tags": [
          "Status codes"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "summary": "Returns the given status code, or one sampled from a weighted list.",
        "tags": [
          "Status codes"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/delay/{seconds}": {
      "get": {
        "summary": "Delays the response by up to 20s.",
        "tags": [
          "Status codes"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/drip": {
      "get": {
        "summary": "Drips data over a duration, after an optional initial delay.",
        "tags": [
          "Status codes"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/basic-auth/{user}/{passwd}": {
      "get": {
        "summary": "Challenges HTTP Basic auth and validates the credentials.",
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/hidden-basic-auth/{user}/{passwd}": {
      "get": {
        "summary": "Like /basic-auth but returns 404 instead of a 401 challenge.",
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/bearer": {
      "get": {
        "summary": "Validates a Bearer token and echoes it back.",
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/digest-auth/{qop}/{user}/{passwd}": {
      "get": {
        "summary": "Challenges HTTP Digest auth (MD5).",
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/digest-auth/{qop}/{user}/{passwd}/{algorithm}": {
      "get": {
        "summary": "Challenges HTTP Digest auth with an explicit algorithm.",
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/redirect/{n}": {
      "get": {
        "summary": "302-redirects n times (max 20).",
        "tags": [
          "Redirects"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/relative-redirect/{n}": {
      "get": {
        "summary": "Redirects n times using a relative Location header.",
        "tags": [
          "Redirects"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/absolute-redirect/{n}": {
      "get": {
        "summary": "Redirects n times using an absolute Location header.",
        "tags": [
          "Redirects"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/redirect-to": {
      "get": {
        "summary": "Redirects to the given url= with an optional status_code=.",
        "tags": [
          "Redirects"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "summary": "Redirects to the given url= with an optional status_code=.",
        "tags": [
          "Redirects"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/uuid": {
      "get": {
        "summary": "Returns a random UUID v4.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/base64/{value}": {
      "get": {
        "summary": "Decodes a base64url-encoded string.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/bytes/{n}": {
      "get": {
        "summary": "Returns n random bytes (max 4194304).",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/stream-bytes/{n}": {
      "get": {
        "summary": "Returns n bytes; buffered by API Gateway rather than chunked.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/stream/{n}": {
      "get": {
        "summary": "Returns n newline-delimited JSON objects.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/range/{n}": {
      "get": {
        "summary": "Supports HTTP Range requests over n generated bytes.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/links/{n}/{offset}": {
      "get": {
        "summary": "Returns a page of n interlinked HTML links.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/gzip": {
      "get": {
        "summary": "Returns a gzip-encoded response body.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/deflate": {
      "get": {
        "summary": "Returns a deflate-encoded response body.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/brotli": {
      "get": {
        "summary": "Returns a br-encoded response body.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/etag/{etag}": {
      "get": {
        "summary": "Serves an ETag and honours If-None-Match / If-Match.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/hash/{algorithm}": {
      "get": {
        "summary": "Hashes value= (or the body) with md5/sha1/sha256/sha512.",
        "tags": [
          "Dynamic data"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/cookies": {
      "get": {
        "summary": "Returns the cookies sent by the client.",
        "tags": [
          "Cookies"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/cookies/set": {
      "get": {
        "summary": "Sets cookies from the query string, then redirects to /cookies.",
        "tags": [
          "Cookies"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/cookies/set/{name}/{value}": {
      "get": {
        "summary": "Sets a single named cookie, then redirects to /cookies.",
        "tags": [
          "Cookies"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/cookies/delete": {
      "get": {
        "summary": "Deletes the named cookies, then redirects to /cookies.",
        "tags": [
          "Cookies"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/response-headers": {
      "get": {
        "summary": "Returns the query parameters as response headers.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "summary": "Returns the query parameters as response headers.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/cache": {
      "get": {
        "summary": "Returns 304 for conditional requests, 200 otherwise.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/cache/{seconds}": {
      "get": {
        "summary": "Sets a Cache-Control max-age of n seconds.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/encoding/utf8": {
      "get": {
        "summary": "Returns a UTF-8 encoded HTML document.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/image": {
      "get": {
        "summary": "Returns an image matching the Accept header.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/image/png": {
      "get": {
        "summary": "Returns a PNG image.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/image/jpeg": {
      "get": {
        "summary": "Returns a JPEG image.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/image/webp": {
      "get": {
        "summary": "Returns a WebP image.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/image/svg": {
      "get": {
        "summary": "Returns an SVG image.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/forms/post": {
      "get": {
        "summary": "An HTML form that POSTs to /post.",
        "tags": [
          "Response inspection"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/": {
      "get": {
        "summary": "This page — lists every available endpoint.",
        "tags": [
          "Meta"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/healthz": {
      "get": {
        "summary": "Health check.",
        "tags": [
          "Meta"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/spec.json": {
      "get": {
        "summary": "A minimal OpenAPI description of these endpoints.",
        "tags": [
          "Meta"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    }
  }
}
