Business Overview

Welcome to ProphetX ISV Docs

Brand green (--green, #299479) is NOT part of this token set
on purpose: it does not clear AA contrast for small body text
against a light background, so it stays reserved for links,
accents, labels, and heading-sized/bold text — never used as
a paragraph text color. Regular body copy always reads
through --text-primary / --text-secondary above so it flips
correctly between light and dark. */
--text-primary: var(--black);
--text-secondary: var(--gray-600);
--text-muted: var(--gray-400);
--page-bg: #ebebeb;
--surface-bg: #ffffff;
--surface-bg-alt: var(--gray-50);
--border-color: var(--gray-200);
--code-bg: var(--gray-100);
--code-text: #b91c1c;
--callout-bg: var(--green-bg);
--callout-text: #166534;
--callout-warn-bg: #fffbeb;
--callout-warn-text: #92400e;
--callout-info-bg: #eff6ff;
--callout-info-text: #1e40af;
color-scheme: light dark;
}

@media (prefers-color-scheme: dark) {:root { --text-primary: #f5f5f5; --text-secondary: #c7cad1; --text-muted: #8b8f98; --page-bg: #14161a; --surface-bg: #1c1f24; --surface-bg-alt: #22262c; --border-color: #33373e; --code-bg: #2a2e35; --code-text: #ff8a80; --callout-bg: #10251d; --callout-text: #86efac; --callout-warn-bg: #2a2110; --callout-warn-text: #fbbf24; --callout-info-bg: #101f2e; --callout-info-text: #93c5fd; }}

  • {box-sizing: border-box; margin: 0; padding: 0;}

/* ── EMBED HARDENING ──────────────────────────────────
ReadMe.io's own theme CSS targets bare tags (h1, h2, p, etc.)
with its own color/opacity rules — sometimes as part of a
scroll-reveal fade that never resolves for content embedded
via a custom HTML block. Because it targets plain tags, not
our classes, generic text (headings, paragraphs) can render
near-invisible while our classed components (.how-card, etc.)
look fine. Scoping every rule under .px-isv and forcing
opacity/color with !important defeats that override. */
.px-isv, .px-isv * {opacity: 1 !important;}
.px-isv {background: var(--page-bg) !important; color: var(--text-primary) !important; font-family: var(--font); font-size: 14px;}

body {font-family: var(--font); background: var(--page-bg) !important; color: var(--text-primary) !important; font-size: 14px;}

/ ── CHROME ──────────────────────────────────────────── /
.site-header {background: var(--black); color: white !important; padding: 13px 28px; display: flex; align-items: center; gap: 10px; position: sticky; top: 0; z-index: 100; border-bottom: 2px solid var(--green);}
.logo {color: var(--green) !important; font-weight: 800; font-size: 15px;}
.sep {color: #333 !important;}
.crumb {color: #9ca3af !important; font-size: 13px;}
.spacer {flex: 1;}
.pill {background: #1a1a1a; border: 1px solid #333; color: #9ca3af !important; font-size: 11px; padding: 3px 10px; border-radius: 20px;}
.pill em {color: #fbbf24 !important; font-style: normal; font-weight: 700;}

.page-wrap {display: flex; min-height: 100vh;}

/ ── MAIN ────────────────────────────────────────────── /
.main {flex: 1; padding: 40px 52px 80px; max-width: 820px;}

/ ── TYPE ────────────────────────────────────────────── /
.px-isv h1 {font-size: 30px; font-weight: 800; color: var(--text-primary) !important; letter-spacing: -0.5px; line-height: 1.2; margin-bottom: 16px;}
.px-isv h2 {font-size: 18px; font-weight: 700; color: var(--text-primary) !important; margin: 44px 0 12px; padding-top: 8px; border-top: 1px solid var(--border-color);}
.px-isv h3 {font-size: 13.5px; font-weight: 700; color: var(--text-primary) !important; margin: 16px 0 7px;}
.px-isv p {margin-bottom: 12px; line-height: 1.75; color: var(--text-primary) !important;}
.px-isv ul {padding-left: 20px; margin-bottom: 12px;}
.px-isv li {margin-bottom: 5px; line-height: 1.6; color: var(--text-primary) !important;}
.px-isv a {color: var(--green) !important; text-decoration: none; font-weight: 500;}
.px-isv a:hover {text-decoration: underline;}
.px-isv code {font-family: var(--mono); font-size: 12px; background: var(--code-bg) !important; padding: 2px 5px; border-radius: 3px; color: var(--code-text) !important;}
.px-isv hr {border: none; border-top: 1px solid var(--border-color); margin: 36px 0;}

/ ── TABLES ──────────────────────────────────────────── /
.px-isv table {width: 100%; border-collapse: collapse; font-size: 13px; margin: 14px 0 20px; background: var(--surface-bg) !important;}
.px-isv thead tr, .px-isv thead {background: var(--black) !important;}
.px-isv th {padding: 9px 14px; text-align: left; font-weight: 700; font-size: 12px; color: var(--green-light) !important; background: var(--black) !important;}
.px-isv td {padding: 9px 14px; border-bottom: 1px solid var(--border-color); vertical-align: top; line-height: 1.55; color: var(--text-primary) !important; background: var(--surface-bg) !important;}
.px-isv tr:last-child td {border-bottom: none;}
.px-isv tr:nth-child(even) td {background: var(--surface-bg-alt) !important;}

/ ── CALLOUTS ────────────────────────────────────────── /
.callout {border-left: 3px solid var(--green); background: var(--callout-bg); color: var(--text-primary) !important; padding: 12px 16px; border-radius: 0 8px 8px 0; margin: 14px 0; font-size: 13px; line-height: 1.65;}
.callout.warn {border-color: #d97706; background: var(--callout-warn-bg);}
.callout.info {border-color: #3b82f6; background: var(--callout-info-bg);}
.callout strong {font-size: 10px; text-transform: uppercase; letter-spacing: 0.07em; display: block; margin-bottom: 4px; color: var(--callout-text) !important; font-weight: 800;}
.callout.warn strong {color: var(--callout-warn-text) !important;}
.callout.info strong {color: var(--callout-info-text) !important;}

/ ── HOW IT WORKS ────────────────────────────────────── /
.how-cards {display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; margin: 20px 0;}
.how-card {border: 1px solid var(--border-color); border-radius: 10px; padding: 18px; background: var(--surface-bg); position: relative;}
.how-card .step-num {width: 28px; height: 28px; background: var(--green); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white !important; font-size: 12px; font-weight: 800; margin-bottom: 12px;}
.how-card .arrow {position: absolute; right: -19px; top: 50%; transform: translateY(-50%); color: var(--green) !important; font-size: 18px; font-weight: 700; z-index: 1;}
.how-card h3 {font-size: 13px; margin: 0 0 8px; color: var(--text-primary) !important;}
.how-card p {font-size: 12px; color: var(--text-secondary) !important; margin: 0; line-height: 1.55;}

/ ── STEP CARDS (numbered decisions) ─────────────────── /
.step-card {border: 1px solid var(--border-color); border-radius: 10px; overflow: hidden; margin-bottom: 20px; background: var(--surface-bg);}
.step-card-header {display: flex; align-items: center; gap: 14px; padding: 14px 20px; background: var(--black);}
.step-num-lg {width: 32px; height: 32px; border-radius: 50%; background: var(--green); color: white !important; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 800; flex-shrink: 0;}
.step-card-header h3 {font-size: 14px; font-weight: 700; color: white !important; margin: 0;}
.step-card-header .step-sub {font-size: 12px; color: var(--gray-400) !important; margin-top: 2px;}
.step-card-body {padding: 20px 22px;}
.step-card-body p {font-size: 13.5px;}
.step-card-body p:last-child {margin-bottom: 0;}

/ ── OPTION SPLIT ────────────────────────────────────── /
.option-split {display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 14px 0;}
.option-box {border: 1px solid var(--border-color); border-radius: 8px; padding: 16px; background: var(--surface-bg-alt);}
.option-box.highlighted {border-color: var(--green); background: var(--callout-bg);}
.option-label {font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.07em; color: var(--text-muted) !important; margin-bottom: 6px;}
.option-box.highlighted .option-label {color: var(--green) !important;}
.option-box h4 {font-size: 13px; font-weight: 700; margin-bottom: 6px; color: var(--text-primary) !important;}
.option-box p {font-size: 12.5px; color: var(--text-secondary) !important; margin: 0; line-height: 1.55;}
.option-box.highlighted p {color: var(--callout-text) !important;}

/ ── WALLET DIAGRAM (compact) ────────────────────────── /
.wallet-diagram {margin: 18px 0;}
.wd-center {display: flex; flex-direction: column; align-items: center;}
.wd-decision {background: var(--black); color: white !important; border-radius: 10px; padding: 13px 28px; text-align: center; max-width: 360px; width: 100%;}
.wd-decision .wd-label {font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--green) !important; font-weight: 700; margin-bottom: 3px;}
.wd-decision .wd-title {font-size: 13.5px; font-weight: 700;}
.wd-decision .wd-sub {font-size: 11px; color: var(--gray-400) !important; margin-top: 3px;}
.wd-fork {display: flex; width: 100%; max-width: 680px;}
.wd-fork-l {flex: 1; height: 24px; border-right: 2px solid var(--border-color);}
.wd-fork-gap {width: 40px; flex-shrink: 0;}
.wd-fork-r {flex: 1; height: 24px; border-left: 2px solid var(--border-color);}
.wd-branches {display: flex; width: 100%; max-width: 680px; gap: 40px;}
.wd-branch {flex: 1; display: flex; flex-direction: column; align-items: center;}
.wd-conn {width: 2px; height: 18px; background: var(--border-color);}
.wd-model {border: 2px solid var(--green); background: var(--green-dark); color: white !important; border-radius: 8px; padding: 13px 15px; text-align: center; width: 100%;}
.wd-model .wm-tag {font-size: 10px; font-weight: 800; color: var(--green-light) !important; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 3px;}
.wd-model .wm-name {font-size: 13px; font-weight: 700; margin-bottom: 4px;}
.wd-model .wm-eg {font-size: 11px; color: var(--gray-400) !important; font-style: italic; margin-bottom: 7px;}
.wd-model .wm-desc {font-size: 11.5px; color: var(--gray-400) !important; line-height: 1.5;}
.wd-result {border-radius: 8px; padding: 10px 13px; text-align: center; width: 100%; font-size: 12px;}
.wd-result.plain {background: var(--surface-bg-alt); border: 1px solid var(--border-color);}
.wd-result.green {background: var(--callout-bg); border: 1px solid var(--green-light);}
.wd-result .wr-title {font-weight: 700; margin-bottom: 3px;}
.wd-result.plain .wr-title {color: var(--text-primary) !important;}
.wd-result.green .wr-title {color: var(--callout-text) !important;}
.wd-result .wr-desc {font-size: 11.5px; line-height: 1.5;}
.wd-result.plain .wr-desc {color: var(--text-secondary) !important;}
.wd-result.green .wr-desc {color: var(--callout-text) !important;}

/ ── NEXT NAV ────────────────────────────────────────── /
.next-nav {display: flex; justify-content: flex-end; margin-top: 48px; padding-top: 24px; border-top: 1px solid var(--border-color);}
.next-nav a {padding: 12px 20px; border: 1px solid var(--border-color); border-radius: 8px; display: flex; flex-direction: column; align-items: flex-end; text-decoration: none; color: var(--text-primary) !important;}
.next-nav a:hover {border-color: var(--text-primary);}
.next-nav .nav-label {font-size: 10px; color: var(--text-muted) !important; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 3px;}
.next-nav .nav-title {font-size: 13px; font-weight: 700;}

Welcome to the ProphetX ISV!

ProphetX is a CFTC-regulated sports prediction market exchange. Through the ISV program, partners embed ProphetX's exchange infrastructure — markets, order execution, KYC, and settlement — directly into their own product. You own the product experience. ProphetX handles the regulated layer underneath.

Before you write any code, there are four integration decisions to work through with your ProphetX contact. This page walks you through each one. The API is REST-based with webhook delivery for real-time updates, all requests are authenticated, and sandbox credentials are available so you can test against a live-shaped environment before going to production.


How the integration works

1

Integrate to ISV APIs

Connect to ProphetX's ISV API suite — market data, user onboarding, order placement, and settlement webhooks — all server-to-server from your backend.

2

Build your front end

You own the full UI and UX. Show ProphetX markets alongside your own content however you choose. ProphetX is invisible to your end users.

3

ProphetX handles the rest

Trade execution, settlement, KYC, and CFTC compliance all run on ProphetX. Your users trade; ProphetX settles.


Four things to decide before you build

Work through these with your ProphetX contact during onboarding. Each decision affects how your integration is structured and what you need to build.

1

Wallet model

Determines whether you use ProphetX payment rails or your own

Your wallet model is set during commercial onboarding and cannot be changed at runtime. It determines how money moves between your platform and ProphetX — and whether you build your own payment flows or embed ProphetX's.

Choose one
Which model did ProphetX provision?
Agreed during commercial onboarding · Cannot change at runtime
Standing Fund
You manage payments
You pre-fund a standing fund wallet at ProphetX via bank wire. You own user wallets and payment flows on your side. ProphetX debits the standing fund wallet per trade and notifies you via webhook.
You build the payment UI
Use your own payment rails. ProphetX has no role in the deposit or withdrawal flow. Daily reconciliation + net settlement on agreed cadence.
Individual Wallets
ProphetX hosts payments
Each user has their own ProphetX wallet, created on KYC success. Users deposit directly through ProphetX-hosted modals you embed.
ProphetX provides the payment UI
Embed ProphetX-hosted deposit and withdrawal modals in your app. See Decision 2 below.
2

Deposits & withdrawals

Individual wallet model only

If you're on the Individual wallet model, ProphetX provides pre-built deposit and withdrawal modals you embed directly in your app. Users complete the deposit or withdrawal inside the modal — funds go directly to and from their individual ProphetX wallet. You never handle the money.

Deposit modal

Users fund their ProphetX wallet

Surface the ProphetX deposit modal at the point in your app where users add funds. Supported providers: Aeropay, ZeroHash, and wire. The modal is ProphetX-hosted and branded, but configurable to match your app's theme.

Withdrawal modal

Users withdraw their winnings

Surface the ProphetX withdrawal modal where users cash out. Settlement credits go directly to the user's wallet — no wire to you. Withdrawal is processed through the same payment providers as deposit: Aeropay, ZeroHash, and wire.

Standing Fund partners If you're on the Standing Fund model, skip this section — you own the deposit and withdrawal flow entirely using your own payment rails. See the Wallets section for reconciliation and net settlement details.
3

Terms & Conditions

CFTC requirement — all ISV users must accept ProphetX T&Cs before trading

CFTC regulations require that every user trading on ProphetX has explicitly accepted ProphetX's Terms and Conditions. T&C acceptance must be captured and confirmed to ProphetX before a user can place their first trade. You have two options for how to handle this:

Option A

ProphetX T&C modal

ProphetX provides a pre-built T&C modal you surface as part of your onboarding flow. The user reviews and accepts the ProphetX T&C documents inside the modal. Acceptance is recorded with a timestamp and automatically confirmed to ProphetX. Nothing to build on your side.

Option B

Co-joined T&C page

If you want to combine ProphetX T&Cs with your own, you can design a single T&C page. ProphetX has specific design requirements for this approach — ProphetX branding must be prominently displayed on the page and on all T&C documents. Reach out to your ProphetX contact for the design requirements before building.

How acceptance is tracked T&C acceptance is a one-time step per user. ProphetX keeps a log of when each document was accepted and which version was in effect at the time. If ProphetX updates its T&C documents, users will need to re-accept before trading again — your integration will be notified so you can prompt them at the right moment.
4

KYC — user identity verification

CFTC requirement — all ISV users must be KYC'd before trading

Even though you own the customer relationship, CFTC regulations require ProphetX to know and monitor every user trading on the platform at the individual level. User identity must be tied to every trade. ProphetX runs KYC and AML — you choose how user information gets to us.

You have two options depending on whether you already collect identity information from your users:

Option A — Already collecting KYC data

Send PII to ProphetX behind the scenes

If you already collect identity details from your users as part of your own onboarding, you can pass that information directly to ProphetX via the account creation API — no additional user-facing step required. ProphetX runs KYC and AML in the background and returns a status: PENDING, SUCCESS, or FAILURE. The user never sees ProphetX — it's entirely invisible to them.

Option B — Not yet collecting KYC data

Use the ProphetX Verified modal

ProphetX provides a Verified modal you can embed in your onboarding flow. The user enters their phone number and last 4 digits of their SSN — the modal then pulls their full KYC details automatically and presents them for confirmation. Once the user confirms, ProphetX runs KYC in the background. No manual data entry of full PII required.

Before calling KYC — verify email and phone first CFTC requires ProphetX to have a verified phone number and email address on record for every user before they can trade. Your onboarding flow must verify both before calling the ProphetX account creation endpoint — ProphetX will reject unverified contact details at the API level.

How KYC statuses work

StatusWhat it meansWhat to do
PENDINGKYC check is in progressPoll GET /private/v1/users/USERID/kyc until status resolves
SUCCESSUser is verified and can tradeProceed to T&C acceptance, then deposit (if Individual model)
FAILUREKYC could not be completed automaticallyDirect user to contact [email protected] for manual review

What's in these docs

SectionWhat it covers
Technical OverviewFull technical orientation — request path, path prefixes, reading order, and the complete glossary. Read this before writing code.
User ManagementCreating users, running KYC, recording T&C acceptance, and managing wallets. The four decisions above map directly to this section.
Order ManagementBrowsing fixtures and markets, placing market orders, and building parlays.
Push IntegrationRegistering a webhook receiver so ProphetX pushes order and settlement events to you in real time.
Frontend IntegrationsEmbedding ProphetX-hosted deposit, withdrawal, KYC, and T&C components. Relevant primarily for Individual wallet model partners.
Error ReferenceAll error codes, rate limits, and configuration constants.
Ready to dive in? Head to Technical Overview for the full technical orientation, then work through each section in sequence. If you haven't agreed your wallet model and KYC approach with your ProphetX contact yet, do that first — it affects every section that follows.

If anything is unclear or missing, reach out to your ProphetX integration contact. We'd rather hear from you early than have you guessing.