Programmatic access to your reputation data, mentions, alerts, and scores.
Base URL: https://app.reputory.ai/api/v1
All API requests require a Bearer token in the Authorization header. Generate API keys from Settings → API Keys.
Header format
Authorization: Bearer rep_a1b2c3d4e5f6...
The API is rate-limited to 100 requests per minute per IP address.
Rate limit headers are included in every response:
X-RateLimit-Limit — Max requests per windowX-RateLimit-Remaining — Requests remainingX-RateLimit-Reset — Unix timestamp when the window resetsExceeding the limit returns 429 Too Many Requests.
All endpoints return a consistent JSON envelope:
{
"data": [ ... ],
"meta": {
"total": 142,
"limit": 50,
"offset": 0,
"page": 1
}
}Error responses use: { "error": "message" }
/api/v1/mentionsRetrieve paginated brand mentions across all monitored sources.
| Name | Type | Description |
|---|---|---|
| limit | number | Results per page (1-100, default 50) |
| offset | number | Number of results to skip (default 0) |
| sentiment | string | Filter: POSITIVE, NEGATIVE, NEUTRAL, or MIXED |
| source | string | Filter: NEWS, SOCIAL, REVIEW, REDDIT, HACKERNEWS, SERP |
{
"data": [
{
"id": "clx...",
"title": "Company mentioned in TechCrunch",
"url": "https://techcrunch.com/...",
"source": "NEWS",
"sentiment": "POSITIVE",
"author": "John Doe",
"reach": 45000,
"publishedAt": "2025-01-15T09:30:00.000Z",
"keyword": "Acme Corp"
}
],
"meta": { "total": 142, "limit": 50, "offset": 0, "page": 1 }
}/api/v1/scoreGet the current reputation score and up to 30 historical data points.
{
"data": {
"current": {
"score": 78,
"sentiment": 82,
"visibility": 71,
"consistency": 80,
"calculatedAt": "2025-01-15T00:00:00.000Z"
},
"history": [
{ "score": 75, "sentiment": 80, "visibility": 68, "consistency": 77, "calculatedAt": "2025-01-01T00:00:00.000Z" }
]
},
"meta": { "total": 15 }
}/api/v1/alertsRetrieve recent reputation alerts and threat notifications.
| Name | Type | Description |
|---|---|---|
| limit | number | Results per page (1-100, default 50) |
| offset | number | Number of results to skip (default 0) |
{
"data": [
{
"id": "clx...",
"type": "SPIKE",
"severity": "HIGH",
"title": "Negative mention spike detected",
"message": "15 negative mentions in the last hour",
"acknowledged": false,
"createdAt": "2025-01-15T10:00:00.000Z"
}
],
"meta": { "total": 8, "limit": 50, "offset": 0, "page": 1 }
}/api/v1/keywordsList all tracked keywords and brand terms.
{
"data": [
{
"id": "clx...",
"term": "Acme Corp",
"type": "BRAND",
"active": true,
"createdAt": "2025-01-01T00:00:00.000Z"
}
],
"meta": { "total": 5 }
}cURL
curl -H "Authorization: Bearer rep_a1b2c3d4e5f67890abcdef1234567890" \ "https://app.reputory.ai/api/v1/mentions?limit=10&sentiment=NEGATIVE"
JavaScript (fetch)
const response = await fetch(
"https://app.reputory.ai/api/v1/mentions?limit=10",
{
headers: {
"Authorization": "Bearer rep_a1b2c3d4e5f67890abcdef1234567890",
},
}
);
const { data, meta } = await response.json();
console.log(`Found ${meta.total} mentions`);
data.forEach((m) => console.log(m.title, m.sentiment));Python (requests)
import requests
headers = {"Authorization": "Bearer rep_a1b2c3d4e5f67890abcdef1234567890"}
r = requests.get("https://app.reputory.ai/api/v1/score", headers=headers)
data = r.json()
print(f"Current score: {data['data']['current']['score']}")| Code | Description |
|---|---|
| 401 | Missing or invalid API key |
| 403 | API key deactivated or expired |
| 429 | Rate limit exceeded (100 req/min) |
| 500 | Internal server error |