Skip to content

API Integration

NEURO provides a comprehensive REST API for building custom integrations, automating workflows, and connecting with third-party tools.

The API enables:

  • Programmatic data access
  • Automated finding creation
  • Custom tool integration
  • CI/CD pipeline integration
  • Reporting automation
https://{tenant}.nforged.com/api/v1

Or for your tenant:

https://{tenant}.nforged.com/api

All API requests require authentication via Bearer token:

Terminal window
curl -X GET "https://{tenant}.nforged.com/api/v1/projects" \
-H "Authorization: Bearer YOUR_API_TOKEN"
  1. Log into NEURO
  2. Go to SettingsAPI Access
  3. Click Generate API Token
  4. Copy and securely store the token
Terminal window
curl -X GET "https://{tenant}.nforged.com/api/v1/projects" \
-H "Authorization: Bearer YOUR_TOKEN"

Response:

{
"success": true,
"data": [
{
"id": "proj_123",
"name": "Q1 Pentest",
"client_id": "client_456",
"status": "in_progress"
}
]
}
Terminal window
curl -X POST "https://{tenant}.nforged.com/api/v1/findings" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_id": "proj_123",
"title": "SQL Injection in Login",
"severity": "High",
"description": "SQL injection vulnerability found...",
"remediation": "Use parameterized queries..."
}'
MethodEndpointDescription
GET/projectsList all projects
GET/projects/{id}Get project details
POST/projectsCreate project
PUT/projects/{id}Update project
DELETE/projects/{id}Delete project
MethodEndpointDescription
GET/findingsList all findings
GET/projects/{id}/findingsList project findings
GET/findings/{id}Get finding details
POST/findingsCreate finding
PUT/findings/{id}Update finding
DELETE/findings/{id}Delete finding
MethodEndpointDescription
GET/projects/{id}/assetsList project assets
GET/assets/{id}Get asset details
POST/assetsCreate asset
PUT/assets/{id}Update asset
DELETE/assets/{id}Delete asset
MethodEndpointDescription
GET/clientsList all clients
GET/clients/{id}Get client details
POST/clientsCreate client
PUT/clients/{id}Update client

Required headers:

Authorization: Bearer YOUR_TOKEN
Content-Type: application/json

JSON format for POST/PUT:

{
"field_name": "value",
"nested": {
"field": "value"
}
}
{
"success": true,
"data": { ... },
"meta": {
"page": 1,
"total": 100
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid field value",
"details": [...]
}
}

List endpoints support pagination:

Terminal window
GET /findings?page=1&limit=50

Parameters:

  • page: Page number (default: 1)
  • limit: Items per page (default: 50, max: 100)

Response includes:

{
"meta": {
"page": 1,
"limit": 50,
"total": 234,
"pages": 5
}
}

Filter results using query params:

Terminal window
GET /findings?severity=High&status=Open

Common filters:

  • severity: Critical, High, Medium, Low, Info
  • status: Open, Confirmed, Remediated, etc.
  • project_id: Filter by project
  • created_after: Date filter
  • search: Text search

API rate limits:

  • 1,000 requests per minute
  • 10,000 requests per hour

Rate limit headers:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640000000

When exceeded:

{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests"
}
}
import requests
API_URL = "https://{tenant}.nforged.com/api/v1"
TOKEN = "your_api_token"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"
}
# List projects
response = requests.get(f"{API_URL}/projects", headers=headers)
projects = response.json()["data"]
# Create finding
finding = {
"project_id": "proj_123",
"title": "XSS in Search",
"severity": "Medium",
"description": "Reflected XSS found in search parameter"
}
response = requests.post(f"{API_URL}/findings",
json=finding,
headers=headers)
const API_URL = 'https://{tenant}.nforged.com/api/v1';
const TOKEN = 'your_api_token';
const headers = {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json'
};
// List projects
const response = await fetch(`${API_URL}/projects`, { headers });
const { data: projects } = await response.json();
// Create finding
const finding = {
project_id: 'proj_123',
title: 'IDOR Vulnerability',
severity: 'High'
};
await fetch(`${API_URL}/findings`, {
method: 'POST',
headers,
body: JSON.stringify(finding)
});
# GitHub Actions example
- name: Create Finding in NEURO
run: |
curl -X POST "${{ secrets.NFORGED_API }}/findings" \
-H "Authorization: Bearer ${{ secrets.NFORGED_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"project_id": "proj_123", "title": "${{ env.FINDING_TITLE }}"}'
  1. Go to SettingsWebhooks
  2. Click Add Webhook
  3. Enter endpoint URL
  4. Select events to receive
  5. Save webhook
EventTriggered When
finding.createdNew finding added
finding.updatedFinding modified
finding.deletedFinding removed
project.createdNew project
report.generatedReport created
{
"event": "finding.created",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"id": "find_789",
"title": "SQL Injection",
"project_id": "proj_123"
}
}
CodeMeaning
200Success
201Created
400Bad Request
401Unauthorized
403Forbidden
404Not Found
429Rate Limited
500Server Error
CodeDescription
INVALID_TOKENAuthentication failed
VALIDATION_ERRORInvalid input
NOT_FOUNDResource doesn’t exist
PERMISSION_DENIEDAccess not allowed

Next: Explore Collaboration Features