HTTPie CLI Skill

SkillAI & models

Use this skill whenever the user wants to make HTTP requests, test APIs, call REST endpoints, debug web services, or interact with any HTTP/HTTPS API using the HTTPie CLI tool (`http` command). Trigger this skill for any request involving: sending GET/POST/PUT/PATCH/DELETE requests, testing API endpoints, sending JSON or form data, working with authentication (Bearer token, Basic auth), uploading files, downloading responses, managing sessions, inspecting request/response headers, or piping HTTP calls in shell scripts. Use this skill even when the user just says "call the API", "send a request", "hit this endpoint", or "test with httpie" � don't wait for explicit httpie mention.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the HTTPie CLI Skill skill

What this skill tells your AI

The instructions your AI receives, as published by jjmartres/ai-coding-agents in shared/.ai-agents/skills/httpie/SKILL.md and read by ahel’s review.

HTTPie is a modern, human-friendly HTTP client for the command line. The main command is http (or https for HTTPS-only).

Installation

# pip (recommended)
pip install httpie

# brew (macOS)
brew install httpie

# apt (Debian/Ubuntu)
sudo apt install httpie

Verify: http --version


Request Syntax

http [METHOD] URL [REQUEST_ITEMS...]
  • METHOD is optional: defaults to GET when no data, POST when data is present
  • URL: scheme defaults to http://; use :3000 as shorthand for localhost:3000

Request Items � Key Separators

SeparatorTypeExample
=JSON string field (or form field with -f)name=Jean
:=Raw JSON value (non-string)active:=true, count:=42, tags:='["a","b"]'
==URL query parametersearch==httpie
:HTTP headerAuthorization:Bearer TOKEN
@File upload (form/multipart)file@./report.pdf
=@File content as string fieldbody=@./message.txt
:=@File content as raw JSONconfig:=@./config.json

Common Examples

GET requests

# Simple GET
http GET https://api.example.com/users

# With query params
http GET https://api.example.com/users search==alice limit==10

# Shorthand (method inferred)
http https://api.example.com/users

# Localhost shorthand
http :8080/health

POST with JSON (default)

# String and non-string fields
http POST https://api.example.com/users \
  name="Jean-Jacques" \
  email="jj@example.com" \
  active:=true \
  roles:='["admin","user"]'

# Inline raw JSON body (pipe it in)
echo '{"name":"test"}' | http POST https://api.example.com/users

PUT / PATCH / DELETE

http PUT https://api.example.com/users/42 name="Updated"
http PATCH https://api.example.com/users/42 email="new@example.com"
http DELETE https://api.example.com/users/42

Form data (-f)

http -f POST https://api.example.com/login username=admin password=secret

File upload (multipart)

http -f POST https://api.example.com/upload file@./document.pdf title="My Doc"

Authentication

# Basic auth
http -a username:password https://api.example.com/secure

# Bearer token
http -A bearer -a TOKEN https://api.example.com/secure

# Prompt for password (don't expose it in shell history)
http -a username https://api.example.com/secure

Headers

# Custom headers
http GET https://api.example.com/data \
  Accept:application/json \
  X-Request-Id:abc-123 \
  Authorization:"Bearer $(cat token.txt)"

Output Control

# Show full exchange (request + response)
http -v GET https://api.example.com/users

# Only response headers
http -h GET https://api.example.com/users

# Only response body
http -b GET https://api.example.com/users

# Show request headers + response body
http --print=Hb GET https://api.example.com/users
# Flags: H=request headers, B=request body, h=response headers, b=response body, m=metadata

# No color / formatting (useful in scripts)
http --pretty=none GET https://api.example.com/users

# Check HTTP status (exit non-zero on 4xx/5xx)
http --check-status GET https://api.example.com/users

Download Files

# Download and auto-name
http --download https://example.com/file.zip

# Download to specific path
http --download -o /tmp/output.zip https://example.com/file.zip

# Resume interrupted download
http --download --continue -o /tmp/output.zip https://example.com/file.zip

Sessions (Persist cookies & auth)

# Create/use named session (stored in ~/.config/httpie/sessions/)
http --session=myapi POST https://api.example.com/login username=admin password=secret
http --session=myapi GET https://api.example.com/profile

# Read-only session (don't update it)
http --session-read-only=myapi GET https://api.example.com/data

Useful Flags

--offline          # Build and print request without sending it (dry-run)
--follow           # Follow redirects
--timeout=10       # Set timeout in seconds (default: 0 = no timeout)
--proxy=http:http://proxy:8080  # Use a proxy
--verify=no        # Skip SSL certificate verification (�� dev only)
--cert=./cert.pem  # Client TLS certificate
--stream           # Stream response body (useful for SSE / long-polling)
--quiet            # Suppress output except errors

Scripting Patterns

Avoid stdin conflicts in scripts

When running HTTPie in a script or CI pipeline where stdin may not be a TTY, add --ignore-stdin to avoid the "body from stdin and key=value cannot be mixed" error:

http --ignore-stdin POST https://api.example.com/users name=test active:=true

Use in shell pipelines

# Extract a field with jq
TOKEN=$(http POST https://api.example.com/auth username=admin password=secret \
  --pretty=none -b | jq -r '.token')

# Pass token to next call
http GET https://api.example.com/profile "Authorization:Bearer $TOKEN"

Exit codes with --check-status

if http --check-status --quiet GET https://api.example.com/health; then
  echo "API is up"
else
  echo "API returned error"
fi

Offline dry-run (inspect before sending)

http --offline POST https://api.example.com/users name=test active:=true

HTTPie vs curl Equivalents

GoalHTTPiecurl
GET requesthttp GET urlcurl url
POST JSONhttp POST url key=valcurl -X POST -H 'Content-Type: application/json' -d '{"key":"val"}' url
Bearer authhttp -A bearer -a TOKEN urlcurl -H 'Authorization: Bearer TOKEN' url
Show headershttp -h urlcurl -I url
Verbosehttp -v urlcurl -v url

Configuration

HTTPie config lives at ~/.config/httpie/config.json:

{
  "default_options": ["--style=monokai", "--pretty=all", "--check-status"]
}

Tips

  • Always quote values with spaces: description='hello world'
  • Escape colons in field names: field\:name=value
  • GCP/cloud APIs: use http -A bearer -a "$(gcloud auth print-access-token)" ...
  • Pipe JSON input: cat payload.json | http POST https://api.example.com/endpoint
  • Debug CI pipelines: use --offline to validate request shape without actually calling the API
  • Combine with jq for powerful JSON manipulation in scripts

Signals

GitHub stars
46
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
httpie-jjmartres
Source
github.com/jjmartres/ai-coding-agents