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 h4 {font-size: 12px; font-weight: 700; color: var(--text-primary) !important; margin: 14px 0 6px; text-transform: uppercase; letter-spacing: 0.04em;}
.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;}
.step-card-body h4:first-child {margin-top: 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; text-transform: none; letter-spacing: normal; margin-top: 0;}
.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 prediction markets exchange, covering sports and elections. Through the ISV program, partners embed ProphetX's exchange infrastructure — markets, order execution, KYC, and settlement — directly into their own product.

The integration approach: you control the product experience; ProphetX manages regulatory compliance underneath. 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 backend systems to market data, user onboarding, order placement, and settlement webhooks.

2
→

Build your front end

Full UI/UX ownership; surface ProphetX markets alongside your own content.

3

ProphetX handles the rest

Trade execution, settlement, KYC, and CFTC compliance run on ProphetX infrastructure.


Integration fundamentals

Work through these with your ProphetX contact during onboarding. Each setup 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
Choose one
Which model did ProphetX provision?
Agreed during commercial onboarding · Cannot change at runtime
Managed Wallet
ProphetX hosts payments
formerly Individual Wallet
ProphetX holds and manages the wallet — you plug in, and we handle all funds movement on our own payment rails. Your users get individual ProphetX wallets and go through our payment-provider modals, essentially the same flow a ProphetX consumer gets.
ProphetX provides the payment UI
Best fit if you don't want to build wallet infrastructure or hold customer funds yourself. See Setup 2 below.
Partner-Funded
You manage payments
formerly Standing Fund
You maintain a standing balance, funded through your own payment rails; ProphetX manages settlement against that balance and nets out daily. You own the user-facing financial layer — wallets, deposits, withdrawals, payment providers, and funding-related support.
You build the payment UI
ProphetX owns trade execution and settlement only. See Setup 2 below for reconciliation details.
2

Deposits & withdrawals

What moves money, and who's responsible for it

If you're on Managed Wallet: 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

Surface at point where users add funds

ProphetX-hosted, branded, configurable. Supported providers: Aeropay, Crypto, Wire, Debit cards — and more coming soon.

Withdrawal modal

Users cash out

Settlement credits to the user's wallet — no wire to you. Same providers as deposit, except Crypto.

Partner-Funded partners There are no modals to use. You pre-fund a bank account that funds all customer trades, with ledgering tracked at the individual-user level underneath it. ProphetX sends a daily reconciliation file recording every transaction, and on an agreed-upon cadence, that reconciliation is how you can see whether the account needs to be topped up.
3

Onboarding

Getting a user from unknown to verified and trade-ready

Every user must have a verified phone number and a verified email on file before they can trade, no matter which wallet model you're on — but how you get there is flexible. ProphetX supports three integration patterns, depending on how much of the onboarding UI you want to own:

What you buildWhat you sendWhat you get backCovers email verification?
One-Click ModalNothing — embed our modalPhone number + a challenge value (last 4 of SSN), entered inside the modalA KYC resultNo — you must verify email yourself, separately
Lookup-AssistedYour own screensName, phone number, and a challenge question (DOB or last 4 of SSN) — same inputs as One-Click, just collected on your own UIThe full PII record we retrieve, plus a KYC resultNo — same mechanism as One-Click
Full Self-CollectionComplete onboarding screens, including your own phone/email verificationThe full data set, submitted to our KYC account-creation endpointA KYC resultYes — it's part of your own flow

The right fit depends on your priorities: One-Click is the fastest path if you don't have an onboarding flow yet and don't want to touch PII at all. Lookup-Assisted keeps your screens light while still giving you the full user record on your side. Full Self-Collection is the way to go if you already have (or want full control over) your own onboarding UX — and since you're the one collecting the address, run it through ProphetX's address-normalization endpoint before submitting; a malformed address is the most common cause of a failed KYC check on this path, and normalizing it upfront cuts failures significantly.

Explicit callout One-Click and Lookup-Assisted both run on the same underlying verification mechanism — the only difference is whether ProphetX's modal or your own screens collect the inputs. Email verification isn't part of either flow, so partners using either path need their own separate way of getting a verified email on file.

What happens after a failed check

A failed check isn't permanent, regardless of which path you're on: users get a limited number of retries, and if those run out, they're routed to document upload for manual review rather than left stuck. Worth noting: a failed attempt doesn't create a ProphetX account at all — no account exists until KYC succeeds.

4

Terms & Conditions

Every user must accept before placing their first trade

Every user must explicitly accept ProphetX's Terms and Conditions before placing their first trade. T&C acceptance must be captured and confirmed to ProphetX.

Option A

ProphetX T&C modal

Pre-built modal; user reviews and accepts inside it. Acceptance recorded with timestamp and automatically confirmed to ProphetX. Nothing to build on your side.

Option B

Co-joined T&C page

Combine ProphetX T&Cs with your own on a single page. ProphetX branding must be prominent. Reach out for design requirements before building.

Tracking T&C acceptance is one-time per user. ProphetX logs the acceptance timestamp and document version. If ProphetX updates its T&Cs, users must re-accept before trading.
5

Attribution

"Powered by ProphetX" requirement

On certain screens — Terms & Conditions, modals, trade entry, and trade confirmation — ProphetX requires a "Powered by ProphetX" message.

6

Support & escalation structure

Who talks to your customers, and when ProphetX steps in directly

ProphetX sets up two shared Slack channels with each partner — one for dev, one for ops. Whenever an issue arises, it gets surfaced into the relevant channel.

The general model: your ops team communicates directly with your own customers most of the time. But there are specific instances where your customers receive communication directly from ProphetX instead — that's covered below.

When ProphetX contacts your customers directly

Deposit & withdrawal notifications

  • Managed Wallet: ProphetX owns the payment providers and the user wallets, so we send automated transactional emails directly to users for deposits and withdrawals (confirmations, failures, etc.).
  • Partner-Funded: you own the user wallets directly, so these emails don't apply — you're free to send whatever transaction notifications you'd like, in your own voice and on your own timing.

Direct outreach on negative account scenarios

This applies the same way regardless of wallet model. Beyond routine deposit/withdrawal confirmations, ProphetX sometimes needs to reach a user directly about something negative on their account — this spans a range of situations, not just KYC, including:

  • Identity verification issues (document unreadable, underage, OFAC/PEP/deceased match)
  • Payment problems (a declined deposit, a name mismatch on a payment method, a returned check, a chargeback)
  • Account restrictions or closures (suspicious activity, multiple deposits/withdrawals with no trades, account closed by ProphetX)
  • Compliance reviews (source-of-funds requests, terms-of-service review, promo requirement not met)
You're kept in the loop Whenever ProphetX reaches out to a user directly for one of these, we cc your operations email group so your team has visibility into what was sent and why.
7

Certification & go-live

The last step before production

Once you've designed your UI/UX, integrated with our APIs, and tested the flows, you can reach out to us for a certification session. This happens over a call — you show us your screens, and we test through a set of scenarios together to confirm everything is working. If it is, we flip you over to production.


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 setups 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 Managed Wallet 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 onboarding 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.