API Reference

Kerq API Docs

Everything you need to query trust scores, search tools, and integrate reliability signals directly into your agents and pipelines.

Base URL https://kerq.dev
Quick Start

Get a trust score for any tool in under a minute. Three steps:

1. Get your API key at kerq.dev/developer

2. Query the trust score endpoint (curl)

# Replace YOUR_API_KEY and the tool slug
curl -s https://kerq.dev/api/tools/github-mcp-server/score \
  -H "Authorization: Bearer YOUR_API_KEY"

3. Parse the response

{
  "success": true,
  "tool_id": 42,
  "slug": "github-mcp-server",
  "name": "GitHub MCP Server",
  "trust_score": 91,
  "tier": "certified",
  "score_breakdown": {
    "uptime": 98,
    "response_time": 95,
    "error_rate": 100,
    "consistency": 88,
    "throughput": 85,
    "recovery_behavior": 90,
    "performance_trend": 80
  },
  "endpoint_ms": 124,
  "calculated_at": "2026-03-30T20:00:00.000Z"
}
Use the score in your agent: If trust_score is below your threshold (e.g. 70), reject the tool connection or fall back to an alternative. Higher is more reliable.

Or use fetch (JavaScript)

const res = await fetch('https://kerq.dev/api/tools/github-mcp-server/score', {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});
const { trust_score, tier } = await res.json();
if (trust_score < 70) throw new Error('Tool reliability below threshold');
🔑
Authentication

Most Kerq API endpoints require an API key. Keys are tied to your developer account and your access tier (Free or High Volume).

Where to get a key: Sign up at kerq.dev, then visit the Developer Portal to generate and manage keys.

Three ways to pass your API key

# Option 1 — Authorization header (recommended)
Authorization: Bearer <your-api-key>

# Option 2 — X-API-Key header
X-API-Key: <your-api-key>

# Option 3 — Query parameter (useful for quick tests)
GET /api/tools/my-tool/score?api_key=<your-api-key>
Keep your key secret. Treat API keys like passwords — don't commit them to public repos. Use environment variables: KERQ_API_KEY.

Missing key response

# HTTP 401
{
  "success": false,
  "error": "MISSING_API_KEY",
  "message": "API key required. Add header: Authorization: Bearer <your-api-key>",
  "docs": "https://kerq.dev/developer"
}
Endpoints
GET /api/tools/:id/score Auth required

The primary endpoint. Returns the trust score and full 7-metric breakdown for any tool. Safe to call on every agent step.

Parameter Type Description
:id string required Tool ID (numeric) or slug (e.g. github-mcp-server)

Example response

{
  "success": true,
  "tool_id": 42,
  "slug": "github-mcp-server",
  "name": "GitHub MCP Server",
  "trust_score": 91,
  "tier": "certified",
  "score_breakdown": {
    "uptime": 98,
    "response_time": 95,
    "error_rate": 100,
    "consistency": 88,
    "throughput": 85,
    "recovery_behavior": 90,
    "performance_trend": 80
  },
  "endpoint_ms": 124,
  "calculated_at": "2026-03-30T20:00:00.000Z"
}
GET /api/tools Auth required

Paginated list of all tools in the Score Index. Supports filtering by category, score threshold, and verification tier. Use this to build your own tool discovery layer.

Parameter Type Description
page integer optional Page number. Default: 1
limit integer optional Results per page. Default: 20, max: 100
search string optional Search tools by name or description
category string optional Filter by category slug
min_score integer optional Minimum trust score filter (0–100)
verification_tier string optional certified, community, or unverified
sort string optional Sort order (e.g. score_desc)

Example response

