Tech & Trust
REST endpoints for Tech & Trust. Base URL https://api.competlab.com; every request needs a CL-API-Key header (see Authentication). Responses wrap in { item } or { items }; errors in { error }.
Get latest tech & trust data
/v1/projects/{projectId}/tech-trustGet the latest tech & trust profile data for all competitors in a project. Returns security headers, trust signals, technology stack, robots.txt analysis, and DNS infrastructure.
Path parameters
| Name | Type | Description |
|---|---|---|
projectId | string | Project ID |
Request
curl "https://api.competlab.com/v1/projects/507f1f77bcf86cd799439011/tech-trust" \
-H "CL-API-Key: YOUR_COMPETLAB_API_KEY"Response 200 OK
Example
{
"item": {
"lastUpdatedAt": "2026-03-15T10:00:00.000Z",
"summary": {
"competitorsChecked": 6,
"competitorsSuccessful": 5,
"customer": {
"domain": "yoursite.com",
"securityGrade": "B",
"securityScore": 72,
"securitySignalsAvailable": {
"available": false,
"reason": "site_uses_behavioral_protection"
},
"trustSignalCount": 8,
"techStackCount": 14,
"blockedAiBotsCount": 0,
"allowsAiAccess": true
},
"topSecurityCompetitor": {
"domain": "rival.com",
"securityGrade": "A",
"securityScore": 95
},
"topTrustCompetitor": {
"domain": "other.com",
"trustSignalCount": 15
},
"securityScoreGap": -23,
"trustSignalGap": -7
},
"competitors": [
{
"domain": "competitor.com",
"isOwn": false,
"securityHeaders": {
"grade": "A",
"score": 85,
"hsts": true,
"csp": true,
"xFrameOptions": true,
"xContentTypeOptions": true,
"signalsAvailable": {
"available": false,
"reason": "site_uses_behavioral_protection"
}
},
"trustSignals": {
"totalCount": 10,
"categories": {
"compliance": 3,
"reviews": 4,
"socialProof": 2,
"certifications": 1
}
},
"technologyStack": {
"tech": [
"React",
"Next.js",
"TypeScript"
],
"growth": [
"Google Analytics",
"HubSpot"
],
"engagement": [
"Intercom",
"Zendesk"
],
"totalCount": 12
},
"robotsTxt": {
"exists": true,
"aiBotsBlocked": [
"GPTBot",
"ClaudeBot"
],
"totalRules": 5
},
"dnsInfrastructure": {
"emailProvider": "Google Workspace",
"dnsProvider": "Cloudflare"
}
}
]
}
}Errors
| Status | Code | Meaning |
|---|---|---|
| 401 | api_key_missing · api_key_invalid · api_key_revoked · api_key_expired · insufficient_scope | The CL-API-Key is missing, malformed, revoked, expired, or lacks the required scope. |
| 404 | project_not_found | No project matches the id in the path. |
Every error uses the shared { error: { code, message, status } } envelope; code is one of the values listed above.
{
"error": {
"code": "api_key_invalid",
"message": "Invalid API key",
"status": 401
}
}Get tech & trust run history
/v1/projects/{projectId}/tech-trust/historyGet paginated history of tech & trust monitoring runs for a project. Each entry includes run timing and summary statistics.
Path parameters
| Name | Type | Description |
|---|---|---|
projectId | string | Project ID |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
page | number | Page number (1-indexed). Default 1. Min 1. | |
limit | number | Number of items per page. Default 20. Range 1–100. |
Request
curl "https://api.competlab.com/v1/projects/507f1f77bcf86cd799439011/tech-trust/history?page=1&limit=20" \
-H "CL-API-Key: YOUR_COMPETLAB_API_KEY"Response 200 OK
Example
{
"items": [
{
"runId": "507f1f77bcf86cd799439011",
"completedAt": "2026-03-15T10:00:00.000Z",
"summary": {
"competitorsChecked": 6,
"competitorsSuccessful": 5,
"customer": {
"domain": "yoursite.com",
"securityGrade": "B",
"securityScore": 72,
"securitySignalsAvailable": {
"available": false,
"reason": "site_uses_behavioral_protection"
},
"trustSignalCount": 8,
"techStackCount": 14,
"blockedAiBotsCount": 0,
"allowsAiAccess": true
},
"topSecurityCompetitor": {
"domain": "rival.com",
"securityGrade": "A",
"securityScore": 95
},
"topTrustCompetitor": {
"domain": "other.com",
"trustSignalCount": 15
},
"securityScoreGap": -23,
"trustSignalGap": -7
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 47,
"totalPages": 3,
"hasMore": true
}
}Paginated — pass page and limit query parameters and follow pagination.hasMore to page through the full set.
Errors
| Status | Code | Meaning |
|---|---|---|
| 401 | api_key_missing · api_key_invalid · api_key_revoked · api_key_expired · insufficient_scope | The CL-API-Key is missing, malformed, revoked, expired, or lacks the required scope. |
Every error uses the shared { error: { code, message, status } } envelope; code is one of the values listed above.
{
"error": {
"code": "api_key_invalid",
"message": "Invalid API key",
"status": 401
}
}Get tech & trust data for a specific run
/v1/projects/{projectId}/tech-trust/history/{runId}Get full tech & trust data for a specific historical monitoring run, including per-competitor security headers, trust signals, technology stack, robots.txt, and DNS infrastructure.
Path parameters
| Name | Type | Description |
|---|---|---|
runId | string | Run ID |
projectId | string | Project ID |
Request
curl "https://api.competlab.com/v1/projects/507f1f77bcf86cd799439011/tech-trust/history/507f1f77bcf86cd799439012" \
-H "CL-API-Key: YOUR_COMPETLAB_API_KEY"Response 200 OK
Example
{
"item": {
"runId": "507f1f77bcf86cd799439011",
"completedAt": "2026-03-15T10:00:00.000Z",
"summary": {
"competitorsChecked": 6,
"competitorsSuccessful": 5,
"customer": {
"domain": "yoursite.com",
"securityGrade": "B",
"securityScore": 72,
"securitySignalsAvailable": {
"available": false,
"reason": "site_uses_behavioral_protection"
},
"trustSignalCount": 8,
"techStackCount": 14,
"blockedAiBotsCount": 0,
"allowsAiAccess": true
},
"topSecurityCompetitor": {
"domain": "rival.com",
"securityGrade": "A",
"securityScore": 95
},
"topTrustCompetitor": {
"domain": "other.com",
"trustSignalCount": 15
},
"securityScoreGap": -23,
"trustSignalGap": -7
},
"competitors": [
{
"domain": "competitor.com",
"isOwn": false,
"securityHeaders": {
"grade": "A",
"score": 85,
"hsts": true,
"csp": true,
"xFrameOptions": true,
"xContentTypeOptions": true,
"signalsAvailable": {
"available": false,
"reason": "site_uses_behavioral_protection"
}
},
"trustSignals": {
"totalCount": 10,
"categories": {
"compliance": 3,
"reviews": 4,
"socialProof": 2,
"certifications": 1
}
},
"technologyStack": {
"tech": [
"React",
"Next.js",
"TypeScript"
],
"growth": [
"Google Analytics",
"HubSpot"
],
"engagement": [
"Intercom",
"Zendesk"
],
"totalCount": 12
},
"robotsTxt": {
"exists": true,
"aiBotsBlocked": [
"GPTBot",
"ClaudeBot"
],
"totalRules": 5
},
"dnsInfrastructure": {
"emailProvider": "Google Workspace",
"dnsProvider": "Cloudflare"
}
}
]
}
}Errors
| Status | Code | Meaning |
|---|---|---|
| 401 | api_key_missing · api_key_invalid · api_key_revoked · api_key_expired · insufficient_scope | The CL-API-Key is missing, malformed, revoked, expired, or lacks the required scope. |
| 404 | run_not_found | No run matches the id in the path. |
Every error uses the shared { error: { code, message, status } } envelope; code is one of the values listed above.
{
"error": {
"code": "api_key_invalid",
"message": "Invalid API key",
"status": 401
}
}