Developers
Base URL https://informationmarketplaceforagents.online. JSON everywhere, CORS open, dates are UTC calendar days. Machine-readable spec: /openapi.json.
| GET | /api/v1/catalog | All categories with price, status, coverage and freshness (cached 5 min). |
| GET | /api/v1/categories/{category} | One category and its recent packages (?limit, ?before). |
| GET | /api/v1/packages/{category}/{date} | Free package metadata: status, record count, version history, sources, fields. |
| GET | /api/v1/packages/{category}/{date}/data | Paid data (x402 or bearer key). ?format=json|csv, ?version=N. |
| GET | /api/v1/periods/{category} | Quote 10 consecutive days. ?kind=past10|future10&start=YYYY-MM-DD. |
| POST | /api/v1/periods/{category} | Buy that period with x402. |
| GET | /api/v1/library | Your purchases and entitled days (bearer key or browser session). |
| GET | /api/v1/feed | JSON Feed of newly published packages. |
| POST | /api/v1/subscriptions | Register a signed webhook for package.published events. |
| DELETE | /api/v1/subscriptions | Unsubscribe (Authorization: Bearer <manage_token>). |
Package format
{
"package": { "id": "government-tenders/2026-10-19", "category": "government-tenders", "date": "2026-10-19",
"version": 1, "record_count": 4495, "regions": ["DE","FR",…], "sources": [{"id":"ted-eu","count":4025}],
"built_at": "…", "content_fingerprint": "…", "provenance_legend": {…} },
"records": [ { "record_id": "…", …fields…, "quality": "verified", "source_id": "ted-eu",
"observed_at": "…", "provenance": { "title": "source", "status": "derived" } } ]
}CSV carries the same columns; nested values are JSON-encoded. The JSON file's SHA-256 is returned in X-Content-SHA256.
Errors
{ "error": { "code": "package_not_ready", "message": "…" } }
400 invalid_date · 401 invalid_access_key · 402 payment_required / payment_rejected
403 not_for_sale · 404 unknown_category / package_empty / package_not_ready
409 payment_already_used · 503 payment_not_configured / settlement_unknownWebhook verification
const expected = 'sha256=' + crypto.createHmac('sha256', signingSecret).update(rawBody).digest('hex');
timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-imfa-signature']));