{
  "openapi": "3.1.0",
  "info": {
    "title": "DeepChamp for Agents API",
    "version": "2026-10-30",
    "summary": "Sports research intelligence for AI agents.",
    "description": "Research intelligence (probabilities, factors, context), not winning picks. Ranked signals, edge scores, ranked news, intel, research briefs and Jev, DeepChamp's research agent, over REST, remote MCP (https://deepchampai.com/mcp) and an A2A agent card. The free tier needs no signup. Operations appear here only while their line is live; call GET /catalog for the current table. Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. Problem gambling help: 1-800-MY-RESET.",
    "termsOfService": "https://deepchampai.com/docs/agents#terms",
    "contact": {
      "name": "DeepChamp for Agents",
      "url": "https://deepchampai.com/support"
    },
    "license": {
      "name": "DeepChamp for Agents API Terms",
      "url": "https://deepchampai.com/docs/agents#terms"
    }
  },
  "x-service-info": {
    "categories": [
      "ai",
      "sports",
      "research"
    ],
    "docs": {
      "homepage": "https://deepchampai.com/agents",
      "apiReference": "https://deepchampai.com/docs/agents",
      "llms": "https://deepchampai.com/llms.txt"
    }
  },
  "x-compliance": {
    "notice": "Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. Problem gambling help: 1-800-MY-RESET.",
    "age_gate": 21,
    "helpline": "1-800-MY-RESET"
  },
  "externalDocs": {
    "description": "DeepChamp for Agents documentation",
    "url": "https://deepchampai.com/docs/agents"
  },
  "servers": [
    {
      "url": "https://deepchampai.com/api/agent/v1",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Daily slate (free)",
      "description": "Every game on the board for a sport and day, with start times and plain-language rest and schedule context. Free, cached, no signup."
    }
  ],
  "paths": {
    "/slate/today": {
      "get": {
        "operationId": "get_daily_slate",
        "summary": "Daily slate",
        "description": "Games for a sport and Eastern date with start times, status, and plain-language rest and schedule context. Research intelligence (probabilities, factors, context), not winning picks. Price: Free, no signup. Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. Problem gambling help: 1-800-MY-RESET.",
        "tags": [
          "Daily slate (free)"
        ],
        "parameters": [
          {
            "name": "sport",
            "in": "query",
            "required": false,
            "description": "Sport. One of nba, nfl, mlb, nhl, cfb, cbb, wnba. Defaults to nba.",
            "schema": {
              "type": "string",
              "enum": [
                "nba",
                "nfl",
                "mlb",
                "nhl",
                "cfb",
                "cbb",
                "wnba"
              ],
              "default": "nba"
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "description": "Eastern (ET) date, YYYY-MM-DD, from yesterday to tomorrow. Defaults to today.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          }
        ],
        "security": [],
        "x-dc-free": true,
        "responses": {
          "200": {
            "description": "The tool payload with the compliance block, metadata and billing outcome.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentEnvelope"
                }
              }
            },
            "headers": {
              "X-DC-Request-Id": {
                "description": "Request id for support and idempotent retries.",
                "schema": {
                  "type": "string"
                }
              },
              "X-DC-Billable": {
                "description": "`true` only when this call incurred a charge.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "x-dc-product": "slate_summary",
        "x-dc-line": "slate",
        "x-dc-mcp-tool": "get_daily_slate"
      }
    },
    "/matchup/{sport}/{date}/{slug}": {
      "get": {
        "operationId": "get_matchup_context",
        "summary": "Matchup context",
        "description": "Schedule context for one game: each team's last result, rest, and next game. Facts and our computed context only. Research intelligence (probabilities, factors, context), not winning picks. Price: Free, no signup. Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. Problem gambling help: 1-800-MY-RESET.",
        "tags": [
          "Daily slate (free)"
        ],
        "parameters": [
          {
            "name": "sport",
            "in": "path",
            "required": true,
            "description": "Sport. One of nba, nfl, mlb, nhl, cfb, cbb, wnba.",
            "schema": {
              "type": "string",
              "enum": [
                "nba",
                "nfl",
                "mlb",
                "nhl",
                "cfb",
                "cbb",
                "wnba"
              ]
            }
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "description": "Eastern (ET) game date, YYYY-MM-DD.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Matchup slug from the daily slate, for example \"celtics-at-knicks\".",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
              "minLength": 3,
              "maxLength": 120
            }
          }
        ],
        "security": [],
        "x-dc-free": true,
        "responses": {
          "200": {
            "description": "The tool payload with the compliance block, metadata and billing outcome.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentEnvelope"
                }
              }
            },
            "headers": {
              "X-DC-Request-Id": {
                "description": "Request id for support and idempotent retries.",
                "schema": {
                  "type": "string"
                }
              },
              "X-DC-Billable": {
                "description": "`true` only when this call incurred a charge.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "x-dc-product": "matchup_context",
        "x-dc-line": "slate",
        "x-dc-mcp-tool": "get_matchup_context"
      }
    },
    "/request-capability": {
      "post": {
        "operationId": "request_capability",
        "summary": "Request a capability",
        "description": "Tell us what you need that is missing: a category, sport, market, format and urgency, with an optional short plain-text note. Enumerated fields only. Free, never charged, no signup. Research intelligence (probabilities, factors, context), not winning picks. Price: Free, no signup. Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. Problem gambling help: 1-800-MY-RESET.",
        "tags": [
          "Daily slate (free)"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "category": {
                    "type": "string",
                    "enum": [
                      "sport_coverage",
                      "league_coverage",
                      "market_type",
                      "data_format",
                      "latency",
                      "history",
                      "integration",
                      "pricing_plan",
                      "payment_method",
                      "licence_terms",
                      "other"
                    ],
                    "description": "What kind of capability you need."
                  },
                  "sport": {
                    "type": "string",
                    "enum": [
                      "nfl",
                      "ncaaf",
                      "nba",
                      "ncaab",
                      "wnba",
                      "mlb",
                      "nhl",
                      "epl",
                      "laliga",
                      "seriea",
                      "bundesliga",
                      "ligue1",
                      "mls",
                      "ucl",
                      "ufc",
                      "other"
                    ],
                    "description": "The sport, or other."
                  },
                  "market": {
                    "type": "string",
                    "enum": [
                      "moneyline",
                      "spread",
                      "total",
                      "player_prop",
                      "team_prop",
                      "futures",
                      "live",
                      "parlay",
                      "prediction_market_event",
                      "other"
                    ],
                    "description": "The market type, or other."
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "json",
                      "csv",
                      "parquet",
                      "webhook",
                      "sse",
                      "mcp",
                      "python_sdk",
                      "ts_sdk",
                      "other"
                    ],
                    "description": "The delivery format you need."
                  },
                  "urgency": {
                    "type": "string",
                    "enum": [
                      "blocker",
                      "soon",
                      "nice_to_have"
                    ],
                    "description": "How badly you need it."
                  },
                  "would_pay_range": {
                    "type": "string",
                    "enum": [
                      "free_only",
                      "lt_10_month",
                      "10_50_month",
                      "50_200_month",
                      "200_1000_month",
                      "gt_1000_month",
                      "per_call_lt_0_01",
                      "per_call_0_01_0_05",
                      "per_call_0_05_0_25",
                      "per_call_gt_0_25"
                    ],
                    "description": "What you would pay, as a range (monthly or per call)."
                  },
                  "stack": {
                    "type": "string",
                    "enum": [
                      "claude",
                      "chatgpt",
                      "cursor",
                      "langchain",
                      "custom_python",
                      "typescript",
                      "other"
                    ],
                    "description": "The agent stack you build with."
                  },
                  "autonomy": {
                    "type": "string",
                    "enum": [
                      "human_approves_each",
                      "human_reviews_batch",
                      "autonomous",
                      "not_betting"
                    ],
                    "description": "How autonomous the agent is. Stored and counted; it unlocks nothing and never refuses a request."
                  },
                  "note": {
                    "type": "string",
                    "maxLength": 280,
                    "description": "Optional, at most 280 characters, plain text. Dropped (the request is still recorded) when it contains an email, a URL, a long number, a key-shaped token or odds-like text."
                  }
                },
                "required": [
                  "category"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "security": [],
        "x-dc-free": true,
        "responses": {
          "200": {
            "description": "The tool payload with the compliance block, metadata and billing outcome.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentEnvelope"
                }
              }
            },
            "headers": {
              "X-DC-Request-Id": {
                "description": "Request id for support and idempotent retries.",
                "schema": {
                  "type": "string"
                }
              },
              "X-DC-Billable": {
                "description": "`true` only when this call incurred a charge.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "x-dc-product": "request_capability",
        "x-dc-line": "slate",
        "x-dc-mcp-tool": "request_capability"
      }
    },
    "/rate-response": {
      "post": {
        "operationId": "rate_response",
        "summary": "Rate a response",
        "description": "Say whether a response was useful, with a reason code, tied to its request id. No free text. Free, never charged, no signup. Research intelligence (probabilities, factors, context), not winning picks. Price: Free, no signup. Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. Problem gambling help: 1-800-MY-RESET.",
        "tags": [
          "Daily slate (free)"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "request_id": {
                    "type": "string",
                    "pattern": "^req_[0-9a-f]{20}$",
                    "description": "The X-DC-Request-Id of the response you are rating."
                  },
                  "rating": {
                    "type": "string",
                    "enum": [
                      "useful",
                      "not_useful"
                    ],
                    "description": "useful or not_useful."
                  },
                  "reason": {
                    "type": "string",
                    "enum": [
                      "wrong",
                      "stale",
                      "incomplete",
                      "too_slow",
                      "too_expensive",
                      "not_relevant",
                      "wrongly_refused",
                      "unclear",
                      "other"
                    ],
                    "description": "Required when the rating is not_useful."
                  },
                  "product_line": {
                    "type": "string",
                    "enum": [
                      "slate_summary",
                      "edge_score",
                      "ranked_picks",
                      "matchup_brief",
                      "prop_brief",
                      "research_card",
                      "ranked_news",
                      "news_by_game",
                      "news_search",
                      "daily_intel",
                      "injury_lineup_intel",
                      "live_game_intel",
                      "market_signals",
                      "prediction_market_signals",
                      "evaluate_market",
                      "archive_signals",
                      "archive_news",
                      "ask_jev",
                      "subscribe",
                      "fair_value",
                      "best_price",
                      "kelly_math",
                      "hedge_calculator",
                      "jev_rank",
                      "match_event",
                      "ev_scan",
                      "subscribe_read",
                      "usage",
                      "evaluation",
                      "feedback",
                      "calc_kelly",
                      "calc_fair_value",
                      "calc_hedge",
                      "calc_parlay",
                      "calc_best_price",
                      "calc_ev_scan",
                      "matchup_context"
                    ],
                    "description": "The product the response came from."
                  },
                  "tier": {
                    "type": "string",
                    "enum": [
                      "free",
                      "pay_per_call",
                      "developer",
                      "partner",
                      "canary"
                    ],
                    "description": "Your tier (defaults to free)."
                  }
                },
                "required": [
                  "request_id",
                  "rating"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "security": [],
        "x-dc-free": true,
        "responses": {
          "200": {
            "description": "The tool payload with the compliance block, metadata and billing outcome.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentEnvelope"
                }
              }
            },
            "headers": {
              "X-DC-Request-Id": {
                "description": "Request id for support and idempotent retries.",
                "schema": {
                  "type": "string"
                }
              },
              "X-DC-Billable": {
                "description": "`true` only when this call incurred a charge.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        },
        "x-dc-product": "rate_response",
        "x-dc-line": "slate",
        "x-dc-mcp-tool": "rate_response"
      }
    }
  },
  "components": {
    "schemas": {
      "Billing": {
        "additionalProperties": false,
        "description": "How this call was billed. `charged` is the only status that incurred a charge; `not_charged` and `replayed` never do.",
        "properties": {
          "balance_micros": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Balance Micros"
          },
          "currency": {
            "const": "usd",
            "default": "usd",
            "title": "Currency",
            "type": "string"
          },
          "payer": {
            "enum": [
              "account",
              "receipt",
              "canary",
              "free"
            ],
            "title": "Payer",
            "type": "string"
          },
          "price_micros": {
            "minimum": 0,
            "title": "Price Micros",
            "type": "integer"
          },
          "status": {
            "enum": [
              "free",
              "charged",
              "not_charged",
              "replayed"
            ],
            "title": "Status",
            "type": "string"
          },
          "units": {
            "minimum": 0,
            "title": "Units",
            "type": "integer"
          }
        },
        "required": [
          "status",
          "units",
          "price_micros",
          "payer"
        ],
        "title": "Billing",
        "type": "object"
      },
      "Compliance": {
        "additionalProperties": false,
        "properties": {
          "age_gate": {
            "const": 21,
            "default": 21,
            "title": "Age Gate",
            "type": "integer"
          },
          "ai_generated": {
            "default": true,
            "title": "Ai Generated",
            "type": "boolean"
          },
          "helpline": {
            "const": "1-800-MY-RESET",
            "default": "1-800-MY-RESET",
            "title": "Helpline",
            "type": "string"
          },
          "helpline_url": {
            "default": "https://1800myreset.org",
            "title": "Helpline Url",
            "type": "string"
          },
          "notice": {
            "default": "Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. AI-generated analysis can be wrong; use your own judgment.",
            "maxLength": 400,
            "title": "Notice",
            "type": "string"
          },
          "privacy_url": {
            "default": "https://deepchampai.com/privacy",
            "title": "Privacy Url",
            "type": "string"
          },
          "terms_url": {
            "default": "https://deepchampai.com/terms",
            "title": "Terms Url",
            "type": "string"
          }
        },
        "title": "Compliance",
        "type": "object"
      },
      "ErrorBody": {
        "additionalProperties": false,
        "properties": {
          "billable": {
            "default": false,
            "title": "Billable",
            "type": "boolean"
          },
          "code": {
            "maxLength": 48,
            "title": "Code",
            "type": "string"
          },
          "message": {
            "maxLength": 300,
            "title": "Message",
            "type": "string"
          },
          "price_micros": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Micros"
          },
          "request_id": {
            "pattern": "^req_[0-9a-f]{20}$",
            "title": "Request Id",
            "type": "string"
          },
          "retry_after_seconds": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry After Seconds"
          }
        },
        "required": [
          "code",
          "message",
          "request_id"
        ],
        "title": "ErrorBody",
        "type": "object"
      },
      "ErrorResponse": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorBody"
          }
        },
        "required": [
          "error"
        ],
        "title": "ErrorResponse",
        "type": "object"
      },
      "FeedbackHint": {
        "additionalProperties": false,
        "properties": {
          "capability_path": {
            "default": "/v1/request-capability",
            "title": "Capability Path",
            "type": "string"
          },
          "rate_path": {
            "default": "/v1/feedback",
            "title": "Rate Path",
            "type": "string"
          }
        },
        "title": "FeedbackHint",
        "type": "object"
      },
      "Meta": {
        "additionalProperties": false,
        "properties": {
          "as_of": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$",
            "title": "As Of",
            "type": "string"
          },
          "cache": {
            "default": "none",
            "enum": [
              "hit",
              "miss",
              "stale",
              "none"
            ],
            "title": "Cache",
            "type": "string"
          },
          "data_freshness_seconds": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Freshness Seconds"
          },
          "day": {
            "anyOf": [
              {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Day"
          },
          "feedback": {
            "$ref": "#/components/schemas/FeedbackHint"
          },
          "model_quality": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ModelQuality"
              },
              {
                "type": "null"
              }
            ]
          },
          "model_version": {
            "maxLength": 40,
            "title": "Model Version",
            "type": "string"
          },
          "request_id": {
            "pattern": "^req_[0-9a-f]{20}$",
            "title": "Request Id",
            "type": "string"
          },
          "stale": {
            "default": false,
            "title": "Stale",
            "type": "boolean"
          }
        },
        "required": [
          "request_id",
          "as_of",
          "model_version"
        ],
        "title": "Meta",
        "type": "object"
      },
      "ModelQuality": {
        "additionalProperties": false,
        "description": "Honest by construction: until enough graded signals exist the status is `unproven`, and the numbers live at GET /v1/evaluation.",
        "properties": {
          "evaluation_path": {
            "default": "/v1/evaluation",
            "title": "Evaluation Path",
            "type": "string"
          },
          "min_n_for_claim": {
            "default": 500,
            "title": "Min N For Claim",
            "type": "integer"
          },
          "n_graded": {
            "default": 0,
            "minimum": 0,
            "title": "N Graded",
            "type": "integer"
          },
          "status": {
            "default": "unproven",
            "enum": [
              "unproven",
              "measured"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "title": "ModelQuality",
        "type": "object"
      },
      "AgentEnvelope": {
        "type": "object",
        "description": "The standard response envelope: the tool payload plus the compliance block, request metadata and billing outcome.",
        "required": [
          "data",
          "compliance",
          "meta",
          "billing"
        ],
        "properties": {
          "data": {
            "type": "object",
            "description": "The tool payload."
          },
          "compliance": {
            "$ref": "#/components/schemas/Compliance"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "billing": {
            "$ref": "#/components/schemas/Billing"
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "The request is malformed or an argument is invalid. Never charged.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "RateLimited": {
        "description": "Rate limit reached. Never charged.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        },
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        }
      },
      "Unavailable": {
        "description": "The line is not live, the service is paused, or a provider is unavailable. Never charged.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      }
    }
  }
}
