---
# System prepended metadata

title: HTTPie

---

# HTTPie
Docs: https://httpie.io/docs/cli/usage
```
http PUT pie.dev/put X-API-Token:123 name=John
```

The commands to use it are: `http` and `https`
Basic syntax:
```
http [flags] [METHOD] URL [ITEM [ITEM]]
```
If we ommit the method, HTTPie guesses the method to use - GET for simple requests, if you send json data, it will use post.

## Sending data
### Query params
Using the double equals sign we can set the query parameters
```
http get pie.dev/get hello=="a"
```
### Request body
With the equals sign we can set the parameters that will be sent in the body. This way, the value will be always serialized as string.
```bash
http PUT pie.dev/put \
    name=John \                        # String (default)
    age:=29 \                          # Raw JSON — Number
    married:=false \                   # Raw JSON — Boolean
    hobbies:='["http", "pies"]' \      # Raw JSON — Array
    favorite:='{"tool": "HTTPie"}' \   # Raw JSON — Object
    bookmarks:=@files/data.json \      # Embed JSON file
    description=@files/text.txt        # Embed text file
```

### Nested JSON
There is a way to post nexted json data, but it is a bit tedious.
```bash
http pie.dev/post \
  platform[name]=HTTPie \
  platform[about][mission]='Make APIs simple and intuitive' \
  platform[about][homepage]=httpie.io \
  platform[about][homepage]=httpie.io \
  platform[about][stars]:=54000 \
  platform[apps][]=Terminal \
  platform[apps][]=Desktop \
  platform[apps][]=Web \
  platform[apps][]=Mobile
```
Output
```json
{
    "platform": {
        "name": "HTTPie",
        "about": {
            "mission": "Make APIs simple and intuitive",
            "homepage": "httpie.io",
            "stars": 54000
        },
        "apps": [
            "Terminal",
            "Desktop",
            "Web",
            "Mobile"
        ]
    }
}
```

When we need to post complex json data, the simplest ways is to save them to a file and then redirect input.
```
http post pie.dev/post < myInput.json
```

## Request preview
```
http --offline pie.dev/post hello=offline
```
Using the offline flag we can preview the request (eg. to ensure we are sending correct data)

## HTTP headers
To set custom headers you can use the `Header:Value` notation
```
http pie.dev/headers User-Agent:Bacon/1.0 
```
## Authorization
Bearer auth
```
https -A bearer -a token pie.dev/bearer
```
All available auth modes are explained in the docs: https://httpie.io/docs/cli/authentication