Loading...
Loading...
Integrate Regulatory Signals into your applications, compliance platforms, and workflows. Our REST API provides programmatic access to all signal data and features.
The Regulatory Signals API is a RESTful API that uses JSON for request and response payloads. All API requests must be made over HTTPS.
Base URL: https://sengol.ai/api
API Version: v1
Content Type: application/json
The API supports two authentication methods: session-based (for web applications) and API keys (for programmatic access).
When logged into the web dashboard, your session cookies are automatically included with API requests. This is the simplest method for web applications.
For server-to-server or programmatic access, use API keys. Include your API key in theAuthorization header:
Authorization: Bearer YOUR_API_KEY
Keep Your API Keys Secure
Never expose API keys in client-side code or public repositories. Store them securely as environment variables or in a secrets manager.
/api/regulatory-signalsRetrieve regulatory compliance signals. Supports filtering by industry, jurisdiction, and severity.
| Parameter | Type | Required | Description |
|---|---|---|---|
industry | string | No | Filter by industry (e.g., "Healthcare", "Finance") |
jurisdiction | string | No | Filter by jurisdiction (e.g., "US", "EU", "UK") |
severity | string | No | Filter by severity ("critical", "high", "medium", "low") |
limit | integer | No | Maximum number of results (1-1000, default: 100) |
{
"success": true,
"count": 25,
"tier": "professional",
"usage": {
"used": 42,
"limit": 50,
"remaining": 8
},
"signals": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"signal_type": "new_regulation",
"severity": "critical",
"title": "EU AI Act: High-Risk AI System Classification",
"description": "New requirements for AI system classification...",
"action_required": "Conduct AI system inventory review...",
"risk_score": 95,
"affected_industries": ["Healthcare", "Finance"],
"created_at": "2024-12-15T10:30:00Z",
"regulation_name": "EU AI Act",
"jurisdiction": "EU",
"regulation_url": "https://eur-lex.europa.eu/...",
"regulatory_body": "EU",
"regulatory_body_name": "European Commission"
}
]
}/api/regulatory-signalsMark one or more signals as acknowledged by your organization.
{
"signalIds": [
"550e8400-e29b-41d4-a716-446655440000",
"6ba7b810-9dad-11d1-80b4-00c04fd430c8"
]
}{
"success": true
}Fetch critical healthcare signals in the EU:
curl -X GET "https://sengol.ai/api/regulatory-signals?industry=Healthcare&jurisdiction=EU&severity=critical" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json"
Acknowledge a signal:
curl -X POST "https://sengol.ai/api/regulatory-signals" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signalIds": ["550e8400-e29b-41d4-a716-446655440000"]
}'// Fetch signals
const fetchSignals = async () => {
const response = await fetch(
'https://sengol.ai/api/regulatory-signals?' +
new URLSearchParams({
industry: 'Healthcare',
jurisdiction: 'EU',
severity: 'critical'
}),
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
}
);
const data = await response.json();
if (data.success) {
console.log(`Found ${data.count} signals`);
console.log(`Usage: ${data.usage.used}/${data.usage.limit}`);
data.signals.forEach(signal => {
console.log(`[${signal.severity.toUpperCase()}] ${signal.title}`);
console.log(`Risk Score: ${signal.risk_score}`);
console.log(`Action: ${signal.action_required}`);
console.log('---');
});
} else {
console.error('Failed to fetch signals');
}
};
// Acknowledge signals
const acknowledgeSignals = async (signalIds) => {
const response = await fetch(
'https://sengol.ai/api/regulatory-signals',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ signalIds })
}
);
const data = await response.json();
return data.success;
};
// Usage
fetchSignals();
acknowledgeSignals(['550e8400-e29b-41d4-a716-446655440000']);import requests
import json
API_KEY = 'YOUR_API_KEY'
BASE_URL = 'https://sengol.ai/api'
headers = {
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json'
}
# Fetch signals
def fetch_signals(industry=None, jurisdiction=None, severity=None):
params = {}
if industry:
params['industry'] = industry
if jurisdiction:
params['jurisdiction'] = jurisdiction
if severity:
params['severity'] = severity
response = requests.get(
f'{BASE_URL}/regulatory-signals',
headers=headers,
params=params
)
if response.status_code == 200:
data = response.json()
if data['success']:
print(f"Found {data['count']} signals")
print(f"Usage: {data['usage']['used']}/{data['usage']['limit']}")
for signal in data['signals']:
print(f"[{signal['severity'].upper()}] {signal['title']}")
print(f"Risk Score: {signal['risk_score']}")
print(f"Action: {signal['action_required']}")
print('---')
return data['signals']
else:
print(f"Error: {response.status_code}")
return []
# Acknowledge signals
def acknowledge_signals(signal_ids):
response = requests.post(
f'{BASE_URL}/regulatory-signals',
headers=headers,
json={'signalIds': signal_ids}
)
if response.status_code == 200:
data = response.json()
return data.get('success', False)
return False
# Usage
signals = fetch_signals(
industry='Healthcare',
jurisdiction='EU',
severity='critical'
)
if signals:
signal_ids = [s['id'] for s in signals[:2]]
acknowledged = acknowledge_signals(signal_ids)
print(f"Acknowledged: {acknowledged}")API rate limits vary by subscription tier to ensure fair usage and system stability.
| Tier | Requests per Minute | Requests per Hour | Monthly Signal Limit |
|---|---|---|---|
| Free | 10 | 100 | 3 |
| Professional | 60 | 1,000 | 50 |
| Team | 120 | 5,000 | Unlimited |
| Growth | 300 | 15,000 | Unlimited |
| Enterprise | Custom | Custom | Unlimited |
Rate Limit Headers: All API responses include rate limit information in headers:
The API uses conventional HTTP response codes to indicate success or failure.
200 - OK
Request succeeded
400 - Bad Request
Invalid request parameters
401 - Unauthorized
Invalid or missing API key
403 - Forbidden
Monthly signal limit reached or insufficient permissions
429 - Too Many Requests
Rate limit exceeded
500 - Internal Server Error
Something went wrong on our end
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit of 60 requests per minute exceeded",
"details": {
"limit": 60,
"resetAt": "2024-12-15T10:35:00Z"
}
}
}X-RateLimit-Remaining header before making requestsReceive real-time notifications when new regulatory signals are detected. Webhooks are available on Growth and Enterprise tiers.
Availability: Growth and Enterprise tiers only
{
"event": "regulatory_signal.new",
"timestamp": "2024-12-15T10:30:00Z",
"data": {
"signal": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"severity": "critical",
"title": "EU AI Act: High-Risk AI System Classification",
"risk_score": 95,
"affected_industries": ["Healthcare", "Finance"],
"jurisdiction": "EU"
}
}
}All webhook requests include a signature in the X-Webhook-Signature header. Verify this signature to ensure the request came from our servers:
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
const expectedSignature = hmac.update(payload).digest('hex');
return signature === expectedSignature;
}
// Usage in Express.js
app.post('/webhook', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Process webhook
console.log('New signal:', req.body.data.signal.title);
res.status(200).send('OK');
});Official SDKs make integration faster and easier. More languages coming soon!
Official Node.js and browser SDK with TypeScript support
Official Python client library with async support
Official Go client library
Request an SDK: Need an SDK for another language? Contact us at developers@sengol.ai
For API support, technical questions, or feature requests: