Skip to content

What is not inferred or guaranteed

Chizumulu API is a careful reader of public posts, not an oracle. This page lists what it deliberately does not do.

  • It does not guess. A score, team, minute, status, date or competition that the post does not state is null, not a plausible value.
  • It does not correct. Misspelled names, wrong dates and contradictory numbers in a post are returned as written.
  • It does not normalize. Dates stay text (dateText), minutes stay text (minuteText), names keep the source’s capitalization and punctuation.
  • structured does not link posts together. matches[].index is only a reference inside one observation, so two posts about the same match are two separate structured results. Linking is a separate, derived layer: derived matches group observations that clearly describe the same match under an API-assigned matchId, conservatively, so one real match can occasionally appear as two.
  • It does not compute. No standings from results, no season statistics, no “current score” from the newest goal post.
  • It does not read images in general. Retained images are not served. A retained image may be read for one kind of data, a league standings table, and nothing else in an image is interpreted: fixture or result graphics, lineups and photos are not read, so a fact that exists only there is absent. An image-only post (no caption) has no text and no structured result (method: "none"); a standings table read from its image is returned separately as attachmentFacts. See facts read from an image.
  • It does not expand hashtags into names. See competition text vs code.
  • Completeness and timing. The API reflects what the collector observed and when. Posts can be missing, late, duplicated or edited upstream. A quiet feed is normal (see Status).
  • Availability. No uptime target is promised. Already stored data stays readable when collection has a problem.
  • Rate limits. None are documented and none are guaranteed either way. Be considerate: cache what you can and poll /v1/feed at a modest interval.
  • Accuracy of derived data. Structured data and the Korean translation are produced by a rule-based parser and, when needed, a language model, with checks that every extracted string and number appears in the source text. They can still be incomplete or wrong. The original text is always returned so you can verify.
  • Stability of free text. processing.error, korean.text and the exact wording of error messages are not stable contracts. Field names, enum values and the response shapes in the OpenAPI document are the contract; ignore fields you do not know.
  • The video routes. /v1/videos and /v1/videos/latest pass through one public YouTube channel feed (a fan channel, not NRFA): latest 15 uploads only, refreshed by YouTube about every 15 minutes and cached here for about 10, with a best-effort stale fallback. Nothing about them is derived, stored or history-tracked.
  • Source formats. NRFA can change how it writes posts at any time. The API is built for that (unknown stays null), but new formats may be read less completely at first.
  • A post can announce a result without the teams, or a time without a venue. You get exactly that, with null for the rest.
  • A post can carry several matches, or none. Both are valid.
  • The same message can be edited. Use history to see every version the collector observed.
  • sourceTimestamp is what the source said, normalized to UTC. It is not guaranteed to be plausible or in order, which is why ordering never trusts it alone.
  • CORS: read-only and open. Public GET responses under /v1/*, /openapi.json and /llms.txt carry Access-Control-Allow-Origin: *, so a web page on any origin can read them. OPTIONS preflights on the public read routes are answered with Access-Control-Allow-Methods: GET, OPTIONS (nothing else is allowed, no custom request headers, and credentials are never allowed). The internal write routes and the site pages send no CORS headers.
  • Errors. Errors are a JSON object {"error":"..."} with status 400 (invalid cursor, since, after or rawUpdateId), 404 (unknown route or message, or nothing stored yet for /v1/latest) or 500 (internal error).
  • Read-only. Only GET is defined on the public routes.