Two endpoints sets, one dataset. REST for any client, MCP for agent runtimes. Both are anonymous by default and both return identical fields for identical filters.
`GET /v1/content/{trend_id}` returns the sanitised markdown the pipeline actually stored. A trend with nothing retained returns `documents: []` and `content_retained: false` — never invented content.
Detail and content endpoints are keyed by trend_id. Discovery is always a two-step flow: page or search the trend pool first, read trend_id from a record, then fetch the full record or its retained bodies.
01
GET /v1/trends/recent?hours=24&limit=5
Or filter by category, velocity, min_impact, and page. Each record in the trends array carries trend_id.
02
GET /v1/search?q=on-device%20inference&limit=10
The alternative entry point when you already know what you are looking for. Records carry the same trend_id.
03
GET /v1/trends/{trend_id}
Full record plus source lineage: citations, canonical URLs, publishers, and the real fetch method.
04
GET /v1/content/{trend_id}
Retained cleaned bodies for the same id, in markdown, with content_retained reporting whether anything survived.
Every trend_id is a stable UUID. The same value works on REST and on MCP (`get_trend_detail` / `get_trend_content`), so an agent can discover over one transport and fetch over the other.
REST API
Eight endpoints, one record shape
All eight are GET, all eight are anonymous, and all eight return the same schema_version. Any filter accepted by the browse surface is accepted by search.
MCP clients call tools with JSON arguments and read resources by URI. The filters, the fields, and the access rules are the same as the REST surface — the surfaces are contract-tested for parity.
POST https://mcp.genticsprint.com/mcp · Content-Type: application/json
Access and auth
Anonymous is the default, not a trial
An unregistered caller receives the same fields, the same provenance, and the same retained bodies as a registered one. Registration changes quota and operational tooling, never the content shape.
Per-minute ceiling for the caller’s resolved tier. Omitted when the tier has no ceiling.
X-RateLimit-Remaining
Requests left in the current minute. Omitted when the tier has no ceiling.
X-RateLimit-Tier
Resolved tier for this request: public, registered, or enterprise.
Retry-After
Seconds to wait — only present on a 429 response.
Higher ceilings are configured per account rather than sold as a separate content shape, so a plan change never changes the fields a client reads.
Schemas
The machine-readable contract
The OpenAPI 3.1 document is the normative description of every request and response. Where this page and the document disagree, the document is correct and this page is a bug.
Includes every path, parameter bound, response schema, error response, and the rate-limit header definitions. Canonical copy also published at https://www.genticsprint.com/docs/openapi.json.
Versioning policy
Additive-first: new fields arrive with the schema_version bumped.
Removals are deprecation-gated, never silent.
Responses carry schema_version so a client can assert what it is reading.
Error responses
Status
Meaning
400
Invalid filter value — for example `hours=0` or `hours` above the 90-day cap.
404
Trend not found, or the endpoint path does not exist.
429
Tier ceiling reached. Read `Retry-After` before retrying.
503
Database temporarily unavailable. Retryable.
A 401 or 403 is not in the table above on purpose. Those statuses are produced by the platform in front of the application, not by the API itself, so they are not part of the documented contract. Treat them as a transient availability condition and retry.
Examples
Run it instead of reading it
The test ground builds the same bounded requests this page documents and shows you the raw response, so you can confirm the contract against the live surface before writing any client code.
Browser test ground
Pick an endpoint, set the filters within their published bounds, and send the request. No key required and no state stored.
Python, JavaScript, and cURL snippets appear next to every endpoint above. They are generated from the endpoint catalogue, so they stay valid as the contract evolves.
https://api.genticsprint.com
Build on the same contract
Every field on this page comes from the live read surface, and every example is runnable as written. Register when you want higher throughput ceilings, per-account usage, and webhooks — never to unlock a different content shape.