Documentation

The read surface, documented as it behaves.

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.

REST base URL
https://api.genticsprint.com
MCP endpoint
https://mcp.genticsprint.com/mcp
Schema version
1.0
Access
anonymous · throttled per IP

Quick start

Three calls to learn the whole shape

Every response carries a schema_version, and every list response is a bounded page. There is nothing to authenticate and nothing to install.

Your first call

No key is required for the anonymous read surface. Start with recent trends and page through with `limit` and `page`.

/v1/trends/recent?hours=24&limit=5

/v1/trends/recent?hours=24&limit=5

curl -sS "https://api.genticsprint.com/v1/trends/recent?hours=24&limit=5" \
  -H "Accept: application/json"

Read the cleaned article bodies

`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.

/v1/content/8f2c0d1e-4a7b-4c9d-9f31-2b7a5c4e6d10

/v1/content/8f2c0d1e-4a7b-4c9d-9f31-2b7a5c4e6d10

curl -sS "https://api.genticsprint.com/v1/content/8f2c0d1e-4a7b-4c9d-9f31-2b7a5c4e6d10" \
  -H "Accept: application/json"

Search with filters

Search accepts the same category, time-window, impact, and quality filters as the recent-trends surface, so a query and a browse are the same shape.

/v1/search?q=on-device%20inference&limit=10

/v1/search?q=on-device%20inference&limit=10

curl -sS "https://api.genticsprint.com/v1/search?q=on-device%20inference&limit=10" \
  -H "Accept: application/json"

Trend discovery

Find a trend_id, then fetch it

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.

  1. 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.

  2. 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.

  3. 03

    GET /v1/trends/{trend_id}

    Full record plus source lineage: citations, canonical URLs, publishers, and the real fetch method.

  4. 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.

MethodPathParametersReturns
GET/v1/trends/recentcategory, hours, velocity, min_impact, min_quality, page, limitFiltered, paginated trend summaries ordered by business impact then recency.
GET/v1/trends/{trend_id}trend_id (path)Full trend record plus source lineage: canonical URL, publisher, author, word count, real fetch method.
GET/v1/content/{trend_id}trend_id (path), limitThe sanitised, PII-redacted article bodies exactly as the fetch stage produced them. Same shape for anonymous and registered agents.
GET/v1/searchq (required), category, hours, limitKeyword search across the trend pool with the same filters as the recent-trends surface.
GET/v1/categoriesnoneEvery category with trend counts and average impact scores.
GET/v1/sources/{domain}/trendingdomain (path), limitTrends originating from one publisher domain, with that domain’s quality score.
GET/v1/benefitsnoneAnonymous aggregate benefit metrics. Unmeasured values are null, never a fabricated zero.
GET/v1/statsnoneTotal trends, freshness, and source diversity for the platform.

Endpoint reference

Each block below uses the real sample path, so the snippet is one you can run unchanged against the base URL above.

GET

/v1/trends/{trend_id}

no key required

Full trend record plus source lineage: canonical URL, publisher, author, word count, real fetch method.

parameters: trend_id (path) · sample: /v1/trends/8f2c0d1e-4a7b-4c9d-9f31-2b7a5c4e6d10

Trend detail

curl -sS "https://api.genticsprint.com/v1/trends/8f2c0d1e-4a7b-4c9d-9f31-2b7a5c4e6d10" \
  -H "Accept: application/json"
GET

/v1/content/{trend_id}

no key required

The sanitised, PII-redacted article bodies exactly as the fetch stage produced them. Same shape for anonymous and registered agents.

parameters: trend_id (path), limit · sample: /v1/content/8f2c0d1e-4a7b-4c9d-9f31-2b7a5c4e6d10

Retained cleaned bodies

curl -sS "https://api.genticsprint.com/v1/content/8f2c0d1e-4a7b-4c9d-9f31-2b7a5c4e6d10" \
  -H "Accept: application/json"
GET

/v1/categories

no key required

Every category with trend counts and average impact scores.

parameters: none · sample: /v1/categories

Categories

curl -sS "https://api.genticsprint.com/v1/categories" \
  -H "Accept: application/json"
GET

/v1/sources/{domain}/trending

no key required

Trends originating from one publisher domain, with that domain’s quality score.

parameters: domain (path), limit · sample: /v1/sources/techcrunch.com/trending?limit=10

Domain trending

curl -sS "https://api.genticsprint.com/v1/sources/techcrunch.com/trending?limit=10" \
  -H "Accept: application/json"
GET

/v1/benefits

no key required

Anonymous aggregate benefit metrics. Unmeasured values are null, never a fabricated zero.

parameters: none · sample: /v1/benefits

Platform benefits

curl -sS "https://api.genticsprint.com/v1/benefits" \
  -H "Accept: application/json"
GET

/v1/stats

no key required

Total trends, freshness, and source diversity for the platform.

parameters: none · sample: /v1/stats

Platform stats

curl -sS "https://api.genticsprint.com/v1/stats" \
  -H "Accept: application/json"

MCP server

The same record over streamable HTTP

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.

ToolArgumentsRequired
get_recent_trends{ category, hours, velocity, min_impact, min_quality, page, limit }
search_trends{ query, category, time_window, min_impact, min_quality, limit }query
get_trend_detail{ trend_id }trend_id
get_trend_content{ trend_id, limit }trend_id
list_categories{}
get_source_trends{ domain, limit }domain

Resources

Six URI-addressed reads for clients that prefer resources to tool calls.

  • trends://recent
  • trends://{trend_id}/full
  • trends://{trend_id}/content
  • trends://categories
  • trends://stats
  • trends://benefits

JSON-RPC and the equivalent REST call

The MCP tab shows the exact tools/call envelope.

curl -sS "https://api.genticsprint.com/v1/trends/recent?hours=24&category=tech&limit=5" \
  -H "Accept: application/json"

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.

TierWhoShapeThrottled
publicAnonymous callersFull read surface: trends, detail, provenance, retained cleaned bodies, benefits, stats.yes
registeredDevelopers with an API keyThe same content shape with higher throughput ceilings, per-account usage analytics, and webhooks. Pagination bounds are identical for every tier.yes
enterpriseBulk and partner integrationsReserved ceilings configured by environment.yes

Rate-limit state is on every response. Back off using the reported remaining value rather than waiting for a rejection.

Rate-limit headers

HeaderMeaning
X-RateLimit-LimitPer-minute ceiling for the caller’s resolved tier. Omitted when the tier has no ceiling.
X-RateLimit-RemainingRequests left in the current minute. Omitted when the tier has no ceiling.
X-RateLimit-TierResolved tier for this request: public, registered, or enterprise.
Retry-AfterSeconds 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.

OpenAPI 3.1 document

/docs/openapi.json

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

StatusMeaning
400Invalid filter value — for example `hours=0` or `hours` above the 90-day cap.
404Trend not found, or the endpoint path does not exist.
429Tier ceiling reached. Read `Retry-After` before retrying.
503Database 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.

Server-side integrations

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.