{
  "success": true,
  "tools": [
    {
      "id": 42,
      "slug": "github-mcp-server",
      "name": "GitHub MCP Server",
      "category": "Development",
      "trust_score": 91,
      "tier": "certified"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 347,
    "pages": 18
  }
}
GET /api/tools/:id Auth required

Full metadata for a single tool — name, description, category, endpoint URL, certification status, and current score.

Parameter Type Description
:id string required Tool ID (numeric) or slug

Example response

{
  "success": true,
  "tool": {
    "id": 42,
    "slug": "github-mcp-server",
    "name": "GitHub MCP Server",
    "description": "Official GitHub MCP server for code access",
    "category": "Development",
    "endpoint_url": "https://api.githubcopilot.com/mcp",
    "trust_score": 91,
    "tier": "certified",
    "is_certified": true,
    "is_claimed": true
  }
}
GET /api/tools/top Auth required

Leaderboard of the highest-scoring tools, sorted by trust score descending. Useful for surfacing reliable options when a user hasn't specified a tool.

Parameter Type Description
limit integer optional Number of results. Default: 20, max: 100
GET /api/health Public

Heartbeat endpoint. No auth required. Use this for uptime checks or pre-flight verification before your agent makes scored requests.

{
  "status": "ok",
  "timestamp": "2026-03-30T21:00:00.000Z"
}
📊
Score Schema

Every Kerq trust score is a weighted composite of 7 independent metrics. Availability and uptime carry the most weight — an unreachable tool is an unusable tool. Response time and error rate are the next strongest signals. Consistency, throughput, recovery behavior, and performance trend are supporting factors that provide a complete reliability picture. The exact weighting formula is proprietary.

Field Description
uptime Rolling availability over the measurement window.
response_time Median latency in milliseconds.
error_rate Proportion of requests returning server error status codes.
consistency Variance in response times. Low jitter = stable service.
throughput Ability to handle sustained load without degradation.
recovery_behavior Speed of returning to healthy state after an error period.
performance_trend Tracks whether a tool's reliability is improving, stable, or declining over recent history.
Rate Limits
Plan Monthly calls Req/sec Cost
Free 10,000 / month 20 req/s $0
High Volume Unlimited 100 req/s $499 / month

Monthly quotas reset on your billing cycle date. If you exceed the Free tier limit, you'll get a 429 until the next reset. Upgrade any time from the Developer Portal.

There are no per-query charges on either plan. No surprise invoices.

Rate limit response headers

X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9847
X-RateLimit-Reset: 1743638400
Errors

All error responses follow the same JSON format:

{
  "success": false,
  "error": "ERROR_CODE",
  "message": "Human-readable description of the problem"
}
Status Error code Cause
400 INVALID_PARAMS Missing or invalid query parameters
401 MISSING_API_KEY No API key in the request
401 INVALID_API_KEY Key does not exist or has been revoked
404 TOOL_NOT_FOUND No tool matches the provided ID or slug
429 RATE_LIMIT_EXCEEDED Monthly call quota exhausted. Resets on billing date.
500 INTERNAL_ERROR Unexpected server error. Retry with exponential backoff.

Questions? Email info@kerq.dev — we read everything.

📡
Report Endpoint

After each tool call in your agent, report the result to Kerq. Your data improves trust scores for every developer on the platform — the more real-world reports Kerq receives for a tool, the more accurate its score becomes.

Base URL for telemetry: https://kerq.dev/api/v1/report

POST /v1/report Auth required

Report the outcome of a single tool call. Send the tool's ID, the HTTP status code it returned, and how long the call took. Kerq uses this data to supplement automated probes with real-world usage patterns at scale.

Request body

Field Type Description
tool_id string | integer required Tool slug (e.g. github-mcp-server) or numeric ID
status_code integer required HTTP status code returned by the tool (100–599). Use 200299 for success, 5xx for server errors.
latency_ms integer required Round-trip latency in milliseconds (0–300000). Measure from the moment you send the request to when you receive the response.
timestamp string (ISO 8601) optional When the tool call occurred. Defaults to server receipt time. Must be within ±1 hour of server time.

Example request body

{
  "tool_id": "github-mcp-server",
  "status_code": 200,
  "latency_ms": 145,
  "timestamp": "2026-04-07T19:14:00.000Z"
}

Example success response (HTTP 200)

{
  "success": true,
  "message": "Telemetry recorded",
  "is_outlier": false
}

Response codes

Status Meaning
200 Report accepted. is_outlier: true flags reports with unusual values that may indicate transient issues.
400 Invalid payload — missing required fields or values out of range.
401 Missing or invalid API key.
429 Rate limit exceeded (1 000 reports/hour per key). Check Retry-After header.

curl example

POST https://kerq.dev/api/v1/report

curl -s -X POST https://kerq.dev/api/v1/report \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tool_id":"github-mcp-server","status_code":200,"latency_ms":145}'

JavaScript (fetch)

const t0 = Date.now();
const response = await fetch(toolEndpoint, { method: 'POST', body: payload });
const latency_ms = Date.now() - t0;

// Fire-and-forget — don't await in your critical path
fetch('https://kerq.dev/api/v1/report', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.KERQ_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    tool_id: 'github-mcp-server',
    status_code: response.status,
    latency_ms
  })
}).catch(() => {}); // never let telemetry throw

Python (requests)

import time, requests, os

t0 = time.monotonic()
resp = requests.post(tool_endpoint, json=payload, timeout=10)
latency_ms = int((time.monotonic() - t0) * 1000)

# Report to Kerq (best-effort, non-blocking in production)
try:
    requests.post(
        "https://kerq.dev/api/v1/report",
        json={
            "tool_id": "github-mcp-server",
            "status_code": resp.status_code,
            "latency_ms": latency_ms
        },
        headers={"Authorization": f"Bearer {os.environ['KERQ_API_KEY']}"},
        timeout=2
    )
except Exception:
    pass  # telemetry is optional — never block on it
