Skip to Content
APIExamples

Code Examples

Language-specific examples for integrating with the Inkog API.

cURL

Scan a Single File

curl -X POST https://api.inkog.io/api/v1/scan \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@./agent.py"

Scan Multiple Files

curl -X POST https://api.inkog.io/api/v1/scan \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@./src/agent.py" \ -F "file=@./src/tools.py" \ -F "file=@./src/prompts.py"

Python

Using requests

import requests def scan_file(file_path: str, api_key: str) -> dict: """Scan a file for AI agent vulnerabilities.""" with open(file_path, "rb") as f: response = requests.post( "https://api.inkog.io/api/v1/scan", headers={"Authorization": f"Bearer {api_key}"}, files={"file": f} ) response.raise_for_status() return response.json() # Usage result = scan_file("agent.py", "YOUR_API_KEY") print(f"Risk Score: {result['risk_score']}/100") print(f"Findings: {result['findings_count']}") for finding in result["findings"]: print(f" [{finding['severity']}] {finding['file']}:{finding['line']}") print(f" {finding['message']}")

Scan Multiple Files

import requests from pathlib import Path def scan_directory(directory: str, api_key: str) -> dict: """Scan all Python files in a directory.""" files = [] for path in Path(directory).rglob("*.py"): files.append(("file", (path.name, open(path, "rb")))) response = requests.post( "https://api.inkog.io/api/v1/scan", headers={"Authorization": f"Bearer {api_key}"}, files=files ) # Clean up file handles for _, (_, f) in files: f.close() response.raise_for_status() return response.json() result = scan_directory("./src", "YOUR_API_KEY") print(f"Scanned {result['files_scanned']} files")

JavaScript

Using fetch

async function scanFile(filePath, apiKey) { const formData = new FormData(); const file = await fetch(filePath).then(r => r.blob()); formData.append('file', file, filePath.split('/').pop()); const response = await fetch('https://api.inkog.io/api/v1/scan', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}` }, body: formData }); if (!response.ok) { const error = await response.json(); throw new Error(error.error?.message || 'Scan failed'); } return response.json(); } // Usage const result = await scanFile('./agent.js', 'YOUR_API_KEY'); console.log(`Risk Score: ${result.risk_score}/100`); console.log(`Found ${result.findings_count} issues`);

Node.js with fs

import fs from 'fs'; import FormData from 'form-data'; async function scanFile(filePath, apiKey) { const form = new FormData(); form.append('file', fs.createReadStream(filePath)); const response = await fetch('https://api.inkog.io/api/v1/scan', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, ...form.getHeaders() }, body: form }); return response.json(); }

Go

package main import ( "bytes" "encoding/json" "fmt" "io" "mime/multipart" "net/http" "os" "path/filepath" ) type ScanResult struct { Success bool `json:"success"` RiskScore int `json:"risk_score"` FindingsCount int `json:"findings_count"` Findings []Finding `json:"findings"` } type Finding struct { ID string `json:"id"` Severity string `json:"severity"` File string `json:"file"` Line int `json:"line"` Message string `json:"message"` CWE string `json:"cwe"` } func ScanFile(filePath, apiKey string) (*ScanResult, error) { file, err := os.Open(filePath) if err != nil { return nil, err } defer file.Close() body := &bytes.Buffer{} writer := multipart.NewWriter(body) part, err := writer.CreateFormFile("file", filepath.Base(filePath)) if err != nil { return nil, err } io.Copy(part, file) writer.Close() req, err := http.NewRequest("POST", "https://api.inkog.io/api/v1/scan", body) if err != nil { return nil, err } req.Header.Set("Authorization", "Bearer "+apiKey) req.Header.Set("Content-Type", writer.FormDataContentType()) resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } defer resp.Body.Close() var result ScanResult if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { return nil, err } return &result, nil } func main() { result, err := ScanFile("agent.go", "YOUR_API_KEY") if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Risk Score: %d/100\n", result.RiskScore) fmt.Printf("Findings: %d\n", result.FindingsCount) for _, f := range result.Findings { fmt.Printf(" [%s] %s:%d - %s\n", f.Severity, f.File, f.Line, f.Message) } }

CI/CD Integration

For GitHub Actions, GitLab CI, and other CI/CD pipelines, see CI/CD Integration.

For simpler local usage, consider using the CLI:

inkog scan ./src
Last updated on