PickCenter Inventory Ops

Provider: the_odds_api · Generated from stored inventory only.

JSON dashboard Provider Summary Readiness JSON Worklist JSON Lookahead JSON Yield JSON Quota Health Onboarding JSON Capability Matrix Team Coverage JSON Canonical Cleanup Market Coverage JSON Market Gap Worklist Source Groups JSON
Readiness
degraded
0 blockers · 2 warnings
Open Pickable Lines
6
1 active supported sports
Active Provider Lines
6
1 provider events
24h Request Cost
0
quota remaining -

Plan Controls

Adjust these caps to preview provider-spending work. Submitting this form only replans; it does not execute provider calls.

Provider Inventory Summary

Rebuild local inventory

One or more active option sets should be regenerated from stored canonical inventory.

Provider enabledTrue
Active supported sports1
Open pickable lines6
Canonical healthhealthy
Active provider lines6
Canonical events1
Active option sets8
Regeneration recommended6
Market gap candidates0
Coverage limitation statusclear
Market gap live actions0
Market gap actionable local0
Market gap passive waits0
Active-board selected targets0
Active-board deduped targets0
Active-board urgencynone
Active-board urgent targets0
Active-board proactive targets0
Selected estimated credits0
Selected full-market credits0
Latest refresh status-
Latest refresh targets-
Latest refresh request cost-
Latest refresh provider cost-
Latest refresh local rebuild-
Latest refresh finished-
Latest refresh approval hash-
Active-board dry-run command-
Partial batch selected targets-
Partial batch estimated credits-
Partial batch urgent targets-
Partial batch proactive targets-
Partial dry-run command-
Next recovery partial targets-
Next recovery partial credits-
Next recovery partial dry run-
Daily used credits0
Daily remaining credits320
Daily credit shortfall-
Next recovery credits-
Daily after next recovery-
Sufficient recovery at-
Sufficient recovery credits-
Latest provider quota
Latest requestodds

Canonical Inventory Health

healthy

Open eligible lines6
Open eligible events1
Sports1
Leagues1
Serveable open options48
Unmaterialized lines0
Stale source lines0
Serveable stale lines0
Background stale lines0
Near-lock lines0
Serveable near-lock lines0
SportLinesEventsMarkets
basketball61h2h:2, spreads:2, totals:2

Canonical Recommended Actions

ActionLabelLive Provider CallsReason
regenerate_active_option_setsRegenerate active option setsFalseOne or more active competition periods have missing, stale, rules-changed, or inventory-changed option sets.

Next Active-Board Event Odds Targets

SportEventCreditsMarketsReason
No selected active-board event odds targets.

Readiness Skipped Targets

Targets skipped by the current dry-run readiness plan. These rows explain cap-constrained breadth without spending provider quota.

ComponentSkippedReasonsSamples
events1max_event_sports_exceeded: 1basketball_nba: max_event_sports_exceeded (0 credits)

No-Quota Actions

Rebuild local pickable inventory

Recompute PickCenter-owned pickable lines from stored provider rows using the current lookahead and odds controls.

Apply recommended lookahead rebuild

Rebuild from stored provider rows using the reviewed sport-specific lookahead recommendation shown below.

Run local maintenance

Expire started inventory, lock started picks, score from stored facts, and regenerate only recommended option sets.

Regenerate recommended option sets

Materialize only missing, stale, rules-changed, or inventory-changed active period boards from stored inventory.

These actions write inventory job-run records and do not call the odds provider.

No action run yet.

Lookahead Policy Recommendation

No live provider calls

Recommended sports0
Blocked stored lines0
Base lookahead days14
ENV assignment
INVENTORY_PROVIDER_SPORT_LOOKAHEAD_DAYS=''

No sport-specific lookahead overrides recommended for the current stored inventory.

Refresh Yield

No live provider calls

Window hours168
Recent requests2
Recent request cost0
Open pickable lines6
Pickable/credit-
Null-sport requests1

This joins recent request ledger spend to current stored inventory. It is a control-plane view and does not call providers.

SportRequestsCostObjectsActive linesOpen pickablePickable/creditStatus
basketball_nba
NBA
10166-yielding_pickable_inventory

Provider Quota Health

warning

Planned credits0
Daily used credits0
Daily remaining credits320
Latest quota remaining
Latest requestodds
Latest request cost0
Latest objects returned1
Latest object limit remaining
Latest request limit remaining
Latest response notice
Latest next cursor

Stored request ledger only. This does not probe the provider quota endpoint.

