AI-powered API validation tool - never fear API updates again
Project description
Strayl Lint
AI-powered API validation tool - never fear API updates again.
Strayl Lint automatically checks if your API integrations match their latest documentation, catching breaking changes before they hit production.
Quick Start
1. Install
pip install strayl-lint
2. Get API Key
Visit strayl.dev/dashboard and generate your API key.
3. Annotate Your Code
Add strayl:doc comments above API calls:
# strayl:doc https://api.stripe.com/v1/openapi.json
response = requests.post(
"https://api.stripe.com/v1/charges",
json={"amount": 2000, "currency": "usd"}
)
// strayl:doc https://api.github.com/openapi.json
fetch('https://api.github.com/repos/owner/repo', {
method: 'GET'
})
4. Run Check
export STRAYL_API_KEY=sk_live_xxxxx
strayl-lint check
Features
- ✅ Always Up-to-Date - Checks against live documentation
- 🤖 AI-Powered - Understands APIs like a human developer
- 🚀 CI/CD Ready - Perfect for pre-commit hooks and pipelines
- 📝 Multiple Languages - Python, JavaScript, TypeScript, Go, and more
- 🔒 Secure - Only sends API endpoints, never your code
Usage
Check Current Directory
strayl-lint check
Check Specific Path
strayl-lint check src/
Filter by File Extension
strayl-lint check --ext .py,.js
Initialize Config File
strayl-lint init sk_live_xxxxx
# Creates .strayl config file
Configuration
Environment Variable
export STRAYL_API_KEY=sk_live_xxxxx
Config File
Create .strayl in your project root:
api_key=sk_live_xxxxx
Important: Add .strayl to your .gitignore!
CI/CD Integration
GitHub Actions
name: API Check
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: pip install strayl-lint
- run: strayl-lint check
env:
STRAYL_API_KEY: ${{ secrets.STRAYL_API_KEY }}
Pre-commit Hook
Add to .pre-commit-config.yaml:
repos:
- repo: local
hooks:
- id: strayl-lint
name: Strayl API Check
entry: strayl-lint check
language: system
pass_filenames: false
How It Works
- Scan - Finds
strayl:docannotations in your codebase - Extract - Identifies HTTP methods, endpoints, and parameters
- Validate - Sends to Strayl Cloud for AI-powered validation
- Report - Shows you exactly what changed in the API
Supported Documentation Formats
- OpenAPI / Swagger (JSON, YAML)
- HTML documentation pages
- Markdown docs
- API reference sites
Privacy & Security
- ✅ Only API endpoints and HTTP methods are sent
- ✅ No source code is transmitted
- ✅ No sensitive data leaves your machine
- ✅ Documentation URLs must be publicly accessible
Examples
Yookassa Integration
# strayl:doc https://yookassa.ru/developers/api
import requests
# Watchdog will detect if 'sum' was renamed to 'amount'
response = requests.post(
"https://api.yookassa.ru/v3/payments",
json={"sum": 1000} # ⚠️ Warning: field 'sum' renamed to 'amount'
)
Stripe Integration
// strayl:doc https://stripe.com/docs/api
const payment = await stripe.paymentIntents.create({
amount: 2000,
currency: 'usd',
// ✅ All fields match current API
});
Commands
check
Check API calls against documentation.
strayl-lint check [PATH] [OPTIONS]
Options:
--api-key, -k TEXT- API key (or use STRAYL_API_KEY env var)--ext, -e TEXT- Comma-separated file extensions--verbose, -v- Show detailed output--help- Show help message
init
Initialize configuration file.
strayl-lint init <API_KEY>
version
Show version information.
strayl-lint version
Troubleshooting
"No API key found"
Make sure you've set your API key via:
- Environment:
export STRAYL_API_KEY=sk_live_xxx - Config file:
echo 'api_key=sk_live_xxx' > .strayl - CLI flag:
strayl-lint check --api-key sk_live_xxx
"No API calls found"
Make sure you've added strayl:doc annotations:
# strayl:doc https://api.example.com/docs
requests.post(url, json=data)
Contributing
We welcome contributions! Please see CONTRIBUTING.md.
License
MIT License - see LICENSE for details.
Links
- 🌐 Website: strayl.dev
- 📖 Documentation: docs.strayl.dev
- 💬 Discord: discord.gg/strayl
- 🐛 Issues: github.com/strayl/strayl-lint/issues
Never fear API updates again. 🐕
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file strayl_lint-0.1.1.tar.gz.
File metadata
- Download URL: strayl_lint-0.1.1.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c4d4aa5bbcbb775ea4c242c5c4ab71bde2217310661556599d713222726edc3
|
|
| MD5 |
f775040c1479285851bf68c1a9dd48f6
|
|
| BLAKE2b-256 |
5e3a0655fe64d433fe34ea359806f60a658081fff64502717f8016b289b65b83
|
File details
Details for the file strayl_lint-0.1.1-py3-none-any.whl.
File metadata
- Download URL: strayl_lint-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
938c70f1b0ab2e6507605bd9eca919ea9a911eb632eefa5bc76c43a252566fd1
|
|
| MD5 |
f913c821fdb1f898c1cfa3e767b4e42b
|
|
| BLAKE2b-256 |
946dc1580174fc949beafdff77bd376e8a62566ca7b78ff591b418440369e2cf
|