# VS Engine API > Central Stats & AI Content Motor powering Insideformation client products. Sources: Kambi odds + betting patterns, ValueStats insights, SportRadar match data. Data policy: **never invent data** — missing values become `null` + `blocked: true`, frontends hide blocked widgets. See /docs/concepts/data-policy.md. Version: 1.0.0 Base URL: https://api.insideformation.com/dataengine ## Endpoints - [GET /](openapi.yaml): GET / - [GET /admin/packages](openapi.yaml): List approval queue packages - [GET /admin/packages/{id}](openapi.yaml): Fetch full package with version history - [POST /admin/packages/{id}/approve](openapi.yaml): Approve a pending package - [PATCH /admin/packages/{id}/edit](openapi.yaml): Apply an in-place text edit to the current version - [POST /admin/packages/{id}/reject](openapi.yaml): Reject the current version with feedback and trigger regeneration - [POST /admin/packages/{id}/unpublish](openapi.yaml): Unpublish a live package - [GET /admin/packages/{id}/version/{versionId}](openapi.yaml): Fetch a specific historical version of a package - [GET /alerts](openapi.yaml): GET /dataengine/alerts - [POST /articles/generate](openapi.yaml): POST /dataengine/articles/generate - [POST /auto-articles/run](openapi.yaml): POST /dataengine/auto-articles/run - [GET /auto-articles/status](openapi.yaml): GET /dataengine/auto-articles/status - [POST /auto-videos/run](openapi.yaml): POST /dataengine/auto-videos/run - [GET /auto-videos/status](openapi.yaml): GET /dataengine/auto-videos/status - [GET /brand/{clientId}](openapi.yaml): GET /dataengine/brand/:clientId - [POST /brand/{clientId}/invalidate](openapi.yaml): POST /dataengine/brand/:clientId/invalidate - [GET /catalog](openapi.yaml): Self-service API catalog (machine-readable JSON) - [GET /client/{id}/sportsbook/accumulators](openapi.yaml): GET /dataengine/client/:id/sportsbook/accumulators - [GET /client/{id}/sportsbook/catalog](openapi.yaml): GET /dataengine/client/:id/sportsbook/catalog - [GET /client/{id}/sportsbook/feed](openapi.yaml): GET /dataengine/client/:id/sportsbook/feed - [GET /client/{id}/sportsbook/live-rail](openapi.yaml): GET /dataengine/client/:id/sportsbook/live-rail - [GET /client/{id}/sportsbook/market-spotlight](openapi.yaml): GET /dataengine/client/:id/sportsbook/market-spotlight - [GET /client/{id}/sportsbook/popular](openapi.yaml): GET /dataengine/client/:id/sportsbook/popular - [GET /client/{id}/sportsbook/ticker](openapi.yaml): GET /dataengine/client/:id/sportsbook/ticker - [GET /cms/market-config](openapi.yaml): GET /dataengine/cms/market-config - [POST /cms/market-config](openapi.yaml): POST /dataengine/cms/market-config - [GET /cost](openapi.yaml): GET /dataengine/cost - [GET /cost/log](openapi.yaml): GET /dataengine/cost/log - [GET /dam/{clientId}/catalog](openapi.yaml): GET /dataengine/dam/:clientId/catalog - [GET /dam/{clientId}/select](openapi.yaml): GET /dataengine/dam/:clientId/select - [GET /docs/catalog.html](openapi.yaml): Self-service API catalog (browser-friendly HTML) - [GET /feed/{clientId}](openapi.yaml): GET /dataengine/feed/:clientId - [GET /feed/{clientId}/match/{eventId}](openapi.yaml): GET /dataengine/feed/:clientId/match/:eventId - [GET /feed/{clientId}/poll](openapi.yaml): GET /dataengine/feed/:clientId/poll - [POST /feed/{clientId}/refresh](openapi.yaml): POST /dataengine/feed/:clientId/refresh - [GET /fs/leaders/{leagueId}](openapi.yaml): GET /dataengine/fs/leaders/:leagueId - [GET /fs/match/{eventId}](openapi.yaml): GET /dataengine/fs/match/:eventId - [GET /fs/matches](openapi.yaml): GET /dataengine/fs/matches - [GET /fs/player/{playerId}](openapi.yaml): GET /dataengine/fs/player/:playerId - [GET /fs/standings/{leagueId}](openapi.yaml): GET /dataengine/fs/standings/:leagueId - [GET /fs/team/{teamId}](openapi.yaml): GET /dataengine/fs/team/:teamId - [GET /goal-profiles](openapi.yaml): GET /dataengine/goal-profiles - [GET /health/leagues](openapi.yaml): Per-league health snapshot (OK / empty / blocked) - [POST /insights/run-all](openapi.yaml): Force re-mine insights for every upcoming pre-match fixture - [GET /insights/{eventId}](openapi.yaml): Read cached pre-match mined insights for one fixture - [POST /insights/{eventId}/run](openapi.yaml): Force re-mine insights for one fixture - [GET /journalists](openapi.yaml): GET /dataengine/journalists - [GET /junibet/accumulators](openapi.yaml): GET /dataengine/junibet/accumulators - [GET /junibet/catalog](openapi.yaml): GET /dataengine/junibet/catalog - [GET /junibet/feed](openapi.yaml): GET /dataengine/junibet/feed - [GET /junibet/live-rail](openapi.yaml): Live Now rail — major-league in-play matches for the Junibet lobby - [GET /junibet/market-spotlight](openapi.yaml): GET /dataengine/junibet/market-spotlight - [GET /junibet/popular](openapi.yaml): GET /dataengine/junibet/popular - [GET /junibet/ticker](openapi.yaml): GET /dataengine/junibet/ticker - [GET /leaders/{leagueId}](openapi.yaml): GET /dataengine/leaders/:leagueId - [GET /liga-bast/{leagueId}](openapi.yaml): GET /dataengine/liga-bast/:leagueId - [GET /live/{eventId}/lineups](openapi.yaml): Fetch starting lineups + formations for a match (cached once per fixture) - [GET /live/{eventId}/summary](openapi.yaml): Fetch the latest SportRadar live summary for an in-play match - [GET /live/{eventId}/timeline](openapi.yaml): Fetch the latest SportRadar timeline (event-by-event log) for an in-play match - [GET /mappings/kambi-to-sr](openapi.yaml): Resolve a Kambi event id to its SportRadar sport_event URN - [GET /mappings/sr-to-kambi](openapi.yaml): Resolve a SportRadar sport_event URN to its Kambi event id - [GET /odds/{eventId}](openapi.yaml): GET /dataengine/odds/:eventId - [GET /odds/{eventId}/movement](openapi.yaml): GET /dataengine/odds/:eventId/movement - [GET /pipeline/match/{eventId}](openapi.yaml): Per-event pipeline attempt history - [POST /pipeline/run](openapi.yaml): POST /dataengine/pipeline/run - [GET /player-aggregates/{playerId}](openapi.yaml): Per-player rich aggregates for AI insight prompts - [GET /player-profiles](openapi.yaml): GET /dataengine/player-profiles - [GET /recipes](openapi.yaml): GET /dataengine/recipes - [POST /recipes/reload](openapi.yaml): POST /dataengine/recipes/reload - [GET /standalone/{leagueId}](openapi.yaml): GET /dataengine/standalone/:leagueId - [POST /standalone/{leagueId}/refresh](openapi.yaml): POST /dataengine/standalone/:leagueId/refresh - [GET /status](openapi.yaml): GET /dataengine/status - [GET /team-aggregates/{teamId}](openapi.yaml): Per-team rich aggregates for AI insight prompts - [GET /team-stats-aggregates](openapi.yaml): GET /dataengine/team-stats-aggregates - [GET /video/by-match/{eventId}](openapi.yaml): GET /dataengine/video/by-match/:eventId - [POST /video/generate](openapi.yaml): POST /dataengine/video/generate - [GET /video/{videoId}](openapi.yaml): GET /dataengine/video/:videoId - [GET /widgets](openapi.yaml): GET /dataengine/widgets ## Concepts - [Data policy (never invent data)](concepts/data-policy.md) - [Getting started](guides/getting-started.md)