Api Script Examples
Script examples for common BlockSecOps API operations. bash #!/bin/bash APIURL="https://api.blocksecops.com/api/v1" APIKEY="YOURAPIKEY" echo "Uploading...
Last updated: January 14, 2026
API Script Examples
Script examples for common BlockSecOps API operations.
Upload and Scan Contract
Complete Workflow
#!/bin/bash
API_URL="https://api.blocksecops.com/api/v1"
API_KEY="YOUR_API_KEY"
# 1. Upload contract
echo "Uploading contract..."
UPLOAD_RESPONSE=$(curl -s -X POST "$API_URL/contracts/upload" \
-H "Authorization: Bearer $API_KEY" \
-F "file=@contracts/Token.sol")
CONTRACT_ID=$(echo $UPLOAD_RESPONSE | jq -r '.id')
echo "Contract ID: $CONTRACT_ID"
# 2. Start scan
echo "Starting scan..."
SCAN_RESPONSE=$(curl -s -X POST "$API_URL/scans" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d "{\"contract_id\": \"$CONTRACT_ID\", \"preset\": \"standard\"}")
SCAN_ID=$(echo $SCAN_RESPONSE | jq -r '.id')
echo "Scan ID: $SCAN_ID"
# 3. Wait for completion
echo "Waiting for scan to complete..."
while true; do
STATUS_RESPONSE=$(curl -s "$API_URL/scans/$SCAN_ID" \
-H "Authorization: Bearer $API_KEY")
STATUS=$(echo $STATUS_RESPONSE | jq -r '.status')
if [ "$STATUS" = "completed" ]; then
echo "Scan completed!"
break
elif [ "$STATUS" = "failed" ]; then
echo "Scan failed!"
exit 1
fi
echo "Status: $STATUS"
sleep 10
done
# 4. Get results
echo "Fetching results..."
curl -s "$API_URL/scans/$SCAN_ID/results" \
-H "Authorization: Bearer $API_KEY" | jq '.'
JavaScript/Node.js Examples
Using Fetch API
const API_URL = 'https://api.blocksecops.com/api/v1';
const API_KEY = process.env.BLOCKSECOPS_API_KEY;
const headers = {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
};
// Upload contract
async function uploadContract(filePath) {
const formData = new FormData();
formData.append('file', fs.createReadStream(filePath));
const response = await fetch(`${API_URL}/contracts/upload`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${API_KEY}` },
body: formData
});
return response.json();
}
// Start scan
async function startScan(contractId, preset = 'standard') {
const response = await fetch(`${API_URL}/scans`, {
method: 'POST',
headers,
body: JSON.stringify({ contract_id: contractId, preset })
});
return response.json();
}
// Wait for scan completion
async function waitForScan(scanId) {
while (true) {
const response = await fetch(`${API_URL}/scans/${scanId}`, { headers });
const data = await response.json();
if (data.status === 'completed') return data;
if (data.status === 'failed') throw new Error('Scan failed');
await new Promise(r => setTimeout(r, 10000));
}
}
// Get results
async function getResults(scanId) {
const response = await fetch(`${API_URL}/scans/${scanId}/results`, { headers });
return response.json();
}
// Full workflow
async function scanContract(filePath) {
const contract = await uploadContract(filePath);
console.log('Uploaded:', contract.id);
const scan = await startScan(contract.id);
console.log('Scan started:', scan.id);
await waitForScan(scan.id);
console.log('Scan completed');
const results = await getResults(scan.id);
console.log('Vulnerabilities:', results.summary);
return results;
}
Python Examples
Using Requests Library
import os
import time
import requests
API_URL = 'https://api.blocksecops.com/api/v1'
API_KEY = os.environ['BLOCKSECOPS_API_KEY']
headers = {
'Authorization': f'Bearer {API_KEY}'
}
def upload_contract(file_path):
"""Upload a contract file."""
with open(file_path, 'rb') as f:
response = requests.post(
f'{API_URL}/contracts/upload',
headers=headers,
files={'file': f}
)
response.raise_for_status()
return response.json()
def start_scan(contract_id, preset='standard'):
"""Start a security scan."""
response = requests.post(
f'{API_URL}/scans',
headers={**headers, 'Content-Type': 'application/json'},
json={'contract_id': contract_id, 'preset': preset}
)
response.raise_for_status()
return response.json()
def wait_for_scan(scan_id, timeout=600):
"""Wait for scan to complete."""
start = time.time()
while time.time() - start < timeout:
response = requests.get(f'{API_URL}/scans/{scan_id}', headers=headers)
data = response.json()
if data['status'] == 'completed':
return data
if data['status'] == 'failed':
raise Exception(f"Scan failed: {data.get('error')}")
print(f"Status: {data['status']}")
time.sleep(10)
raise TimeoutError("Scan timed out")
def get_results(scan_id):
"""Get scan results."""
response = requests.get(f'{API_URL}/scans/{scan_id}/results', headers=headers)
response.raise_for_status()
return response.json()
def scan_contract(file_path, preset='standard'):
"""Complete scan workflow."""
# Upload
contract = upload_contract(file_path)
print(f"Uploaded: {contract['id']}")
# Scan
scan = start_scan(contract['id'], preset)
print(f"Scan started: {scan['id']}")
# Wait
wait_for_scan(scan['id'])
print("Scan completed")
# Results
results = get_results(scan['id'])
print(f"Found {results['summary']['total']} vulnerabilities")
return results
# Usage
if __name__ == '__main__':
results = scan_contract('contracts/Token.sol')
for vuln in results['vulnerabilities']:
print(f"[{vuln['severity']}] {vuln['title']}")