CorrectFeed API
Validate and inspect RSS/Atom feeds, XML feeds, and OPML subscription lists using simple HTTP endpoints. You can self-host the documentation via the OpenAPI spec or start with the examples below.
Base URL: https://api.correctfeed.com
Download OpenAPI 3.0 Spec Open Fix Tool
Quickstart
Quickstart (cURL)
curl -X POST https://api.correctfeed.com/api/validate-feed \
-H "Authorization: Bearer <API_KEY>" \
+ -H "Content-Type: application/xml" \
--data-binary @feed.xml JavaScript (fetch)
const body = /* string or Buffer of file contents */ '';
const res = await fetch('https://api.correctfeed.com/api/validate-feed', {
method: 'POST',
headers: {
'Content-Type': 'application/xml',
'Authorization': 'Bearer <API_KEY>',
},
body,
});
const data = await res.json(); Python (requests)
import requests
headers = {
'Content-Type': 'application/xml',
'Authorization': 'Bearer <API_KEY>',
}
data = open('feed.xml','rb').read()
r = requests.post('https://api.correctfeed.com/api/validate-feed', data=data, headers=headers)
print(r.json()) Common behavior
- Free tier rate limit: 5 requests/minute per IP, enforced via Durable Object.
- API keys unlock plan-based limits and bulk validation.
- All responses include
X-Request-Idfor support and debugging. - Validation failures return HTTP
422withissues[]andmeta. - Rate limit breaches return HTTP
429withRetry-AfterandX-RateLimit-Remaining. - Payloads are processed in memory; only metadata is retained for usage and history.
POST /api/validate-feed
Validate a single RSS/Atom feed or standalone XML feed. Supports raw bodies, JSON, or multipart uploads.
| Input | Description |
|---|---|
text/xml / application/xml | Raw feed XML in the request body. |
text/plain | Raw feed XML sent as plain text. |
application/json | JSON with feed, text, or payload fields. |
multipart/form-data | Upload a file using file, feed, text, body, or payload. |
curl -X POST https://api.correctfeed.com/api/validate-feed \
-H "Content-Type: application/xml" \
--data-binary @feed.xml Example 200 response
{
"ok": true,
"issues": [],
"meta": {
"bytes": 1428,
"entryCount": 12,
"atom": false,
"rules": [],
"validatorType": "rss",
"timestamp": "2025-01-01T00:00:00.000Z",
"parserIssues": 0
}
} Example 422 response
{
"ok": false,
"issues": [
{
"code": "RSS.ITEM.TITLE_MISSING",
"level": "error",
"message": "Item is missing <title>.",
"path": "/rss/channel/item[2]/title",
"validatorType": "rss"
}
],
"meta": {
"bytes": 1428,
"entryCount": 12,
"atom": false,
"rules": [],
"validatorType": "rss",
"timestamp": "2025-01-01T00:00:00.000Z",
"parserIssues": 0
}
} POST /api/autofix-feed
Automatically fix common RSS/Atom/XML issues and return the corrected XML. This endpoint accepts text/xml,
application/xml, or text/plain. Optionally pass a filename via ?filename= or the
x-correctfeed-filename header for file history.
curl -X POST https://api.correctfeed.com/api/autofix-feed \
-H "Content-Type: application/xml" \
--data-binary @feed.xml POST /api/validate-opml
Validate OPML subscription lists. Supports the same input formats as /api/validate-feed.
curl -X POST https://api.correctfeed.com/api/validate-opml \
-H "Content-Type: application/xml" \
--data-binary @subscriptions.opml POST /api/autofix-opml
Automatically fix common OPML issues and return a normalized outline. Accepts text/xml,
application/xml, or text/plain.
curl -X POST https://api.correctfeed.com/api/autofix-opml \
-H "Content-Type: application/xml" \
--data-binary @subscriptions.opml POST /api/validate-bulk
Validate multiple feeds and OPML files by uploading a ZIP archive. This endpoint requires an API key and a plan with bulk validation enabled.
- ZIP must contain
.xml,.rss,.atom, or.opmlfiles. - Up to 50 files and 5 MiB total uncompressed size per archive.
- Authentication via
Authorization: Bearer <API_KEY>orx-correctfeed-key.
zip feeds.zip a.xml b.rss c.opml
curl -X POST https://api.correctfeed.com/api/validate-bulk \
-H "Content-Type: application/zip" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-binary @feeds.zip Error reference
| Status | Meaning | Notes |
|---|---|---|
200 | Validation succeeded | Warnings may still be present. |
401 | Missing API key | Bulk validation requires authentication. |
403 | Bulk not enabled | Upgrade your plan to enable bulk validation. |
413 | Payload too large | Request exceeds size limits. |
415 | Unsupported content type | Use XML, plain text, JSON, or ZIP. |
422 | Validation failed | See issues[] and meta for details. |
429 | Rate limit reached | Respect Retry-After before retrying. |
500 | Internal error | Retry and include X-Request-Id if reporting. |
Next steps
For higher limits, API keys, and usage tracking, visit pricing or contact us via the contact form.
OpenAPI (machine-readable): /docs/openapi.yaml