generated: '2026-10-08' method: derived generator: derive-data-model.py source: - openapi/_original/citoapi-v1-openapi.json notation: has_one = property $ref; has_many = array of $ref; belongs_to = _id field summary: entities: 73 entities_in_spec: 73 relationships: 76 entities: - name: BkfcBout fields: 17 - name: BkfcError fields: 2 - name: BkfcEvent fields: 13 - name: BkfcFighter fields: 11 - name: BkfcStatLine fields: 17 - name: Error fields: 2 - name: QrGenerateBody fields: 8 - name: RafAthlete fields: 9 - name: RafBout fields: 13 - name: RafError fields: 2 - name: RafEvent fields: 17 - name: RafSearchResult fields: 4 - name: RafTitle fields: 6 - name: TennisAllTimeTitleLeader fields: 3 description: Player with most titles at a tournament. - name: TennisCalendarTournamentItem fields: 14 description: Tournament calendar event item. - name: TennisCareerSummary fields: 9 description: Aggregated career singles win-loss and title statistics. - name: TennisClutchStats fields: 11 description: Clutch situational and tiebreak metrics. - name: TennisDrawMatch fields: 6 description: Match node in tournament draw bracket. - name: TennisDrawPlayer fields: 6 description: Player participant node in bracket draw. - name: TennisDrawRound fields: 3 description: Round grouping in bracket tree. - name: TennisGrandSlamBreakdown fields: 4 description: Career performance across the four Grand Slam majors. - name: TennisGrandSlamTournamentRecord fields: 4 description: Performance metrics for an individual Grand Slam tournament. - name: TennisH2HDecidingSetsRecord fields: 3 description: Head-to-head deciding sets tally. - name: TennisH2HFormatBreakdown fields: 2 description: Head-to-head breakdown by match length (best of 3 vs best of 5). - name: TennisH2HLevelBreakdown fields: 5 description: Head-to-head breakdown by tournament tier. - name: TennisH2HLevelItem fields: 3 description: Level-specific head-to-head record. - name: TennisH2HMatchSummary fields: 9 description: Match summary in H2H chronology. - name: TennisH2HPlayerSummary fields: 6 description: Player summary for H2H rivalry comparison. - name: TennisH2HSummary fields: 10 description: Head-to-head overall tallies. - name: TennisH2HSurfaceBreakdown fields: 4 description: Head-to-head surface breakdown across Hard, Clay, Grass, Carpet. - name: TennisH2HSurfaceItem fields: 3 description: Surface-specific head-to-head record. - name: TennisH2HTiebreakRecord fields: 3 description: Head-to-head tiebreak tally. - name: TennisHTTPValidationError fields: 1 - name: TennisHeadToHeadMatrixResponse fields: 2 description: Multi-player Head-to-Head comparison grid. - name: TennisHeadToHeadResponse fields: 9 description: Complete Head-to-Head rivalry dossier. - name: TennisListResponse_CalendarTournamentItem_ fields: 7 - name: TennisListResponse_Dict_str__Any__ fields: 7 - name: TennisListResponse_LiveMatchSummary_ fields: 7 - name: TennisListResponse_PlayerListItem_ fields: 7 - name: TennisListResponse_str_ fields: 7 - name: TennisLiveMatchDetail fields: 22 description: Detailed live match state snapshot. - name: TennisLiveMatchSummary fields: 24 description: Live match summary in active feed list. - name: TennisLivePlayerState fields: 7 description: Player status in an active live match. - name: TennisLiveSetScore fields: 7 description: Set score item in live match. - name: TennisMatchDetailResponse fields: 26 description: Comprehensive match detail response including set scores and stats. - name: TennisMatchListItem fields: 23 description: Summary item for match directory listing. - name: TennisMatchParticipant fields: 7 description: Player participant summary in a match. - name: TennisMatchSetItem fields: 6 description: Set-by-set box score item. - name: TennisMatchStatsSummary fields: 2 description: Combined match statistics for winner and loser. - name: TennisPaginatedResponse_MatchListItem_ fields: 7 - name: TennisPaginatedResponse_PlayerListItem_ fields: 7 - name: TennisPaginatedResponse_TournamentListItem_ fields: 7 - name: TennisPlayerBatchResponse fields: 3 description: Many players in one call. `missing` names the ids that did not resolve. - name: TennisPlayerListItem fields: 25 description: Summary item for player listing and filtering. - name: TennisPlayerMatchStats fields: 15 description: Granular match statistics for a single player. - name: TennisPlayerProfile fields: 28 description: Comprehensive player profile and biographical record. - name: TennisPlayerRankingHistoryResponse fields: 7 description: Career historical ranking time-series and peak records. - name: TennisPlayerStatsResponse fields: 9 description: Detailed career statistics response with optional filtering. - name: TennisRankingHistoryPoint fields: 3 description: Single time-series ranking data point for a player. - name: TennisRankingItem fields: 10 description: Single ranking entry in weekly leaderboard. - name: TennisRankingsListResponse fields: 9 description: Paginated ranking leaderboard for a given tour and week. - name: TennisReturnStats fields: 5 description: Detailed return metrics and percentages. - name: TennisServingStats fields: 10 description: Detailed serving metrics and percentages. - name: TennisSimulationRequest fields: 4 description: Control request to simulate live match state transitions. - name: TennisSimulationResponse fields: 5 description: Result of live simulation action. - name: TennisSurfaceBreakdown fields: 4 description: Breakdown of matches and records across surface types. - name: TennisSurfaceStatItem fields: 5 description: Statistics for a specific court surface. - name: TennisTiebreakDetail fields: 2 description: Tiebreak point breakdown. - name: TennisTournamentDetailResponse fields: 15 description: Comprehensive tournament dossier and historical editions. - name: TennisTournamentDrawResponse fields: 7 description: Full interactive draw bracket tree. - name: TennisTournamentListItem fields: 14 description: Summary item for tournament catalog. - name: TennisTournamentSummaryInfo fields: 8 description: Tournament context metadata embedded in match detail. - name: TennisValidationError fields: 5 relationships: - from: TennisDrawMatch to: TennisDrawPlayer type: has_one via: player1 - from: TennisDrawMatch to: TennisDrawPlayer type: has_one via: player2 - from: TennisDrawRound to: TennisDrawMatch type: has_many via: matches - from: TennisGrandSlamBreakdown to: TennisGrandSlamTournamentRecord type: has_one via: australian_open - from: TennisGrandSlamBreakdown to: TennisGrandSlamTournamentRecord type: has_one via: roland_garros - from: TennisGrandSlamBreakdown to: TennisGrandSlamTournamentRecord type: has_one via: wimbledon - from: TennisGrandSlamBreakdown to: TennisGrandSlamTournamentRecord type: has_one via: us_open - from: TennisH2HFormatBreakdown to: TennisH2HLevelItem type: has_one via: best_of_3 - from: TennisH2HFormatBreakdown to: TennisH2HLevelItem type: has_one via: best_of_5 - from: TennisH2HLevelBreakdown to: TennisH2HLevelItem type: has_one via: grand_slam - from: TennisH2HLevelBreakdown to: TennisH2HLevelItem type: has_one via: masters_1000 - from: TennisH2HLevelBreakdown to: TennisH2HLevelItem type: has_one via: tour_finals - from: TennisH2HLevelBreakdown to: TennisH2HLevelItem type: has_one via: atp_500_250 - from: TennisH2HLevelBreakdown to: TennisH2HLevelItem type: has_one via: olympics_davis_cup - from: TennisH2HSurfaceBreakdown to: TennisH2HSurfaceItem type: has_one via: hard - from: TennisH2HSurfaceBreakdown to: TennisH2HSurfaceItem type: has_one via: clay - from: TennisH2HSurfaceBreakdown to: TennisH2HSurfaceItem type: has_one via: grass - from: TennisH2HSurfaceBreakdown to: TennisH2HSurfaceItem type: has_one via: carpet - from: TennisHTTPValidationError to: TennisValidationError type: has_many via: detail - from: TennisHeadToHeadMatrixResponse to: TennisH2HPlayerSummary type: has_many via: players - from: TennisHeadToHeadResponse to: TennisH2HPlayerSummary type: has_one via: player1 - from: TennisHeadToHeadResponse to: TennisH2HPlayerSummary type: has_one via: player2 - from: TennisHeadToHeadResponse to: TennisH2HSummary type: has_one via: summary - from: TennisHeadToHeadResponse to: TennisH2HSurfaceBreakdown type: has_one via: surface_breakdown - from: TennisHeadToHeadResponse to: TennisH2HLevelBreakdown type: has_one via: level_breakdown - from: TennisHeadToHeadResponse to: TennisH2HFormatBreakdown type: has_one via: format_breakdown - from: TennisHeadToHeadResponse to: TennisH2HTiebreakRecord type: has_one via: tiebreak_record - from: TennisHeadToHeadResponse to: TennisH2HDecidingSetsRecord type: has_one via: deciding_sets - from: TennisHeadToHeadResponse to: TennisH2HMatchSummary type: has_many via: matches - from: TennisListResponse_CalendarTournamentItem_ to: TennisCalendarTournamentItem type: has_many via: items - from: TennisListResponse_LiveMatchSummary_ to: TennisLiveMatchSummary type: has_many via: items - from: TennisListResponse_PlayerListItem_ to: TennisPlayerListItem type: has_many via: items - from: TennisLiveMatchDetail to: TennisLivePlayerState type: has_one via: player1 - from: TennisLiveMatchDetail to: TennisLivePlayerState type: has_one via: player2 - from: TennisLiveMatchDetail to: TennisLiveSetScore type: has_many via: sets - from: TennisLiveMatchSummary to: TennisLivePlayerState type: has_one via: player1 - from: TennisLiveMatchSummary to: TennisLivePlayerState type: has_one via: player2 - from: TennisLiveMatchSummary to: TennisLiveSetScore type: has_many via: sets - from: TennisMatchDetailResponse to: TennisTournamentSummaryInfo type: has_one via: tournament - from: TennisMatchDetailResponse to: TennisMatchParticipant type: has_one via: winner - from: TennisMatchDetailResponse to: TennisMatchParticipant type: has_one via: loser - from: TennisMatchDetailResponse to: TennisMatchParticipant type: has_one via: player1 - from: TennisMatchDetailResponse to: TennisMatchParticipant type: has_one via: player2 - from: TennisMatchDetailResponse to: TennisMatchSetItem type: has_many via: sets - from: TennisMatchDetailResponse to: TennisMatchStatsSummary type: has_one via: stats - from: TennisMatchListItem to: TennisMatchParticipant type: has_one via: winner - from: TennisMatchListItem to: TennisMatchParticipant type: has_one via: loser - from: TennisMatchListItem to: TennisMatchParticipant type: has_one via: player1 - from: TennisMatchListItem to: TennisMatchParticipant type: has_one via: player2 - from: TennisMatchListItem to: TennisMatchSetItem type: has_many via: sets - from: TennisMatchSetItem to: TennisTiebreakDetail type: has_one via: tiebreak - from: TennisMatchStatsSummary to: TennisPlayerMatchStats type: has_one via: winner - from: TennisMatchStatsSummary to: TennisPlayerMatchStats type: has_one via: loser - from: TennisPaginatedResponse_MatchListItem_ to: TennisMatchListItem type: has_many via: items - from: TennisPaginatedResponse_PlayerListItem_ to: TennisPlayerListItem type: has_many via: items - from: TennisPaginatedResponse_TournamentListItem_ to: TennisTournamentListItem type: has_many via: items - from: TennisPlayerBatchResponse to: TennisPlayerListItem type: has_many via: items - from: TennisPlayerProfile to: TennisCareerSummary type: has_one via: career_summary - from: TennisPlayerProfile to: TennisSurfaceBreakdown type: has_one via: surface_breakdown - from: TennisPlayerRankingHistoryResponse to: TennisRankingHistoryPoint type: has_many via: history - from: TennisPlayerStatsResponse to: TennisCareerSummary type: has_one via: career_summary - from: TennisPlayerStatsResponse to: TennisSurfaceBreakdown type: has_one via: surface_breakdown - from: TennisPlayerStatsResponse to: TennisServingStats type: has_one via: serving_stats - from: TennisPlayerStatsResponse to: TennisReturnStats type: has_one via: return_stats - from: TennisPlayerStatsResponse to: TennisClutchStats type: has_one via: clutch_and_situational - from: TennisPlayerStatsResponse to: TennisGrandSlamBreakdown type: has_one via: grand_slam_breakdown - from: TennisRankingsListResponse to: TennisRankingItem type: has_many via: items - from: TennisSurfaceBreakdown to: TennisSurfaceStatItem type: has_one via: hard - from: TennisSurfaceBreakdown to: TennisSurfaceStatItem type: has_one via: clay - from: TennisSurfaceBreakdown to: TennisSurfaceStatItem type: has_one via: grass - from: TennisSurfaceBreakdown to: TennisSurfaceStatItem type: has_one via: carpet - from: TennisTournamentDetailResponse to: TennisAllTimeTitleLeader type: has_one via: all_time_title_leader - from: TennisTournamentDrawResponse to: TennisDrawRound type: has_many via: rounds - from: TennisTournamentListItem to: TennisAllTimeTitleLeader type: has_one via: all_time_title_leader - from: RafEvent to: RafBout type: has_many via: card - from: BkfcEvent to: BkfcBout type: has_many via: card