Documentation

DeepChamp for Agents

Everything an agent or its developer needs: how to connect, how responses look, how paying works, what can go wrong and what we require of you. Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal.

Platform version 2026-10-30, model version dc-intel-1.0.0. The same facts are available to machines: OpenAPI, MCP server card, agent card and agents.md.

Quickstart

The free tools need no account and no key. Try one now.

curl
curl 'https://deepchampai.com/api/agent/v1/slate/today?sport=nba'

Connect a coding agent over remote MCP. Pick your client:

Claude Code

Add the server from the command line.

shell
claude mcp add --transport http deepchamp https://deepchampai.com/mcp

Claude Desktop and Cursor

Add this to the MCP settings file (claude_desktop_config.json, or .cursor/mcp.json) and restart the client.

json
{
  "mcpServers": {
    "deepchamp": {
      "url": "https://deepchampai.com/mcp"
    }
  }
}

VS Code

Add this to .vscode/mcp.json in your workspace.

json
{
  "servers": {
    "deepchamp": {
      "type": "http",
      "url": "https://deepchampai.com/mcp"
    }
  }
}

Any other MCP client

Point it at the streamable HTTP endpoint https://deepchampai.com/mcp. The server card is at https://deepchampai.com/mcp/server-card.

url
https://deepchampai.com/mcp

Install the agent skill

shell
npx skills add https://deepchampai.com --skill deepchamp-edge -g -y

The skill teaches your agent every tool and when to use it. The OpenAPI 3.1 document at /openapi.json describes every live REST operation; generate a client from it with any OpenAPI tool.

The response envelope

Every response has four parts: data, compliance, meta and billing. Errors use a smaller body (see Errors).

Envelope fields
FieldMeaning
dataThe tool result. Its shape is in the OpenAPI document and the MCP tool schema.
complianceage_gate (21), notice, helpline, helpline_url, ai_generated, terms_url, privacy_url. Relay it to the people your agent serves.
meta.request_idQuote it in support requests and when rating a response.
meta.as_ofWhen the response was produced.
meta.model_versionThe model version, for example dc-intel-1.0.0. Log it with every signal.
meta.data_freshness_secondsAge of the data behind the response, or null.
meta.cachehit, miss, stale or none.
meta.dayThe Eastern calendar day the response is for.
billing.statusfree, charged, not_charged or replayed. You are charged only on charged.
billing.units / price_microsUnits used and the price in millionths of a US dollar.
billing.payer / balance_microsWho paid (none, account or receipt) and the remaining prepaid balance when a key was used.

Prices are integers in micro-USD: one US dollar is 1,000,000 micro-USD. Free responses are cacheable for five minutes. Paid and error responses are never cacheable.

Authentication

Free tools: none. Do not send a key. Paid tools: one of two ways, which you can mix. Paying is the signup, so there is no form to fill in first.

  • Pay per call. Call the tool, receive an HTTP 402 payment challenge, pay it, and repeat the request with the credential. The receipt is your identity.
  • API key. A key spends a prepaid balance. Send it in the X-DC-Api-Key header. Keys look like dc_sk_live_ followed by an id, a secret and a checksum, so secret scanners can find a leak. Only a hash is stored. A key is shown once and can be rotated or revoked.
API key (when paid lines are open)
curl 'https://deepchampai.com/api/agent/v1/ranked-picks?sport=nba' \
  -H 'X-DC-Api-Key: dc_sk_live_<your key>' \
  -H 'Idempotency-Key: 6f1c1a52-0a0e-4f6e-9a77-5f0f5d1c9d11'

Never put a key in client-side code, a public repository or a prompt. Paid access is not open yet: only the free tools are live today.

Payments and the 402 flow

A paid call without a valid credential returns HTTP 402 Payment Required (REST) or JSON-RPC error -32042 (MCP) with a payment challenge: the price, the methods we accept and an expiry. Your agent pays and repeats the same request with the credential. We use the HTTP payment authentication scheme (the Machine Payments Protocol), so clients such as the Stripe link CLI and the mppx library do the exchange for you.

the 402 flow
# 1. Call a paid tool without a credential
curl -i 'https://deepchampai.com/api/agent/v1/ranked-picks?sport=nba'
#    HTTP/1.1 402 Payment Required
#    WWW-Authenticate: Payment ...   (the challenge: price, methods, expiry)

# 2. Pay the challenge with a method your agent supports, for example a card token
npx @stripe/link-cli mpp pay '<url>'

# 3. Repeat the same request with the credential and a stable idempotency key
curl -i 'https://deepchampai.com/api/agent/v1/ranked-picks?sport=nba' \
  -H 'Authorization: Payment <credential>' \
  -H 'Idempotency-Key: 6f1c1a52-0a0e-4f6e-9a77-5f0f5d1c9d11'
