Usage & Quota Analytics
The usage analytics endpoints give you full visibility into your API consumption patterns. Use these endpoints to track quota consumption, monitor usage trends, identify heavy consumers, and audit API calls for compliance.
All usage endpoints are scoped to your tenant. You can only see your own data.
Required scope: usage:read
Usage Summary
Get an aggregated view of your API usage over a date range.
Endpoint
GET /api/v1/usage/summary
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | 30d | Period: 24h, 7d, 30d, 90d |
Request
curl -X GET "https://api.cert-ix.com/scan-api/api/v1/usage/summary?period=30d" \
-H "X-API-Key: $CERTIX_API_KEY"
Response (200 OK)
{
"success": true,
"data": {
"tenantId": "7b5b0610-2947-412f-a869-4683da321fcf",
"period": {
"start": "2026-02-04T00:00:00Z",
"end": "2026-03-06T23:59:59Z"
},
"totalCalls": 4827,
"successCalls": 4512,
"errorCalls": 315,
"avgDurationMs": 245,
"maxDurationMs": 12450,
"totalScans": 892,
"distinctScanTypes": 5,
"scanTypesUsed": ["nmap", "zap", "nuclei", "trivy", "sentinel"],
"quotaConsumedCalls": 892
}
}
Response Fields
| Field | Description |
|---|---|
totalCalls | Total number of API calls made |
successCalls | Calls that returned 2xx status codes |
errorCalls | Calls that returned 4xx or 5xx status codes |
avgDurationMs | Average response time in milliseconds |
totalScans | Total number of scans submitted |
distinctScanTypes | Number of different scan engines used |
quotaConsumedCalls | Number of calls that consumed quota |
Not all API calls consume quota. Only successful scan-related operations (2xx responses) count toward your plan quota.
Usage History
View time-series API usage data, broken down by hour or day.
Endpoint
GET /api/v1/usage/history
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | 7d | Period: 24h, 7d, 30d, 90d |
granularity | string | auto | hourly or daily (auto-selected based on period) |
Request
curl -X GET "https://api.cert-ix.com/scan-api/api/v1/usage/history?period=7d" \
-H "X-API-Key: $CERTIX_API_KEY"
Response (200 OK)
{
"success": true,
"data": {
"granularity": "daily",
"entries": [
{
"timestamp": "2026-02-27T00:00:00Z",
"totalCalls": 687,
"successCalls": 645,
"errorCalls": 42,
"avgDurationMs": 198
},
{
"timestamp": "2026-02-28T00:00:00Z",
"totalCalls": 712,
"successCalls": 690,
"errorCalls": 22,
"avgDurationMs": 234
}
]
}
}
Auto Granularity
| Period | Default Granularity |
|---|---|
24h | hourly |
7d | daily |
30d | daily |
90d | daily |
Usage by Scan Type
Breakdown of your API usage by scan engine to understand which tools are most used.
Endpoint
GET /api/v1/usage/by-scan-type
Request
curl -X GET "https://api.cert-ix.com/scan-api/api/v1/usage/by-scan-type?period=30d" \
-H "X-API-Key: $CERTIX_API_KEY"
Response (200 OK)
{
"success": true,
"data": {
"scanTypes": [
{
"scanType": "nmap",
"totalScans": 342,
"successScans": 330,
"failedScans": 12,
"avgDurationMs": 85000,
"percentOfTotal": 38.3
},
{
"scanType": "nuclei",
"totalScans": 278,
"successScans": 271,
"failedScans": 7,
"avgDurationMs": 120000,
"percentOfTotal": 31.2
},
{
"scanType": "zap",
"totalScans": 145,
"successScans": 140,
"failedScans": 5,
"avgDurationMs": 340000,
"percentOfTotal": 16.3
}
]
}
}
Usage by API Key
View which API keys are generating the most usage. Useful for multi-team environments or when you have separate keys for different integrations.
Endpoint
GET /api/v1/usage/by-api-key
Request
curl -X GET "https://api.cert-ix.com/scan-api/api/v1/usage/by-api-key?period=30d" \
-H "X-API-Key: $CERTIX_API_KEY"
Response (200 OK)
{
"success": true,
"data": {
"apiKeys": [
{
"keyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"keyName": "CI/CD Pipeline - Production",
"keyPrefix": "cix_sk_001e3c",
"totalCalls": 3241,
"successCalls": 3100,
"errorCalls": 141,
"lastUsedAt": "2026-03-06T09:45:12Z"
},
{
"keyId": "b2c3d479-58cc-4372-a567-f47ac10b0e02",
"keyName": "Monitoring - Read Only",
"keyPrefix": "cix_sk_7f3a2b",
"totalCalls": 1586,
"successCalls": 1412,
"errorCalls": 174,
"lastUsedAt": "2026-03-06T10:00:00Z"
}
]
}
}
API Call Logs
Retrieve a detailed audit log of individual API calls for compliance and debugging.
Endpoint
GET /api/v1/usage/call-logs
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | 24h | Period: 24h, 7d, 30d |
page | integer | 1 | Page number |
limit | integer | 50 | Results per page (max: 100) |
Request
curl -X GET "https://api.cert-ix.com/scan-api/api/v1/usage/call-logs?period=24h&page=1&limit=20" \
-H "X-API-Key: $CERTIX_API_KEY"
Response (200 OK)
{
"success": true,
"data": {
"logs": [
{
"id": "log-uuid-1",
"method": "POST",
"path": "/api/v1/scans",
"statusCode": 201,
"durationMs": 345,
"scanType": "nmap",
"target": "example.com",
"quotaConsumed": true,
"createdAt": "2026-03-06T10:00:00Z"
},
{
"id": "log-uuid-2",
"method": "GET",
"path": "/api/v1/scans/uuid-here",
"statusCode": 200,
"durationMs": 45,
"quotaConsumed": false,
"createdAt": "2026-03-06T10:00:15Z"
}
],
"total": 156,
"page": 1,
"limit": 20,
"totalPages": 8
}
}
API call logs include an integrity hash chain for tamper detection, compliant with ANSSI M25, NIS2, and DORA Art. 11 requirements.
Quota System
Your subscription plan defines the number of quota-consuming API calls you can make per billing period (calendar month).
What Consumes Quota
| Action | Consumes Quota |
|---|---|
POST /scans (success, 201) | Yes |
POST /scan-templates/:id/launch (success, 201) | Yes |
GET /scans (list scans) | No |
GET /scans/:id (check status) | No |
GET /scans/:id/results (retrieve results) | No |
POST /scans/:id/cancel | No |
| Any failed request (4xx, 5xx) | No |
| Webhook/template/usage endpoints | No |
Rule: Only successful scan creation calls (HTTP 201) consume quota.
Quota Exceeded
When your monthly quota is exhausted:
{
"success": false,
"error": "Monthly scan quota exceeded. Current usage: 500/500. Upgrade your plan or wait for the next billing period.",
"code": "QUOTA_EXCEEDED"
}
HTTP Status: 429 Too Many Requests
Quota Reset
Quotas reset at the start of each calendar month (midnight UTC on the 1st).
Date Range Filtering
All usage endpoints support the period parameter for consistent date range filtering:
| Period | Range |
|---|---|
24h | Last 24 hours from now |
7d | Last 7 days from now |
30d | Last 30 days from now |
90d | Last 90 days from now |
Next Steps: