Model owners
The write lane
Enrol a model, commit predictions before each event, reveal after settlement. The model itself is never transmitted. What leaves your infrastructure is a hash before the event and a settled prediction after it.
Integration — submit a model, or read the registry
One programmatic surface with two directions. Model owners commit predictions before their events; buyers read the scored records that come out the other side. Both run on the same ledger, and neither requires trusting us about what the other did.
Live
§ 01Who integrates
The write lane and the read lane serve different parties with opposite interests. That is the point — a record only means something when the party producing it and the party consuming it are not the same.
The write lane
Enrol a model, commit predictions before each event, reveal after settlement. The model itself is never transmitted. What leaves your infrastructure is a hash before the event and a settled prediction after it.
The read lane
Query scored records in one format across every enrolled model, including the ones that failed. Re-derive any figure yourself from the published artifacts — the API is a convenience, not the source of truth.
§ 02What you integrate with
An integrator gets contract-bound access to the same three products the terminal runs on — every one of them with a public proof surface a CTO can verify before any commercial conversation.
The production prediction engine. Per-sport models, conformally calibrated, conformity-evaluated against held-out outcomes. Live performance refreshed hourly; every retrain ships its full held-out metric panel — ROC-AUC, F1, MCC, accuracy — into the public audit_models ledger.
See the engineeringDuring the alpha, every prediction was cryptographically anchored to a public, immutable ledger before kickoff — the record is sealed; the official chain continues it. SHA-256 content hashes daily; OpenTimestamps proof upgraded to a Bitcoin Merkle-path attestation. Append-only at the database level — UPDATE and DELETE rejected by trigger. Clone the repo, run verify.py against any sample, check the math yourself.
See the auditA purpose-built LLM grounded in the audited pipeline. Ask it why a model called a game the way it did, which prior anchored row supports the answer, how a sport has been trending — every numerical claim cites the exact audit_trail entry it was computed from. The same prediction provenance the rest of the stack carries, in natural language.
Preview SplitWinnerGPT§ 03Access
Model owners commit predictions before their events. Buyers read the scored records that come out the other side. Same ledger, same protocol, opposite directions.
Enrolment
Open
Ingest
Commit & reveal
Registry read
Scored records
Nothing is metered by prediction volume. A record costs what it costs to score, not what the signal is worth.
The protocol
Predictions are hashed and anchored before their events and revealed only after settlement. By the time a pick is readable here it is already history, so we cannot act on what we are validating — and that is a property you can verify rather than a promise you have to accept.
§ 04Access model
Every /v1/* call authenticates with a per-tenant bearer token. Sandbox tokens reach the mock layer; enterprise tokens reach the real data after the request signing + rate-limit middleware. Our first-party clients additionally sign every request; B2B integrators don't (their credentials aren't extractable from a public bundle, so the additional layer would buy nothing). One credential per enterprise client — rotation is revoke-then-mint, never concurrent, matching the single-credential pull-and-cache contract.
§ 05API surface
What's available today, at a glance. Full reference in the public OpenAPI spec — every route, every schema, every error code.
/v1/quant
Models, calibration drift, conformal coverage, season calendar, performance — the methodology-page payload.
GET /v1/quant.live.performance.aggregate → win rate, Brier, ECE, n
/v1/audit
Immutable prediction ledger — summary, recent receipts, per-anchor detail, operational pulse.
GET /v1/audit/recent?limit=10 → last 10 receipts with content hashes
/v1/predictions
Today's slate, per-pick intel, per-pick model — the full prediction surface, available under contract.
GET /v1/predictions/today → slate (full-signal fields redacted off-contract)
/v1/insights
Nineteen analyser surfaces — team form, sport-specific edges, model performance breakdowns.
GET /v1/insights/:sport → 19-dimension per-sport analyser output
/v1/engineering
CI signal for the api repo — test count, coverage, lint/typecheck/audit booleans, last passing build.
GET /v1/engineering → test_count, coverage_pct, last_passing_sha
/v1/config
Public operational invariants — sports-day rollover, disclosure window.
GET /v1/config → sports_day_rollover_et, disclosure_window_days
/v1/incidents
Disclosed operational incidents under the 7-day disclosure protocol.
GET /v1/incidents → disclosed incidents, ordered most-recent first
/v1/training
Recent model registrations from the immutable audit_models ledger.
GET /v1/training/recent?limit=10 → last 10 model registrations
/v1/kalshi
Predictions ⇄ Kalshi market matching: tickers, sub-titles, series config. Enterprise customers fetch live prices from Kalshi directly with their own credentials — we do the matching, you do the trading.
GET /v1/kalshi/match → ticker IDs (prices stripped at enterprise)
The OpenAPI 3.1 spec is the contract of record. Every route, every Zod-validated request and response shape, every error code. Browse the rendered reference at splitwinner.com/docs, or grab the raw JSON straight from api.splitwinner.com/openapi.json — they're the same source, refreshed live from the api.
§ 06Example response
One row from /v1/audit/recent. Cryptographic receipt only — the prediction value is redacted on the live feed and revealed via /v1/audit/settled after the game grades.
GET /v1/audit/recent?limit=1
{
"data": [
{
"id": "5a31a8e2-7c4f-4b9d-9e21-a3f8c0d2e1b4",
"ml_prediction_id": "8b2c-1f3a-49d8-…",
"content_hash": "sha256:abc123def456789…",
"short_hash": "abc123def4567890",
"recorded_at": "2026-06-11T08:00:00Z",
"original_created_at": "2026-06-11T05:14:32Z",
"game_time": "2026-06-11T19:00:00Z",
"passed_conformal": true,
"prediction_mode": "live",
"conformal_set_size": 1,
"model_id": "2025_2026_nfl_ml_1",
"lead_seconds": 49520,
"called_before_kickoff": true
}
],
"count": 1
}Bearer authentication on every /v1/* request. Full schema + every other route in the OpenAPI spec.
§ 07SLA + status
Published commitments, contract floors, and the live pulse when the ledger is anchoring. No green dashboard theater — when the pipeline is paused, nothing here pretends otherwise.
Uptime
99.5%
Measured monthly · contract floor
p95 latency
< 500 ms
Prediction endpoints · over rolling 30 days
Drop cadence
Daily, pre-game
Published before each day's first kickoff while the pipeline runs
Pre-launch revenue. No public customer references yet — the live pulse above is the operational record. References available after first call under NDA.
§ 08Verify before buying
Three steps. No account. No NDA. The verifier is plain Python — what your security team would run against the production feed, except they can run it now against the public ledger.
01
curl https://api.splitwinner.com/openapi.json
02
git clone https://github.com/SplitWinner/audit_trail_alpha
03
cd audit_trail && python verify.py content --predictions sample/predictions_full.json
What you would verify under contract, same code, today.
Verifier works on your machine. Ready to talk pricing and SLA?
Talk to enterprise§ 09How access works
Sandbox path
01
Email + Supabase Auth. No credit card. No NDA. No call.
02
One click in the portal. Mint a key. Copy it once — we never store the raw value.
03
Hit any /v1/* endpoint at api.splitwinner.com with Authorization: Bearer <key>. Plausibly-live mocked responses across the full surface — every endpoint, every field, every error code, 10 rpm.
Contract path (enterprise)
01
Submit the application form in the portal: company, use case, intended tier, expected monthly volume. Founder-led review within the business week.
02
Mutual NDA to share pricing, SLA, support tier, reference customers. Same week, digital signature.
03
MSA, DPA, AUP, and a custom SLA template. Term length, support tier, and integration scope sized to the use case. ACH or wire — no card, no payment processor.
04
Paid-tier key issued by ops. Sandbox-equivalent walkthrough with the team that built the api. White-glove from day one.
What it costs
Annual enterprise contracts. Pricing reflects coverage scope, support intensity, and response SLA. The floor is institutional-grade, not indie — if your integration runs on a single engineer's credit card, the sandbox is the right lane and enterprise is not. Specifics under NDA.
Research-only and regulator engagements get a lighter conversation shape — say so in the application.
How we bill
Direct invoice, ACH or wire, against the signed contract. No payment processor, no merchant-of-record, no card fees, no platform fees inflating your invoice. We don't carry chargeback risk, you don't carry vendor-counterparty risk.
§ 10Questions
The five questions that show up before any other commercial conversation.
Daily, pre-game predictions in JSON, published each morning before kickoff while the pipeline runs. v1 cadence is locked at daily — game-level predictions, not real-time, not in-game.
Game-level only. Moneyline today, two spread models in production, more spread models adding next, totals on the roadmap. No player props, no in-game, no DFS in v1.
Versioned /v1/* surface, Bearer API key plus HMAC-signed requests, RFC 7807 problem+json errors, X-RateLimit-* headers, OpenAPI spec as the contract. The public verifier is part of the contract, not an extra.
Yes. Every prediction carries an audit_trail row id and a content hash. Clone github.com/SplitWinner/audit_trail_alpha, run verify.py against the day in question, check the GitHub commit timestamp. Three steps, no special tooling, no contact with us required.
Run the verifier yourselfv1: 99.5% uptime, p95 latency under 500 ms on prediction endpoints.
Sandbox in five minutes via the developer portal, or apply for enterprise access and hear from the team that built the api within the business week.