AllowedTrue
Blockers-
Warningsmissing_latest_quota_signal
24h requests2
24h failures0
24h unresolved failures0
Selected live targets
{'sports_refresh_due': False, 'event_sport_keys': [], 'odds_sport_keys': [], 'score_sport_keys': []}

Skipped Live Targets

ComponentSkippedReasonsSamples
events1max_event_sports_exceeded: 1basketball_nba: max_event_sports_exceeded (0 credits)

No unresolved provider request failure groups in the last 24 hours.

Provider Onboarding Readiness

review_required

ReadyFalse
Blockers0
Warnings1

Stored-data checklist for provider integration, canonical mapping, source policy, serving, and cost posture.

Onboarding JSON
CheckStatusMessageDetails
provider_registered_enabledokProvider is registered and enabled.
Metadata
{'provider_key': 'the_odds_api', 'provider_enabled': True, 'supports_odds': True, 'supports_scores': True, 'supports_event_odds_refresh': True}
provider_adapter_contractokProvider adapter has the required client and normalization hooks.
Metadata
{'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'adapter_contract_gaps': []}
provider_normalization_contractokProvider owns its payload normalization hooks.
Metadata
{'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'uses_live_provider_calls': False}
provider_capabilitiesokProvider supports odds, event refresh, and scores.
Metadata
{'capability_gaps': [], 'capability_status': 'ready', 'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'adapter_contract_gaps': [], 'recommended_action': {'action': 'none', 'reason': 'Provider is registered, stored, enabled, and supports odds/event refresh/scores.', 'command': None, 'api': None, 'api_request': None}}
provider_request_contractokProvider owns its odds request scope and cost model.
Metadata
{'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'uses_live_provider_calls': False}
sport_catalogok1 active supported sports are cataloged.
Metadata
{'provider_sports': 1, 'active_supported_sports': 1, 'unsupported_sports': 0}
sport_mapping_review_queueokNo provider sport support or canonical sport/league mapping review targets.
Metadata
{'review_target_counts': {}, 'review_queue_api_request': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-review-queue', 'query': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': True, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': True, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}}, 'review_target_sample': [], 'support_batch_api_requests': {'plan': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-batch-plan', 'query': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0, 'max_daily_request_credits': 320}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'max_daily_request_credits': 320}}, 'apply': {'method': 'POST', 'path': '/inventory/operations/provider-sport-support-batch-apply', 'body_template': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0, 'max_daily_request_credits': 320}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'max_daily_request_credits': 320}, 'returns_refresh_policy_dry_run': True}}}
provider_inventoryok1 provider events and 6 active lines are stored.
Metadata
{'provider_events': 1, 'active_provider_lines': 6, 'inactive_provider_lines': 0}
pickable_inventoryok6 PickCenter-owned open pickable lines are available.
Metadata
{'open_pickable_lines': 6, 'pickable_line_sources': 6, 'active_pickable_line_sources': 6}
team_identity_mappingokNo provider team identity mapping review targets.
Metadata
{'team_count': 2, 'canonical_team_count': 2, 'missing_canonical_team_count': 0, 'native_team_id_count': 0, 'unresolved_team_mapping_candidates': 0, 'native_id_status_counts': {'name_identity_only': 1}, 'native_id_actionability_counts': {'diagnostic_only': 1}, 'review_queue_api_request': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-review-queue', 'query': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': False, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': False, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}}, 'review_target_sample': []}
pickable_source_dedupeokPickable source policy has no duplicate canonical source groups.
Metadata
{'source_groups': 6, 'sources': 6, 'duplicate_source_groups': 0, 'suppressed_source_count': 0}
canonical_cleanupokNo alias-seeded duplicate canonical teams or events need cleanup.
Metadata
{'duplicate_team_candidates': 0, 'duplicate_event_candidates': 0, 'team_candidates_with_event_duplicates': 0, 'event_provider_event_mappings': 0, 'event_pickable_lines': 0, 'event_pick_options': 0, 'event_submitted_picks': 0, 'event_marquee_events': 0, 'worklist_api': 'GET /inventory/operations/canonical-cleanup-worklist', 'uses_live_provider_calls': False}
pick_serving_readinesswarningPick serving is available with 2 readiness warnings; review freshness and quota handoffs before enabling provider automation.
Metadata
{'ready_for_picks': True, 'readiness_status': 'degraded', 'blocker_count': 0, 'warning_count': 2, 'warning_keys': ['option_sets', 'pick_board_contracts'], 'blocker_keys': [], 'refresh_policy_due': {'due': False, 'sports': 0, 'events': 0, 'odds': 0, 'scores': 0, 'skipped_odds': 0}, 'refresh_policy_skipped_target_count': 0, 'refresh_policy_skipped_reason_counts': {}, 'active_board_event_odds_refresh': {'selected_targets': 0, 'selected_estimated_request_cost': 0, 'can_execute_live': False, 'live_execution_blockers': [], 'request_contracts_by_provider': {}, 'fallback_request_contract_providers': [], 'request_contract_gaps_by_provider': {}, 'normalization_contracts_by_provider': {}, 'fallback_normalization_contract_providers': [], 'normalization_contract_gaps_by_provider': {}, 'daily_remaining_credits': None, 'daily_cap_allows_action': None, 'next_daily_credit_recovery_at': None, 'next_recovery_allows_action': None, 'sufficient_daily_credit_recovery_at': None, 'dry_run_command': None, 'next_recovery_partial_batch': {'available': False, 'selected_targets': 0, 'selected_estimated_request_cost': 0, 'available_at': None, 'daily_remaining_credits_after_next_recovery': None, 'dry_run_command': None, 'uses_live_provider_calls': False}, 'uses_live_provider_calls': False}, 'uses_live_provider_calls': False}
provider_cost_postureok24h provider request cost is 0.
Metadata
{'request_cost_24h': 0, 'request_cost_7d': 0, 'max_daily_request_credits': 320, 'provider_credit_costs': {'sports_refresh': 0, 'events_refresh': 0, 'score_refresh': 2}, 'latest_quota_remaining': None}

Provider Capability Matrix

No live provider calls

Providers1
Ready providers1
Partial providers0
Drift providers0
Disabled providers0
Normalization fallback providers0

Compares provider registrations to stored provider state and live-refresh capabilities.

Capability Matrix JSON
ProviderStatusLive ComponentsCredit CostsDefault OddsCapability GapsDriftSportsPickable
the_odds_api
The Odds API
readysports_catalog, events, odds, scoressports 0, events 0, scores 2h2h,spreads,totals; regions us; cost 3; scope provider owned; cost model provider owned--16

Provider Sport Support Review

clear

Review targets0
Support reviews0
Canonical mapping reviews0
Team mapping reviews0
Active unsupported sports0
Open pickable lines6

Stored provider catalog, canonical mapping, and team identity review queue. This view does not call providers.

Sport Review JSONDurable Candidates JSONSupport Batch Plan
Support batch API
{'plan': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-batch-plan', 'query': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1}}, 'apply': {'method': 'POST', 'path': '/inventory/operations/provider-sport-support-batch-apply', 'body_template': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1}, 'returns_refresh_policy_dry_run': True}}

No provider sports need support or mapping review.

Provider Team Mapping Coverage

No live provider calls

Provider team groups1
Provider teams2
Canonical teams2
Missing canonical teams0
Native team IDs0
Team review candidates0

Shows provider participant identity coverage from stored team and mapping-candidate rows.

Team Coverage JSON
Sport / LeagueCanonicalNative IDsTeamsCanonical TeamsNative Team IDsReview Candidates
basketball_nba
NBA
mappedname_identity_only2200

Canonical Cleanup

No cleanup debt

Duplicate team candidates0
Duplicate event candidates0
Event mappings to review0
Submitted picks on duplicates0
Marquee refs on duplicates0

No duplicate canonical team candidates found.

No duplicate canonical event candidates found.

Provider Sport Market Coverage

No live provider calls

Provider sports1
Core-complete sports1
Partial core sports0
No pickable-line sports0
Open pickable lines6
Active provider lines6

Stored market coverage for moneyline, spread, and total pick inventory by provider sport.

Market Coverage JSON
SportStatusMoneylineSpreadTotalEventsProvider LinesGaps
basketball_nba
basketball_nba
core_markets_complete22216-

Market Gap Worklist

Stored-data worklist

Candidate sports0
Returned items0
Live-action sports0
Local-action sports0
Actionable local sports0
Passive wait sports0
Missing moneyline0
Missing spread0
Missing total0

Turns stored market coverage gaps into local or approval-gated refresh handoffs.

Provider coverage limitation summary
{"missing_core_market_counts": {"h2h": 0, "spreads": 0, "totals": 0}, "passive_wait_sports": 0, "recommended_operator_action": "No passive provider market-coverage waits are present.", "sample_sports": [], "status": "clear"}
Market Gap JSON

No core market gap worklist rows found.

Pickable Source Groups

One source per pick identity

Canonical source groups6
Source rows6
Duplicate source groups0
Suppressed alternates0
Policy modeone_per_pick_identity
Provider prioritythe_odds_api

Groups persisted pickable line sources by canonical pick identity. This view is stored-data only and does not call providers.

Use the detailed JSON view to inspect selected and alternate sources for each canonical pick identity.

Pick Board Contracts

No live provider calls

Competitions2
Periods14
Selectable periods8
Unavailable periods6
Missing option sets6
Stale option sets0
Missing marquees0
Event odds refresh target periods0
Event odds refresh targets0
Estimated target refresh credits0
Open options48

Shows materialized board serving state from stored inventory. Missing marquees do not block free picks.

Competition / PeriodBoardReasonOptionsEventsRefresh TargetsFreeMarquee
23811923-d615-4e6a-b7a6-2d1a0ac7028d
Friday
available-610availableavailable
23811923-d615-4e6a-b7a6-2d1a0ac7028d
Saturday
available-610availableavailable
23811923-d615-4e6a-b7a6-2d1a0ac7028d
Sunday
available-610availableavailable
23811923-d615-4e6a-b7a6-2d1a0ac7028d
Monday
available-610availableavailable
23811923-d615-4e6a-b7a6-2d1a0ac7028d
Tuesday
available-610availableavailable
23811923-d615-4e6a-b7a6-2d1a0ac7028d
Wednesday
available-610availableavailable
23811923-d615-4e6a-b7a6-2d1a0ac7028d
Thursday
available-610availableavailable
34658c3d-49cb-4f96-bc7a-e78f7ef09326
Friday
available-610availableavailable

Active Board Event-Odds Worklist

No live provider calls

Period targets0
Deduped targets0
Selected targets0
Skipped targets0
Retry backoff targets0
Retry review targets0
Selected estimated credits0
Request contracts-
Normalization contracts-
Live execution blockers-
Manifest dry runs0
Manifest execute templates0

Run each dry_run_api_request first, then execute only the corresponding execute_template after reviewing the dry-run approval hash and provider event identity.

No skipped active-board event-odds targets.

No active board event-odds refresh targets selected.

Pick-Period Fill

Target one competition period and one or more provider sports. Dry runs do not call providers or write job rows.

Run a dry run and type the confirmation phrase before execution is enabled.

Approval-gated provider calls

Stored-data recommendation

Fill provider contractsnormalization provider owned; normalization gaps -; request scope provider owned; request cost provider owned; request gaps -
Fill can execute liveFalse
Fill live blockers-
SportActionPeriod linesRecent yield
basketball_nbause_existing_period_inventory6yielding_pickable_inventory

Recommendation JSON

No pick-period fill dry run yet.

Quota Posture

No live calls selected

Selected sports refresh0
Selected event refreshes0
Selected odds refreshes0
Selected score refreshes0
Estimated credits0
Daily used credits0

Refresh execution remains approval-gated. Review the dry run before using any execute template.

Dry-run command
uv run python -m app.jobs.inventory run-refresh-policy --provider-key the_odds_api --run-mode full --max-odds-credits 0 --max-event-sports 0 --max-score-refresh-calls 25 --max-total-request-credits 0 --max-daily-request-credits 320 --lookahead-days 14 --sports-stale-hours 24 --events-stale-hours 24 --odds-stale-hours 4 --empty-odds-stale-hours 24 --refresh-yield-lookback-hours 168
Execute command
uv run python -m app.jobs.inventory run-refresh-policy --provider-key the_odds_api --run-mode full --max-odds-credits 0 --max-event-sports 0 --max-score-refresh-calls 25 --max-total-request-credits 0 --max-daily-request-credits 320 --lookahead-days 14 --sports-stale-hours 24 --events-stale-hours 24 --odds-stale-hours 4 --empty-odds-stale-hours 24 --refresh-yield-lookback-hours 168 --execute --approved-no-sports-refresh --approved-event-sports '' --approved-odds-sports '' --approved-score-sports '' --approved-plan-hash fae3b944049fe7d7e140dd9da299040a3081473e48dac14539c453e99b5cf830

Live Refresh Approval

No live provider work selected

Selected sports refresh0
Selected event refreshes0
Selected odds refreshes0
Selected score refreshes0
Estimated credits0
Daily remaining credits320
Dry-run request body
{'provider_key': 'the_odds_api', 'markets': ['h2h', 'spreads', 'totals'], 'regions': 'us', 'bookmakers': None, 'max_odds_credits': 0, 'max_event_sports': 0, 'max_total_request_credits': 0, 'max_daily_request_credits': 320, 'max_score_refresh_calls': 25, 'sports_stale_hours': 24, 'events_stale_hours': 24, 'odds_stale_hours': 4, 'empty_odds_stale_hours': 24, 'refresh_sport_priority': [], 'refresh_yield_lookback_hours': 168, 'lookahead_days': 14, 'run_mode': 'full', 'competition_id': None, 'pick_period_id': None, 'score_provider_sport_key': None, 'execute': False, 'rebuild_local': False}
Approval execute body
{'provider_key': 'the_odds_api', 'markets': ['h2h', 'spreads', 'totals'], 'regions': 'us', 'bookmakers': None, 'max_odds_credits': 0, 'max_event_sports': 0, 'max_total_request_credits': 0, 'max_daily_request_credits': 320, 'max_score_refresh_calls': 25, 'sports_stale_hours': 24, 'events_stale_hours': 24, 'odds_stale_hours': 4, 'empty_odds_stale_hours': 24, 'refresh_sport_priority': [], 'refresh_yield_lookback_hours': 168, 'lookahead_days': 14, 'run_mode': 'full', 'competition_id': None, 'pick_period_id': None, 'score_provider_sport_key': None, 'execute': True, 'rebuild_local': True, 'approved_sports_refresh_due': False, 'approved_event_sports': [], 'approved_odds_sports': [], 'approved_score_sports': [], 'approved_plan_hash': 'fae3b944049fe7d7e140dd9da299040a3081473e48dac14539c453e99b5cf830'}

Execution stays disabled until this page dry-runs the displayed plan and the returned approval targets exactly match the execute payload.

The current capped plan has no live provider calls to execute.

No live refresh dry run yet.

Scheduler Gate

ProfileGateModeQuotaCost GateRequest CreditsOperator Action
inventory-local-maintenancedefault_enabledlocalno provider quotanot_applicableno provider quotasafe_to_schedule
inventory-broad-refreshmanual_enablement_requiredbroad_inventoryprovider quotaidle
Warnings
['onboarding:pick_serving_readiness']
Selected live targets
{"event_sport_keys": [], "odds_sport_keys": [], "score_sport_keys": [], "sports_refresh_due": false}
Skipped live targets
{"components": {"events": {"reason_counts": {"max_event_sports_exceeded": 1}, "sample_targets": [{"estimated_credits": 0, "last_event_refresh": null, "provider_events": 1, "provider_sport_key": "basketball_nba", "reason": "never refreshed", "refresh_priority": null, "refresh_priority_rank": 0, "skip_reason": "max_event_sports_exceeded", "sport_group": "Basketball", "sport_title": "NBA"}], "skipped_target_count": 1}, "odds": {"reason_counts": {}, "sample_targets": [], "skipped_target_count": 0}, "scores": {"reason_counts": {}, "sample_targets": [], "skipped_target_count": 0}}, "total_skipped_target_count": 1}
Estimated credits: 0 / run cap 0
Uncapped estimate: 0
Daily used: 0 · Daily remaining: 320
Provider quota remaining: -
review_provider_quota_caps_and_current_refresh_plan
inventory-settlementidlesettlementprovider quotaidle
Warnings
['onboarding:pick_serving_readiness']
Selected live targets
{"event_sport_keys": [], "odds_sport_keys": [], "score_sport_keys": [], "sports_refresh_due": false}
Estimated credits: 0 / run cap 0
Uncapped estimate: 0
Daily used: 0 · Daily remaining: 320
Provider quota remaining: -
enable_when_real_pending_started_picks_need_score_refresh
inventory-breadth-expansion-planoptional_monitorbreadth_expansion_planno provider quotanot_applicableno provider quotaschedule_only_if_breadth_gap_monitoring_is_worth_task_cost
inventory-active-board-event-odds-planoptional_monitoractive_board_event_odds_planno provider quotanot_applicableno provider quotaschedule_only_if_active_board_event_odds_queue_monitoring_is_worth_task_cost
inventory-readiness-checkoptional_monitorreadinessno provider quotanot_applicableno provider quotaprefer_external_monitor_unless_dedicated_task_cost_is_accepted

Breadth Worklist

No breadth actions are currently recommended.

Sport Coverage

SportStatusEventsProvider LinesPickable LinesGap Reasons
basketball_nba
NBA
stocked166

Score Settlement Work Queue

idle

Refresh sports0
Selected refresh sports0
Backoff refresh sports0
Repeated failure sports0
Pending refresh picks0
Ready from stored scores0
Needs review0
Score normalization contractnormalization provider owned; normalization gaps -; score request scope provider owned; score request cost provider owned; score request gaps -
Score live execution blockers-

No score settlement work is currently queued.

Score Refresh Targets

No pending score refresh targets.

Pick Review Queue

No picks need manual review.