#    HTTP/1.1 200 OK   (billing.status = charged, Payment-Receipt header)

Rails and their status

  • Card, by Shared Payment Token Coming soon npx @stripe/link-cli mpp pay <url>
    Machine Payments Protocol (MPP). US businesses, all states.
  • Stablecoin (USDC) over MPP and x402 Coming soon
    US customers except New York. Switches on after our payment processor completes its stablecoin access review.
  • stripe pay, zero fee (enterprise) Coming soon stripe pay @deepchampai --dry-run
    Enterprise settles at a 5% discount on this rail.
  • Invoice (enterprise) Coming soon
    From $500 per month.
  • Stripe Projects Coming soon stripe projects add deepchamp/edge-api
    Listing in progress.
  • API key Coming soon
    Never put a key in client-side code, a public repository or a prompt.

No payment rail is live yet. The free tools never ask for payment.

Payment minimums set what can be paid per call: a card payment needs at least $0.50 and a stablecoin payment at least one cent. Calls priced below that, such as the calculators at half a cent, are prepaid-only: fund a balance and use an API key. The 402 response says which methods can pay the call in front of you.

Idempotency

Send an Idempotency-Key header (up to 120 characters) on every paid call. A repeat with the same key and the same request returns the stored response with billing.status of replayed and does not charge again. The same key with a different request is 409 idempotency_conflict. A payment receipt buys exactly one successful call; a receipt whose call failed can be reused.

When you are charged

You are charged only when billing.status is charged. You are never charged for a client or server error, a rate limit, a paused line, a provider fault, a timeout, a refused or filtered answer, or a replay. Every error body says billable: false. If a charge ever lands for a call that failed, it is refunded.

We only ever receive payments. DeepChamp never sends money. Card payments settle to our Stripe balance; stablecoin is converted to dollars by Stripe; every paid call has a receipt and a ledger entry.

Tools

One row per tool, from the catalog the MCP server, the OpenAPI document and the agent card also read. A tool is live only when its product line is on. The live price book is deepchampai.com/api/agent/v1/pricing and always wins over this table.

