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. 🐕
Metadata
Release files for strayl-lint 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| strayl_lint-0.1.4.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| strayl_lint-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.2 kB
Release files / strayl_lint-0.1.4.tar.gz
| Download URL | strayl_lint-0.1.4.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ab15f84a0892e597b35c4d17dd568347fa7c7e08d799916b21ed520893bb0b24
|
|
BLAKE2b-256 checksum How to use checksums |
c17784a4aa0e50998ff28cfd19106f6ef17491aa5dd8fd6732fe44731f19025f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.4
|
Release files / strayl_lint-0.1.4-py3-none-any.whl
| Download URL | strayl_lint-0.1.4-py3-none-any.whl |
|---|---|
| Size | 10.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6bdf1300e16d44dfe0a46627914feca3310d232ad5ebc99a19ccca44b6eb29e8
|
|
BLAKE2b-256 checksum How to use checksums |
84c99a2b3007f61d246645556cf9020711fcebbf1f01b09083c336095650f274
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.4
|