INTEGRATIONS
Bring Security
Into Your Workflow
Connect ClawSafe to your CI/CD pipelines, automation scripts, or security review processes via the REST API.
REST API
All functionality is exposed through a REST API with JSON requests and responses. Currently free with rate limits.
POST
/api/scan Submit a scan job. Accepts a URL (GitHub / ClawHub / ZIP) or file upload (multipart).
Request Body
{
"url": "https://github.com/user/skill-repo",
"locale": "en"
} Response
{
"reportId": "abc123",
"id": "abc123",
"status": "completed",
"verdict": "Malicious",
"verdictLevel": "malicious",
"riskScore": { "score": 87 },
"risk_score": 87,
"report_url": "https://clawsafe.dev/report/abc123"
} GET
/api/report/:id Retrieve the full report for a given ID, including the findings list.
Response
{
"data": {
"id": "abc123",
"type": "scan-report",
"attributes": {
"verdictLevel": "malicious",
"riskScore": { "score": 87 },
"findings": [
{
"category": "data_exfiltration",
"severity": "critical",
"title": "Suspicious C2 communication detected"
}
]
}
}
} GitHub Actions Example
Automatically scan skills on pull requests and block high-risk skills from being merged.
GitHub Actions
name: ClawSafe Security Scan
on:
pull_request:
paths:
- 'skills/**'
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan skill with ClawSafe
run: |
RESULT=$(curl -s -X POST https://clawsafe.dev/api/scan \
-H "Content-Type: application/json" \
-d '{"url": "${{ github.server_url }}/${{ github.repository }}/tree/${{ github.sha }}/skills", "locale": "en"}')
VERDICT=$(echo $RESULT | jq -r '.verdictLevel')
SCORE=$(echo $RESULT | jq -r '.riskScore.score')
echo "Verdict: $VERDICT, Risk Score: $SCORE"
if [ "$VERDICT" = "malicious" ] || [ "$VERDICT" = "high_risk" ]; then
echo "::error::ClawSafe: Dangerous skill detected (score: $SCORE)"
exit 1
fi Shell Script Example
Quickly scan a skill directory in local development or CI environments.
bash
#!/bin/bash
# clawsafe-scan.sh - Scan a local skill directory
SKILL_DIR="$1"
API_BASE="https://clawsafe.dev/api"
if [ -z "$SKILL_DIR" ]; then
echo "Usage: ./clawsafe-scan.sh <skill-dir>"
exit 1
fi
echo "Scanning: $SKILL_DIR"
ARCHIVE=$(mktemp -t clawsafe-skill.XXXXXX.zip)
zip -rq "$ARCHIVE" "$SKILL_DIR"
RESPONSE=$(curl -s -X POST "$API_BASE/scan" \
-F "file=@$ARCHIVE" \
-F "locale=en")
VERDICT=$(echo "$RESPONSE" | jq -r '.verdictLevel')
SCORE=$(echo "$RESPONSE" | jq -r '.riskScore.score')
REPORT_ID=$(echo "$RESPONSE" | jq -r '.reportId')
echo "Verdict: $VERDICT | Risk Score: $SCORE"
echo "Report: https://clawsafe.dev/report/$REPORT_ID"
rm -f "$ARCHIVE"
case "$VERDICT" in
malicious|high_risk) exit 1 ;;
*) exit 0 ;;
esac Rate Limits
Scan API (POST /api/scan) 5 / hour per IP
Report Query (GET /api/report) Unlimited
Max file size 10 MB
Need higher limits? Contact [email protected].
View Full API Docs