Skip to main content

ReqNinja - A Python package and CLI tool for API testing, automation, and debugging

Project description

ReqNinja

PyPI version Python Support License: MIT Tests Coverage

ReqNinja is a Python package and CLI tool for API testing, automation, and debugging — blending the simplicity of curl with the power and flexibility of Python's requests.

🚀 Features

  • Retries & Backoff: Automatic retry logic for flaky APIs with customizable policies
  • Fast Timing: Instantly see how long each request takes
  • Pretty Output: Syntax-highlighted JSON straight in your terminal
  • Authentication: Bearer tokens, Basic Auth, OAuth2, and API keys via config
  • Config Profiles: Quickly switch environments or base URLs
  • Response Saving: Export results to .json or .txt files
  • Multiple Output Modes: Raw, pretty JSON, tabular view, show headers
  • Powerful CLI: Run API calls with a simple command, no Python required
  • Debug Mode: Print full request/response details with timing breakdowns
  • Productivity Boost: Pipe support, save/run commands, batch mode
  • Extensible: Plugin system for custom output or request logic

📦 Installation

From PyPI (recommended)

pip install reqninja

From Source

git clone https://github.com/vishal-ravi/reqninja.git
cd reqninja
pip install -e .

Development Installation

git clone https://github.com/vishal-ravi/reqninja.git
cd reqninja
python setup_dev.py

🖥️ Quickstart: CLI Mode

GET Request with Pretty Output

reqninja http get https://jsonplaceholder.typicode.com/posts/1

POST JSON with Custom Headers

reqninja http post https://httpbin.org/post \
  -j '{"name":"Vishal"}' \
  -H "Content-Type: application/json"

Show Raw Output

reqninja http get https://api.example.com/data --raw

Save Response

reqninja http get https://api.example.com/users --save results.json

Switch Profile

reqninja http get https://api.example.com/users --profile prod

View Timing and Debug Info

reqninja http get https://api.example.com/users --debug

💻 Quickstart: Python Library

from reqninja import get, post

response = get("https://jsonplaceholder.typicode.com/posts/1", retries=3)
print(response.json())  # Pretty printed automatically

🛠 Config Example (~/.reqninja/config.yml)

default_retries: 3
default_headers:
  Content-Type: application/json
profiles:
  prod:
    base_url: https://api.myapp.com
    headers:
      Authorization: Bearer ${TOKEN}
  staging:
    base_url: https://staging.api.myapp.com
retry_policy:
  total: 5
  status_forcelist: [429, 500, 502, 503, 504]
  backoff_factor: 0.5

🔒 Authentication Made Simple

Pass tokens and credentials via CLI:

  • --auth bearer <TOKEN>
  • --auth basic user:pass

Or set them in your config file under the desired profile.

🏆 Productivity Shortcuts

  • Pipe: cat payload.json | reqninja http POST https://api.com/data
  • Save a Command: reqninja save getUser "GET /users/1"
  • Run Saved Command: reqninja run getUser
  • Batch Mode: Send a list of API calls from a file

🐞 Debugging

reqninja http POST /login --debug

Prints the full request, headers, body, and a timing breakdown for deeper inspection.

📝 Roadmap

  • 🔑 Plugin system for custom output/auth logic
  • 🎨 Templated payloads for batch/bulk requests
  • 💡 Open response in browser (--open)
  • 📁 Advanced response export filters

🙌 Why Use ReqNinja?

A single, modern tool for both quick API experiments and robust automation — with the polish, safety, and visibility pro devs expect.

⚠️ CLI Common Mistakes

Use http for both HTTP and HTTPS

Wrong: reqninja https get https://api.example.com
Correct: reqninja http get https://api.example.com

Use lowercase methods

Wrong: reqninja http GET https://api.example.com
Correct: reqninja http get https://api.example.com

ReqNinja provides helpful error messages to guide you to the correct syntax!

📚 Documentation

For complete documentation, visit reqninja.readthedocs.io

Also see CLI_USAGE_GUIDE.md for detailed CLI usage examples.

🤝 Contributing

Contributions are welcome! Please see our Contributing Guide for details.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reqninja-1.2.0.tar.gz (45.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reqninja-1.2.0-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

File details

Details for the file reqninja-1.2.0.tar.gz.

File metadata

  • Download URL: reqninja-1.2.0.tar.gz
  • Upload date:
  • Size: 45.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for reqninja-1.2.0.tar.gz
Algorithm Hash digest
SHA256 e99a602b344c2663a94b1a5f2c85996fbac08ecac39280ba44bdd05770306590
MD5 7d6a2a45afb10a069c298e564f11f2f8
BLAKE2b-256 2be4cc98cbb98ed36ba1e91f42e4934e3c692be2c04d1c250b63963d6df327e4

See more details on using hashes here.

File details

Details for the file reqninja-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: reqninja-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for reqninja-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5610635bd39cd7c6c3d4f4f8d99b70f6d1620559e6b9fa1f5c691ff42d8bb5f5
MD5 b7f56264957a7ddabd51284c4a30c0b8
BLAKE2b-256 71eadfd16660730cb0a5929fe31ef7c9aefb8c29333f4fc4987362dd7ed52690

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page