Tools
ToolRoutePriceStatus
get_daily_slate
Games for a sport and Eastern date with start times, status, and plain-language rest and schedule context.
GET /slate/todayFree, no signupLive
get_matchup_context
Schedule context for one game: each team's last result, rest, and next game. Facts and our computed context only.
GET /matchup/{sport}/{date}/{slug}Free, no signupLive
request_capability
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.
POST /request-capabilityFree, no signupLive
rate_response
Say whether a response was useful, with a reason code, tied to its request id. No free text. Free, never charged, no signup.
POST /rate-responseFree, no signupLive
get_edge_score
Our edge score, probability and confidence tier for one pick or game market.
GET /edge-score$0.010 per callComing soon
get_ranked_picks
Ranked signals for a sport and day with edge score, probability, tier, rationale and factors.
GET /ranked-picks$0.030 per callComing soon
get_matchup_brief
Our written research brief for one game, built from our signals.
GET /briefs/matchup$0.050 per callComing soon
get_prop_brief
Our written research brief for one player prop signal.
GET /briefs/prop$0.050 per callComing soon
get_research_card
A compact research card for one pick.
GET /research-card$0.020 per callComing soon
get_ranked_news
News ranked, deduped and scored by us, with attribution and link.
GET /news$0.020 per callComing soon
get_game_news
Ranked stories linked to one game.
GET /news/by-game$0.010 per callComing soon
search_news
Search our ranked story index.
GET /news/search$0.020 per callComing soon
get_daily_intel
Our daily digest with changed-since cursors.
GET /intel/daily$0.020 per callComing soon
get_injury_lineup_intel
Injury and lineup items in our words.
GET /intel/injuries-lineups$0.020 per callComing soon
get_live_game_intel
Derived live flags and what changed between polls.
GET /live/intel$0.020 per callComing soon
get_market_signals
Derived gap buckets and movement direction. No prices.
GET /markets/signals$0.030 per callComing soon
evaluate_market
Arithmetic on your own price plus our probability: fair value, edge, expected value, Kelly.
POST /evaluate-market$0.015 per callComing soon
get_signal_archive
Our issued signals by day, as issued.
GET /archive/signals$0.010 per pageComing soon
get_news_archive
Our ranked stories by day, as issued.
GET /archive/news$0.010 per pageComing soon
ask_jev
A natural-language research question in; an answer and structured evidence cards out.
POST /askfrom $0.040, up to $0.10Coming soon
subscribe
Signed webhook or event stream for new ranked news, live flags and market signals.
POST /subscriptions$0.005 per eventComing soon
fair_value
No-margin fair probability from prices you supply, proportional or power method. Prices as american, decimal, probability or cents.
POST /tools/fair-value$0.005 per callComing soon
best_price
The best of the quotes you supply per outcome. Arithmetic only.
POST /tools/best-price$0.005 per callComing soon
kelly_math
Kelly sizing arithmetic on your price and probability. Enterprise keys of accounts that attested a human decides before any stake only; others get 403 human_attestation_required, never charged.
POST /tools/kelly-math$0.005 per callComing soon
hedge_calculator
Plain arithmetic on your stake and prices. Enterprise keys of accounts that attested a human decides before any stake only; others get 403 human_attestation_required, never charged.
POST /tools/hedge$0.005 per callComing soon
jev_rank
Orders your candidate list by our edge score and confidence where we have a signal; unmatched candidates follow.
POST /tools/jev-rank$0.020 per callComing soon
match_event
Maps free text plus a date to our game ids with a confidence. The text is never stored.
GET /match-event$0.005 per callComing soon
ev_scan
Batch edge and expected value over selections whose prices you supply. Stake sizing appears only for accounts that attested a human decides before any stake.
POST /tools/ev-scan$0.025 per callComing soon
list_subscriptions
Your webhook subscriptions. Needs an enterprise key; free.
GET /subscriptionsFree, no signupComing soon
get_usage
Today's requests, spend, remaining cap and prepaid balance for your account. Needs an enterprise key; free.
GET /usageFree, no signupComing soon
get_evaluation
Calibration and closing-line value of our own signals. Status is unproven until 500 graded signals exist, and it reports calibration only, with no performance claims. Free, no signup.
GET /evaluationFree, no signupComing soon
send_feedback
Tell us whether a response was useful. Free, no signup; nothing personal is stored.
POST /feedbackFree, no signupComing soon
calc_kelly
Sizing fraction for your price and your probability, capped at 5 percent of bankroll. Enterprise keys of accounts that attested a human decides before any stake only.
POST /calc/kelly$0.005 per callComing soon
calc_fair_value
No-margin fair probability from one or two of your own prices.
POST /calc/fair-value$0.005 per callComing soon
calc_hedge
The stake on the other side that equalizes the result, from your own prices. Enterprise keys of accounts that attested a human decides before any stake only.
POST /calc/hedge$0.005 per callComing soon
calc_parlay
Combined price, and combined probability if you supply yours, for two to twenty legs.
POST /calc/parlay$0.005 per callComing soon
calc_best_price
Rank up to 50 prices you supply for the same outcome by payout.
POST /calc/best-price$0.005 per callComing soon
calc_ev_scan
Expected value per unit for up to 50 price and probability pairs you supply.
POST /calc/ev-scan$0.005 per callComing soon

Routes are relative to https://deepchampai.com/api/agent/v1. Free tools also have these routes: GET /slate/{date}, GET /matchup/{sport}/{date}/{slug}, GET /pricing, GET /catalog and GET /health.

Feedback endpoints

Two calls are always free and never billed. They are how you tell us what you need, and they decide what we build next.

  • POST /request-capability (MCP tool request_capability): ask for a sport, a market type, a format, a latency or a history we do not offer. Enumerated fields plus one optional 280-character note. Ten a day per account.
  • POST /rate-response (MCP tool rate_response): rate a response you received as useful or not useful, with a reason when it was not. One rating per request_id.

Notes that contain an at-sign, a link, a long number or a key-shaped token are dropped, not stored. Do not put secrets or personal data in a note.

Signal verification

Every ranked signal carries signal_id, content_hash, model_version and issued_at. The signal_id is stable for identical content. The issued_at time is when we first issued exactly that content. The content_hash is a hash of the immutable fields of the signal, so you can check that the copy you hold is the copy we issued.

Signals are appended to a hash-chained ledger. Ask the verify endpoint whether the hash you hold matches: it returns the issue time, the model version, the chain position and a matches flag. Verification opens with the picks line. The ledger exists for the people who receive signals and for our own evaluation. It records issue times and content, never outcomes.

How to evaluate DeepChamp shows how to use these fields to measure the intelligence yourself.

Errors

Errors use one shape and are never billed or cached:

error body
{
  "error": {
    "code": "rate_limited",
    "message": "The free tier allows 20 requests a minute and 300 a day per client. Retry in 43 seconds.",
    "request_id": "req_0000000000sample0000",
    "billable": false,
    "retry_after_seconds": 43
  }
}

