REST API endpoint
GET /v1/proofreading
Up to 100 currently visible proofreading suggestions from the most recently checked articles of one tracker.
Request
GET
https://api.nowmetrix.com/v1/proofreading?site=TRACKER_ID&limit=50
Use this endpoint to retrieve the latest current proofreading suggestions for an authorized tracker. Results marked as corrected or covered by an active ignore rule are excluded.
Authentication
Requires an API key in the Authorization header: Authorization: Bearer nm_YOUR_KEY. The key must have access to the requested tracker ID.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
site |
string |
required | NowMetrix tracking ID. The API key must have access to this tracker. Do not pass the publication domain. |
limit |
integer |
optional | Maximum number of suggestions. Defaults to 50 and is capped at 100. |
cURL example
curl -H "Authorization: Bearer nm_YOUR_KEY" \
"https://api.nowmetrix.com/v1/proofreading?site=TRACKER_ID&limit=50"
Example response
{
"site": "TRACKER_ID",
"updated_at": "2026-01-15T09:30:00+00:00",
"limit": 50,
"count": 1,
"issues": [
{
"id": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"checked_at": "2026-01-15T09:25:00+00:00",
"article": {
"title": "Example article",
"url": "https://www.example.com/news/example-article"
},
"language": {
"code": "en",
"name": "English"
},
"category": {
"code": "consistency",
"label": "Article inconsistency"
},
"location": {
"code": "body",
"label": "Body"
},
"original": "Northwind Lab",
"original_occurrence": 1,
"correction": "Northwind Labs",
"context": "The announcement was published by Northwind Lab on Monday.",
"explanation": "The organization is named Northwind Labs elsewhere in the same article.",
"confidence": "high"
}
]
}
Response fields
| Field | Type | Description |
|---|---|---|
site |
string |
Tracking ID used for the request. |
updated_at |
string |
UTC timestamp for when the payload was generated. |
limit |
integer |
Effective result limit after validation and capping. |
count |
integer |
Number of visible suggestions returned. |
issues[] |
array<object> |
Visible suggestions ordered by checked_at descending. |
issues[].id |
string |
Opaque stable identifier for this suggestion occurrence. |
issues[].checked_at |
string |
UTC timestamp of the article check that produced the current suggestion. |
issues[].article |
object |
Article title and full URL. Internal article IDs are not exposed. |
issues[].language |
object |
Detected language code and display name. |
issues[].category |
object |
Machine-readable category code and localized label. The consistency code identifies article-internal contradictions in names or factual details such as numbers, dates, times, ages, locations, and roles. |
issues[].location |
object |
Article section code and localized label. |
issues[].original |
string |
Original text identified by proofreading. |
issues[].original_occurrence |
integer|null |
1-based occurrence of original within context. Legacy results can be null when repeated text cannot be located unambiguously. |
issues[].correction |
string |
Suggested correction. |
issues[].context |
string |
Normalized and length-limited article context. |
issues[].explanation |
string |
Explanation for the suggestion. |
issues[].confidence |
string |
Confidence level accepted by the proofreading pipeline. |
Freshness and caching
Responses are microcached per tracker and limit for 30 seconds. The response includes X-NowMetrix-Microcache with HIT or MISS. checked_at is the article check time; the endpoint is not an append-only history of first detections.
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | site_required |
The site query parameter is missing. |
| 401 | missing_token |
The Authorization header is missing. |
| 401 | invalid_token |
The token is invalid or revoked. |
| 403 | site_not_authorized |
The API key has no access to this tracker. |
| 429 | rate_limit_exceeded |
The rate limit has been exceeded. |
| 503 | redis_unavailable |
The realtime backend is temporarily unavailable. |
| 409 | proofreading_not_enabled |
Proofreading is not enabled for the requested tracker. |
| 500 | encoding_failed |
The response could not be encoded. |
| 503 | database_unavailable |
The proofreading database is temporarily unavailable. |
| 503 | proofreading_unavailable |
The proofreading feed could not be generated. |
{
"error": {
"code": "proofreading_not_enabled",
"message": "Proofreading is not enabled for this tracker."
}
}