How to install HTTPie CLI: GET and POST examples, headers, JSON body, vs curl

Install http, run GET/POST with JSON, and map commands to curl.

curl can do everything, but flags pile up fast. HTTPie (the http command) uses readable syntax for GET/POST, headers, and JSON bodies, with pretty-printed responses by default. This guide covers install on macOS/Linux/Windows, GET and POST examples, custom headers and JSON payloads, and a curl comparison for hereink readers who debug APIs from the terminal.

The query is how to install HTTPie CLI and send GET POST JSON requests. You should finish with http installed, a first GET to a public endpoint, a JSON POST, and the curl equivalents in mind.

installbrew · pip · apt
requestsGET · POST · JSON
comparehttp vs curl

What HTTPie fixes

Readable CLI HTTP

http GET api.example.com/users separates method, URL, and options; JSON responses are colorized and indented without juggling -H and -d order.

Pairs with jq

Pipe http GET … | jq '.data' to keep only the fields you need. Our jq guide covers transforms; HTTPie covers sending the request.

Upstream: github.com/httpie/cli, docs at httpie.io/docs/cli. Run http --version after install.

Install HTTPie

  1. 1
    macOS (Homebrew)

    brew install httpie. Verify with which http and http --version.

  2. 2
    Linux (packages or pip)

    Debian/Ubuntu: sudo apt update && sudo apt install httpie. Fedora: sudo dnf install httpie. Generic: python3 -m pip install --user httpie; ensure ~/.local/bin is on PATH.

  3. 3
    Windows

    winget install httpie.httpie or pip install httpie. Open a new terminal and run http --version.

  4. 4
    First GET

    http GET https://httpbin.org/get should return JSON mirroring your request headers.

GET and query parameters

http GET https://httpbin.org/get
http GET https://httpbin.org/get page==2 limit==10
http --body GET https://httpbin.org/uuid
http --follow GET https://httpbin.org/redirect/1

Omitting the method defaults to GET. For raw downloads or low-level HTTP, curl still wins; for JSON APIs, start with http.

POST and JSON body

http POST https://httpbin.org/post name=Ada role=admin
http POST https://httpbin.org/post tags:='["go","rust"]'
http POST https://httpbin.org/post < payload.json
http --form POST https://httpbin.org/post email=test@example.com

= sends string fields; := sends JSON literals. Test against httpbin or staging before hitting production.

Custom headers

http GET https://httpbin.org/headers Authorization:"Bearer YOUR_TOKEN" Accept:application/json
http GET api.example.com/v1/me X-Api-Key:xxx User-Agent:my-cli/1.0
http --download GET https://example.com/file.zip

HTTPie vs curl

GoalHTTPiecurl
GET JSONhttp GET https://httpbin.org/getcurl -s https://httpbin.org/get | jq .
Query stringhttp GET url q==searchcurl -s 'url?q=search'
POST JSONhttp POST url name=Adacurl -s -X POST -H 'Content-Type: application/json' -d '{"name":"Ada"}' url
Headerhttp GET url Authorization:"Bearer x"curl -s -H 'Authorization: Bearer x' url
Body onlyhttp --body GET urlcurl -s url
Multiparthttp --form POST url file@./a.pngcurl -F file=@./a.png url
Fits
Manual API exploration, copy-paste examples in READMEs, JSON debugging beside jq and ripgrep.
Does not fit
Complex OAuth device flows, client-cert TLS, or reproducing full browser cookie jars—use curl or a dedicated client.
http or httpie command?

Package name is often httpie; the binary is http (and https). Run http --help.

Script-friendly output?

Use --body or --print=b, then pipe to jq. Add --check-status when exit codes must reflect HTTP status (see docs).

Replace curl entirely?

Use HTTPie for daily JSON REST; keep curl for legacy scripts, health checks, and edge protocols. Both on PATH is fine.

After the API sketch, align on one board

Once endpoints make sense in the terminal, service boundaries still belong on a shared canvas. See how to create a space.

Start a room