A 429 or 503 may carry a Retry-After header. Back off, then retry; use the same Idempotency-Key for a paid retry.

Error codes
HTTPcodeMeaning
400invalid_requestA parameter is missing, unknown or out of range. The message names the field.
401invalid_api_keyThe key is missing, malformed or revoked.
402payment_requiredThe call is paid. The response carries the payment challenge and the price; pay it and repeat the request.
402insufficient_fundsThe prepaid balance cannot cover the call. Top up and retry.
403key_disabledThe key was disabled.
403account_suspendedThe account was suspended.
403bannedAccess was withdrawn after repeated failures or abuse.
403scope_forbiddenThe key is not allowed to call this tool.
404not_foundThe route or the item does not exist, or the line is not open yet.
404outside_free_windowA free read outside yesterday, today and tomorrow in US Eastern time.
409idempotency_conflictThe same Idempotency-Key was used with a different request.
409request_in_progressAn identical request is still running. Wait and retry with the same key.
409receipt_already_usedA payment receipt buys one successful call. Pay again for a different request.
409replay_unavailableThe response is never stored (evaluate_market). Not charged; resend with a new key to recompute.
413request_too_largeThe request body is over the size cap.
429rate_limitedToo many requests. Wait the number of seconds in Retry-After.
429concurrency_limitedToo many calls in flight for this key.
429daily_cap_exceededThe daily call or spend cap was reached.
429spend_cap_exceededA spend cap on the key, account or wallet was reached.
429session_cap_exceededThe per-session cap was reached (ask_jev).
503line_disabledThe product line is not open or was paused. Not charged.
503paid_lane_disabledPaid access is not open yet.
503kill_switchBillable calls are paused. Free reads stay up.
503provider_unavailableAn upstream provider is unavailable. Not charged.
503lane_budget_exhaustedThe line reached its daily budget. Not charged.
503service_unavailableA temporary fault. Retry with backoff.
504timeoutThe call timed out on our side. Not charged.

Limits

Free tools: 20 requests a minute and 300 a day per IP address, cached for 5 minutes, for today minus 1 to today plus 1 (US Eastern), one sport per call and at most 30 games. Sports: nba, nfl, mlb, nhl, cfb, cbb, wnba.

Paid callers get higher limits by tier. These are beta defaults. Per-key overrides exist and the numbers may change; the response headers and error bodies always state the limit that applies.

Caller tiers (beta defaults)
TierRequests a minuteIn flightDaily spend cap
Free (web)202none (free tools only)
Pay per call602$5
Developer1204$25
Partner3006$250

Using many keys, addresses or accounts to get around a limit breaks the Acceptable Use Policy. There is no service level in the beta.

Versioning and status

The API path is versioned (/api/agent/v1). Adding fields and tools is not a breaking change; build clients that ignore fields they do not know. We give 30 days' notice of a breaking change to a paid tool unless a law, a data provider or security requires faster action. The model version is in meta.model_version on every response.

Status: deepchampai.com/api/agent/v1/health returns liveness and which lines are on, with no upstream calls.

Terms

Using the API means accepting two documents. Read them before you build.

  • Beta API Terms: the licence, what you may not do, payments and refunds, relaying the compliance object, no automated wagering, and liability.
  • Acceptable Use Policy: adults only, no operators without a written agreement, no resale or scraping, honest presentation.
  • Privacy Policy.

Compliance

Research and information, not betting advice. No outcomes are guaranteed. Adults 21+ only, where legal. Every response carries a compliance object. When your product shows our output, or something built from it, to a person, show the notice and the helpline in readable text, say that it is AI-generated, and say it is for adults 21 and over. Show it at the start of each session and with every response that presents a ranked signal, a probability or an edge score.

compliance object
{
  "age_gate": 21,
  "notice": "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.",
  "helpline": "1-800-MY-RESET",
  "helpline_url": "https://www.1800myreset.org",
  "ai_generated": true,
  "terms_url": "https://deepchampai.com/terms/api",
  "privacy_url": "https://deepchampai.com/privacy"
}

A person makes every betting decision. Automated wagering with our output is not allowed. If someone shows signs of distress about gambling, show the helpline and do not use an output to encourage more betting. Problem gambling help: call or text 1-800-MY-RESET, or chat at 1800myreset.org.

Changelog

: Beta opens: free daily slate and matchup context

The free daily slate and matchup context are live over REST and MCP with no signup. OpenAPI 3.1, the MCP server card, the A2A agent card, agents.md and the deepchamp-edge skill are published. The catalog of paid lines is listed as coming soon. The Beta API Terms and the Acceptable Use Policy are published. The waitlist and the pricing survey are open.