If you are an introducing broker, read Start here — IB instead. The
technical surface in this space is the same for you, but the responsibility split, the path
to production, KYC ownership and funds handling all differ, and that page carries your
versions of them.
Prerequisites: a shared Slack channel with us and a named integration lead. Everything on this page
moves through that channel. If you do not have both yet, the first gate in
Path to production is how you get them. See Getting help.
Who this is for
Engineers building againstCreateVendorOrder, Transfer, the KYC API and the gRPC streams as an ISV. If you are an IB or an FCM, your account structure, KYC ownership and order surface differ — see the IB space.
The four things that break most ISV integrations
Every one of these has cost a partner weeks. Read all four before you write code.- The identity model. You get two firms, not one.
GET /v1/whoamireturns the wrong one for addressing your users, and building a participant ID from it raises a security alert against your own account. → Firms, participants and accounts - Scales.
priceScaleandfractionalQtyScaleare multipliers read per instrument, and they multiply together. A hard-coded divisor is right on most markets and wrong by 10× on the rest. → Money on the wire PENDING.PENDINGmeans the outcome is unknown to us, not that the order is queued. Recovery is a byte-identical resubmit with the sameidempotency_key; a new key places a second order. → Order lifecycle- Settlement ownership. We credit the participant’s clearing account at resolution. If you also credit your user from your own ledger, every settled position pays out twice. → What you own, what we own
What “beta” means here
Concretely: RPCs have been removed without a changelog entry before.CreateFundedOrder, PreviewFundedOrder and OdfSweep were removed on 2026-08-06 and a partner found out through reflection when their money path broke. Subscribe to the changelog and pin the proto bundle you build against — see Protos and SDKs.
What you own, what we own
Read this before you design your ledger. Two of the rows below have caused partners to ship code switched off in production rather than risk a double payout.You never hold participant funds
You hold one pooled balance with us. You move cash into a participant account with aTransfer call, and it stays there: fills, realized profit, released collateral and settlement credits all land in the participant’s clearing account and become buying power. Nothing needs sweeping after a fill or a settlement.
We credit the participant’s clearing account at resolution. Winning contracts settle at 0.00, and the credit is applied by us.
Transfers are structurally one-directional: you name only the participant account, we resolve your funding account from your configured relationship, and direction is fixed by the reason (DEPOSIT, WITHDRAWAL, VENDOR_FEES). Transfers to your own firm, between participants, or to an external destination are impossible. See Transfers.
Responsibility table
R-3 of the end-user agreement requirements forbids hosting modified, excerpted or re-rendered
copies of the four legal documents. Link to the copies on
polymarketexchange.com. Do not serve
them from your own storage or a Drive folder.Payment capture branding
You own the deposit and withdrawal GUI. We are the DCM, and both the NFA and the CFTC care what that screen says: the user must know funds are going to Polymarket Exchange. Production deposit rails are wire only as of August 2026.CheckoutAPI and Aeropay return 403 method not permitted for ISVs — those surfaces are not entitled for you.
Where an ISV differs from an IB
Six things differ between an ISV and an IB: who owns end-user KYC, whether you can rely on your own, holding customer funds, the omnibus account, the account structure and the agreements you sign. Who you are has the table, and lists every page in this space where the IB implementation diverges.Path to production
The sequence below is the whole path. ISV provisioning is fully manual on our side today — the institutional portal’s self-service API keys are built for market makers and its upload forms do not apply to you.Preprod access does not require a signed agreement. One partner lost roughly three weeks
believing it did. Start Gate 1 and Gate 2 in parallel.
The gates
1
Intake
You submit: legal name, email address, phone number, business address, and the legal name of
your funding entity (Wallet Co).We return: a shared Slack channel and a named integration lead.
Owner: you.
Turnaround:
VERIFY 2
Agreements
You submit: an executed Vendor Connectivity Agreement (VCA) and Fee Agreement. The Fee
Agreement is not public and is sent to you during discussions.Agreement completion is a repeated rejection loop. Before you send it back, check:
- signature pages 8, 10, 11 and 15 are all signed,
- the W9 TIN matches the entry in the portal exactly,
- CP575 is attached as EIN confirmation.
VERIFY 3
Funding entity (Wallet Co)
You submit: your Wallet Co legal entity details.Your funding entity must exist and be active before your firm’s API credentials are enabled.
This gate blocks credential issue, not just funding.We return: confirmation that the funding relationship is configured. We resolve your funding
account from that relationship on every
Transfer; you never name it.
Owner: you.
Turnaround: VERIFY 4
Preprod keypair and credentials
You submit: the public half of an RSA 2048 keypair you generate yourself. See
Generate your keys.Keys are per environment. A preprod keypair does not work in production. You generate a second
keypair for production at Gate 7.We return: your Client ID and your two firm names — the participant firm and the
clearing-member firm. Record both; see Firms, participants and accounts.Owner: shared — you generate, we register.
Turnaround:
VERIFY 5
Scopes and entitlements
You submit: the list of surfaces you need — market data, positions, reports, cash movements,
KYC, gRPC reflection.Scopes are granted server-side against your client. Do not request them on the token exchange.
After we add a grant you must re-mint your access token or you will keep getting
PERMISSION_DENIED. Six of eight ISVs discovered their scope set by hitting that error. See
Scopes and entitlements.We return: the grants, on your client, in that environment.
Owner: us.
Turnaround: VERIFY 6
Preprod build and UAT
You submit: a completed UAT test plan.Two things you cannot test in preprod, so plan around them now:
- Markets do not resolve in preprod. Instruments reach
INSTRUMENT_STATE_EXPIREDin large batches — 363, 455, 544 and 549 in a single session — and none resolve. One partner asked six times over 40 days to test a settlement flow and never could. - Books are thin and intermittent.
pmsimis the only liquidity provider, coverage runs from ~48% ofastatc-symbols down to ~0.1% ofaec-atp, and depth sits at the edges (0.06 bid). Because your order surface is fill-or-kill only, a thin book blocks you completely while market makers are unaffected.
VERIFY 7
Production keypair and credentials
You submit: a separate production keypair’s public half, generated fresh. Never reuse the
preprod key.We return: production Client ID and production firm names.Owner: shared.
Turnaround:
At the account and user level the legal name must be a physical person’s name, or NFA
reports error. One partner’s production record was entered as the company name. Check your
production records before first traffic.
VERIFY 8
Fund the production pool
You submit: a wire. Production deposit rails are wire only as of August 2026.We return: the balance on
GetFundingAccountBalance, which is the pool’s source of truth.Owner: you.
Turnaround: VERIFY 9
Production traffic
Start with one real participant through the full loop: KYC submit →
kyc.approved webhook →
Transfer → CreateVendorOrder → drop copy fill → balance check.Production has a status page at status.polymarketexchange.com. Preprod has none.Owner: you.
Turnaround: n/a.Participant type casing
If you are creating participants through an administrative path, the spelling of the type matters and differs by path: one path validates against a vocabulary spelling ISV uppercase and compares case-sensitively, while adopt and provision endpoints normalize withstrings.ToLower. The registry’s canonical lowercase isv has been rejected with HTTP 400 on the case-sensitive path. introducing_broker is spelled identically in both vocabularies, so only the ISV path is affected.
Go-live checklist
Copy this into your own tracker.- Shared Slack channel open, integration lead named
- Intake submitted: legal name, email, phone, address, Wallet Co legal name
- VCA executed — signature pages 8, 10, 11, 15 signed
- Fee Agreement executed
- W9 TIN matches the portal entry; CP575 attached
- Wallet Co exists and is active
- Preprod RSA 2048 keypair generated; public half sent; private half never left your infrastructure
- Preprod Client ID received
- Both firm names recorded:
...-api-participantand...-api-clearing-member - Scope list agreed and granted; token re-minted after the grant
- Token client honours
expires_inminus 30 s, with no hardcoded 180 - Both scales read per instrument from reference data; no hard-coded divisor
-
PENDINGrecovery path resubmits the sameidempotency_keywith a byte-identical body -
kyc.approvedwebhook registered, signing secret stored, dedupe onevent_id -
participantIdrecorded against your user row from the webhook, never constructed - No production SSN reuse; test SSNs never shared across users
- Drop copy consumer running with
resume_tokenpersistence - Settlement crediting from your own ledger is off
- Deposit and withdrawal screens reviewed with your integration lead
- Legal agreements linked from
polymarketexchange.com, not re-hosted - UAT test plan signed off
- Production keypair generated separately; production Client ID received
- Production account and user records use a physical person’s legal name
- Production pool funded by wire
- One end-to-end participant loop completed in production
institutional@polymarket.us is the published route for new enquiries. It is not the right route once you are live on preprod — use your shared Slack channel.
What can go wrong
institutional@polymarket.us is the published route for new enquiries. It is not the right route once you are live on preprod — use your shared Slack channel.