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 '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.
claude mcp add --transport http deepchamp https:/ / deepchampai.com/ mcpClaude Desktop and Cursor
Add this to the MCP settings file (claude_desktop_config.json, or .cursor/mcp.json) and restart the client.
{
"mcpServers": {
"deepchamp": {
"url": "https://deepchampai.com/mcp"
}
}
}VS Code
Add this to .vscode/mcp.json in your workspace.
{
"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.
https:/ / deepchampai.com/ mcpInstall the agent skill
npx skills add https:/ / deepchampai.com --skill deepchamp-edge -g -yThe 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).
| Field | Meaning |
|---|---|
data | The tool result. Its shape is in the OpenAPI document and the MCP tool schema. |
compliance | age_gate (21), notice, helpline, helpline_url, ai_generated, terms_url, privacy_url. Relay it to the people your agent serves. |
meta.request_id | Quote it in support requests and when rating a response. |
meta.as_of | When the response was produced. |
meta.model_version | The model version, for example dc-intel-1.0.0. Log it with every signal. |
meta.data_freshness_seconds | Age of the data behind the response, or null. |
meta.cache | hit, miss, stale or none. |
meta.day | The Eastern calendar day the response is for. |
billing.status | free, charged, not_charged or replayed. You are charged only on charged. |
billing.units / price_micros | Units used and the price in millionths of a US dollar. |
billing.payer / balance_micros | Who 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-Keyheader. Keys look likedc_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.
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.
# 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.
| Tool | Route | Price | Status |
|---|---|---|---|
get_daily_slateGames for a sport and Eastern date with start times, status, and plain-language rest and schedule context. | GET /slate/today | Free, no signup | Live |
get_matchup_contextSchedule 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 signup | Live |
request_capabilityTell 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-capability | Free, no signup | Live |
rate_responseSay whether a response was useful, with a reason code, tied to its request id. No free text. Free, never charged, no signup. | POST /rate-response | Free, no signup | Live |
get_edge_scoreOur edge score, probability and confidence tier for one pick or game market. | GET /edge-score | $0.010 per call | Coming soon |
get_ranked_picksRanked signals for a sport and day with edge score, probability, tier, rationale and factors. | GET /ranked-picks | $0.030 per call | Coming soon |
get_matchup_briefOur written research brief for one game, built from our signals. | GET /briefs/matchup | $0.050 per call | Coming soon |
get_prop_briefOur written research brief for one player prop signal. | GET /briefs/prop | $0.050 per call | Coming soon |
get_research_cardA compact research card for one pick. | GET /research-card | $0.020 per call | Coming soon |
get_ranked_newsNews ranked, deduped and scored by us, with attribution and link. | GET /news | $0.020 per call | Coming soon |
get_game_newsRanked stories linked to one game. | GET /news/by-game | $0.010 per call | Coming soon |
search_newsSearch our ranked story index. | GET /news/search | $0.020 per call | Coming soon |
get_daily_intelOur daily digest with changed-since cursors. | GET /intel/daily | $0.020 per call | Coming soon |
get_injury_lineup_intelInjury and lineup items in our words. | GET /intel/injuries-lineups | $0.020 per call | Coming soon |
get_live_game_intelDerived live flags and what changed between polls. | GET /live/intel | $0.020 per call | Coming soon |
get_market_signalsDerived gap buckets and movement direction. No prices. | GET /markets/signals | $0.030 per call | Coming soon |
evaluate_marketArithmetic on your own price plus our probability: fair value, edge, expected value, Kelly. | POST /evaluate-market | $0.015 per call | Coming soon |
get_signal_archiveOur issued signals by day, as issued. | GET /archive/signals | $0.010 per page | Coming soon |
get_news_archiveOur ranked stories by day, as issued. | GET /archive/news | $0.010 per page | Coming soon |
ask_jevA natural-language research question in; an answer and structured evidence cards out. | POST /ask | from $0.040, up to $0.10 | Coming soon |
subscribeSigned webhook or event stream for new ranked news, live flags and market signals. | POST /subscriptions | $0.005 per event | Coming soon |
fair_valueNo-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 call | Coming soon |
best_priceThe best of the quotes you supply per outcome. Arithmetic only. | POST /tools/best-price | $0.005 per call | Coming soon |
kelly_mathKelly 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 call | Coming soon |
hedge_calculatorPlain 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 call | Coming soon |
jev_rankOrders your candidate list by our edge score and confidence where we have a signal; unmatched candidates follow. | POST /tools/jev-rank | $0.020 per call | Coming soon |
match_eventMaps free text plus a date to our game ids with a confidence. The text is never stored. | GET /match-event | $0.005 per call | Coming soon |
ev_scanBatch 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 call | Coming soon |
list_subscriptionsYour webhook subscriptions. Needs an enterprise key; free. | GET /subscriptions | Free, no signup | Coming soon |
get_usageToday's requests, spend, remaining cap and prepaid balance for your account. Needs an enterprise key; free. | GET /usage | Free, no signup | Coming soon |
get_evaluationCalibration 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 /evaluation | Free, no signup | Coming soon |
send_feedbackTell us whether a response was useful. Free, no signup; nothing personal is stored. | POST /feedback | Free, no signup | Coming soon |
calc_kellySizing 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 call | Coming soon |
calc_fair_valueNo-margin fair probability from one or two of your own prices. | POST /calc/fair-value | $0.005 per call | Coming soon |
calc_hedgeThe 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 call | Coming soon |
calc_parlayCombined price, and combined probability if you supply yours, for two to twenty legs. | POST /calc/parlay | $0.005 per call | Coming soon |
calc_best_priceRank up to 50 prices you supply for the same outcome by payout. | POST /calc/best-price | $0.005 per call | Coming soon |
calc_ev_scanExpected value per unit for up to 50 price and probability pairs you supply. | POST /calc/ev-scan | $0.005 per call | Coming 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 toolrequest_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 toolrate_response): rate a response you received as useful or not useful, with a reason when it was not. One rating perrequest_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": {
"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.
| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_request | A parameter is missing, unknown or out of range. The message names the field. |
| 401 | invalid_api_key | The key is missing, malformed or revoked. |
| 402 | payment_required | The call is paid. The response carries the payment challenge and the price; pay it and repeat the request. |
| 402 | insufficient_funds | The prepaid balance cannot cover the call. Top up and retry. |
| 403 | key_disabled | The key was disabled. |
| 403 | account_suspended | The account was suspended. |
| 403 | banned | Access was withdrawn after repeated failures or abuse. |
| 403 | scope_forbidden | The key is not allowed to call this tool. |
| 404 | not_found | The route or the item does not exist, or the line is not open yet. |
| 404 | outside_free_window | A free read outside yesterday, today and tomorrow in US Eastern time. |
| 409 | idempotency_conflict | The same Idempotency-Key was used with a different request. |
| 409 | request_in_progress | An identical request is still running. Wait and retry with the same key. |
| 409 | receipt_already_used | A payment receipt buys one successful call. Pay again for a different request. |
| 409 | replay_unavailable | The response is never stored (evaluate_market). Not charged; resend with a new key to recompute. |
| 413 | request_too_large | The request body is over the size cap. |
| 429 | rate_limited | Too many requests. Wait the number of seconds in Retry-After. |
| 429 | concurrency_limited | Too many calls in flight for this key. |
| 429 | daily_cap_exceeded | The daily call or spend cap was reached. |
| 429 | spend_cap_exceeded | A spend cap on the key, account or wallet was reached. |
| 429 | session_cap_exceeded | The per-session cap was reached (ask_jev). |
| 503 | line_disabled | The product line is not open or was paused. Not charged. |
| 503 | paid_lane_disabled | Paid access is not open yet. |
| 503 | kill_switch | Billable calls are paused. Free reads stay up. |
| 503 | provider_unavailable | An upstream provider is unavailable. Not charged. |
| 503 | lane_budget_exhausted | The line reached its daily budget. Not charged. |
| 503 | service_unavailable | A temporary fault. Retry with backoff. |
| 504 | timeout | The 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.
| Tier | Requests a minute | In flight | Daily spend cap |
|---|---|---|---|
| Free (web) | 20 | 2 | none (free tools only) |
| Pay per call | 60 | 2 | $5 |
| Developer | 120 | 4 | $25 |
| Partner | 300 | 6 | $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.
{
"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.