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']}")