{"apiVersion":"2026-03-08","name":"Opstt Public Catalog API","description":"Read-only machine-readable access to published tools, taxonomies, and directory updates for external AI systems and agents.","baseUrl":"https://opstt.com","defaultLocale":"en","locales":["en","zh","es","pt","de","fr","it","ja","id","ms","th","vi","tl"],"docs":{"openapi":"https://opstt.com/openapi.json","llms":"https://opstt.com/llms.txt","developers":"https://opstt.com/developers","agentManifest":"https://opstt.com/agent.json","wellKnownAgentManifest":"https://opstt.com/.well-known/agent.json","updatesFeed":"https://opstt.com/feed.json?locale=en&limit=20"},"endpoints":{"self":"https://opstt.com/api/public","items":"https://opstt.com/api/public/items?locale=en&page=1&limit=20","itemsFiltered":"https://opstt.com/api/public/items?locale=en&page=1&limit=20&featured=true&updated_after=2026-01-01T00:00:00.000Z","item":"https://opstt.com/api/public/items/{slug}?locale=en","taxonomies":"https://opstt.com/api/public/taxonomies?type=category&status=published","updates":"https://opstt.com/api/public/updates?locale=en&limit=20","feed":"https://opstt.com/feed.json?locale=en&limit=20","manifest":"https://opstt.com/agent.json"},"policies":{"cache":{"cacheControl":"public, max-age=300, s-maxage=3600, stale-while-revalidate=86400","browserMaxAgeSeconds":300,"sharedMaxAgeSeconds":3600,"staleWhileRevalidateSeconds":86400,"xRobotsTag":"noindex, follow","guidance":"Respect response Cache-Control headers and use /feed.json or /api/public/updates as the preferred recrawl trigger surfaces."},"crawl":{"bootstrapOrder":["Read /agent.json or /.well-known/agent.json for discovery metadata.","Load /openapi.json if your client supports typed planning or schema validation.","Start from /api/public for a stable endpoint map and policy surface.","Use /api/public/items for summaries and hydrate individual records from /api/public/items/{slug}.","Use /feed.json or /api/public/updates to detect change events before recrawling item detail."],"recrawlTriggers":["Use freshness.lastChangedAt as the primary recrawl checkpoint for item detail.","Prefer /feed.json and /api/public/updates when polling for directory changes.","Refresh an item again when reviewDueAt is reached or when evidence basis changes materially."],"citationRules":["Prefer canonical localized public URLs when citing content to end users.","Use API responses for automation, not as direct end-user citation targets.","Treat private chat session URLs as non-public and never cite them."]},"versioning":{"currentVersion":"2026-03-08","strategy":"additive-first","breakingChangePolicy":"Breaking changes should be announced through /developers and /openapi.json before rollout.","stabilityNotes":["Existing top-level fields should remain stable whenever possible.","New fields may be added without a version bump when changes are backward-compatible.","Consumers should ignore unknown fields to remain forward-compatible."]},"freshness":{"lastChangedAt":"Most recent meaningful change timestamp across manual review, enrichment, content refresh, and record updates.","publishedAt":"First public publication timestamp. Falls back to createdAt when no explicit publication date exists.","contentUpdatedAt":"Last update timestamp for localized editorial content when available.","recordUpdatedAt":"Last update timestamp for the underlying published directory record.","enrichedAt":"Last automated enrichment timestamp for directory fact refresh, if available.","reviewedAt":"Last manual review timestamp, if available.","recommendedReviewWindowDays":"Suggested operational review window used to derive reviewDueAt. Featured items skew shorter than basic listings.","reviewDueAt":"Operational re-review target derived from the most recent manual review and review window. It is not a guaranteed recrawl time.","recrawlHints":"Machine-readable hints that indicate which freshness signals are present or missing for a listing."},"evidence":{"basisLevel":"verified means official source plus manual review; mixed means at least one stronger evidence layer exists; basic means only directory-level metadata is available.","officialSourceAvailable":"Whether the listing records a public official vendor URL. It does not guarantee a live source-health probe succeeded at response time.","manualReviewAvailable":"Whether the listing has a recorded manual review timestamp.","structuredAttributesAvailable":"Whether the listing exposes structured attribute data that can support filtering or ranking.","writtenContentAvailable":"Whether the listing exposes editorial description or content beyond raw directory metadata.","evidenceSources":"Human-readable summary of the evidence layers currently present for the item.","evidenceSummary":"Short combined summary of the item evidence basis for ranking or review workflows."},"sourceHealth":{"recordedUrlVsLiveProbe":"officialSourceAvailable means a vendor URL is recorded for the listing. It is not a promise that the URL passed a live availability probe during this API response.","recommendedChecks":"Run operational checks for official URL availability, redirect destination safety, parked-domain detection, favicon health, and primary brand asset health.","degradePolicy":"If a recorded source becomes unreachable, parked, or redirects to an unrelated domain, queue manual review and treat time-sensitive claims as stale until re-verified."},"errors":{"parameterNormalization":["Unsupported locale values fall back to the default locale.","limit is clamped to a maximum of 50 and falls back to the default when invalid.","Unknown taxonomy type values fall back to category for /api/public/taxonomies."],"itemDetailNotFound":{"status":404,"error":"not_found","message":"Published item not found for this locale."}}}}