Best practice: Telemetry reports should be fire-and-forget. Never await them in your agent's critical path. Wrap in try/catch and swallow errors — a failed report should never cause your agent to fail.
🛠
SDK Helper

Skip the manual fetch boilerplate. Use the Kerq SDK helper to report telemetry in one line. It works in Node.js, Deno, and the browser. It never throws — telemetry failures are silently swallowed so your agent keeps running.

Load via script tag (browser)

<script src="https://kerq.dev/kerq-sdk.js"></script>
<script>
  const kerq = window.kerq.createClient('YOUR_API_KEY');
</script>

Node.js (CommonJS)

const { createClient } = require('./kerq-sdk');
const kerq = createClient(process.env.KERQ_API_KEY);

Basic usage — plain data

// After a tool call completes, report it:
await kerq.reportTelemetry('github-mcp-server', {
  status_code: 200,
  latency_ms: 145
});

// With an explicit timestamp:
await kerq.reportTelemetry('slack-mcp', {
  status_code: 503,
  latency_ms: 4200,
  timestamp: new Date().toISOString()
});

With a fetch Response object

const t0 = Date.now();
const response = await fetch(toolEndpointUrl, options);
const latency_ms = Date.now() - t0;

// Pass the Response directly — SDK extracts status automatically
kerq.reportTelemetry('my-mcp-tool', response, { latency_ms }); // fire-and-forget

Express.js middleware pattern

// middleware/kerq-telemetry.js
const { createClient } = require('./kerq-sdk');
const kerq = createClient(process.env.KERQ_API_KEY);

function kerqTelemetry(toolId) {
  return async function(req, res, next) {
    const t0 = Date.now();
    res.on('finish', () => {
      kerq.reportTelemetry(toolId, {
        status_code: res.statusCode,
        latency_ms: Date.now() - t0
      }); // fire-and-forget
    });
    next();
  };
}

// Usage:
app.post('/call-github-tool', kerqTelemetry('github-mcp-server'), handler);

Axios interceptor pattern

const axios = require('axios');
const { createClient } = require('./kerq-sdk');
const kerq = createClient(process.env.KERQ_API_KEY);

axios.interceptors.request.use(config => {
  config.metadata = { t0: Date.now() };
  return config;
});

axios.interceptors.response.use(
  response => {
    const latency_ms = Date.now() - response.config.metadata.t0;
    kerq.reportTelemetry(response.config.headers['X-Kerq-Tool-Id'], {
      status_code: response.status,
      latency_ms
    });
    return response;
  },
  error => {
    if (error.response) {
      const latency_ms = Date.now() - error.config.metadata.t0;
      kerq.reportTelemetry(error.config.headers['X-Kerq-Tool-Id'], {
        status_code: error.response.status,
        latency_ms
      });
    }
    return Promise.reject(error);
  }
);
TypeScript users: reportTelemetry(toolId, response, opts?) returns Promise<boolean>. Download kerq-sdk.js and add a .d.ts file, or inline the types from the source comments.
🔬
How Kerq Scores Work

Every Kerq trust score is built from two independent data sources: automated probes run by Kerq's infrastructure, and real-world telemetry contributed by the developer community. Both feed into the same 7 trust metrics — giving each score both a rigorous baseline and production-scale signal.

🤖
Automated Probes

Kerq continuously monitors every registered tool's endpoint, measuring availability, performance, and error behavior on a rolling schedule. The same test runs the same way for every tool, making scores comparable across the entire registry.

👥
Community Telemetry

When developers report tool call outcomes via the Telemetry API, Kerq aggregates that data as a second scoring signal. Probes test from Kerq's infrastructure — telemetry captures real-world behavior across diverse callers, networks, and load patterns.

The weighting, aggregation methodology, and blending logic between these data sources is proprietary.

You can see the full 7-metric breakdown for any tool in the Score Schema section.

📡
Start contributing telemetry

After each tool call in your agent, report the result using the SDK helper or the REST endpoint. Takes one line of code. Your data makes scores more accurate for everyone.

See the telemetry quick-start →
Performance

Kerq is designed to sit inside your agent's execution loop without adding noticeable latency. Trust score lookups are fast enough that your agent won't notice them.

Metric Value Notes
Average response time <30ms Single trust score lookup (p50)
P95 response time <35ms 95th percentile across all requests
Concurrent load (50 req) <100ms 50 simultaneous requests in parallel

/api/tools/:id — Returns the trust score for a tool. Best choice for standard trust verification in agent workflows.

/api/tools/:id/score — Returns a freshly measured trust score. Use this when you need an up-to-date measurement.

Sub-30ms — faster than a DNS resolution

At 27ms average, a Kerq lookup adds less latency than resolving a hostname. Built for real-time agent workflows where every millisecond counts.