Welcome to the team at Peter Partner — PolyChallenge is the launch
partner on PolySimulator’s Prop-Firm API.
PolySimulator is the trading engine your challenge runs on: a native account
per candidate, real-time Polymarket execution, and a clean filled-trade feed
your evaluation engine reads. You own the candidate journey and every pass/fail
decision; we make sure every simulated fill behind it is real, isolated, and
auditable. New to the API? Read Overview first, then come back
here.
PolyChallenge is the first tenant on the API. The API is generic and reusable
across prop firms — nothing in it is PolyChallenge-specific, so your integration
is the reference implementation future tenants follow.
Your sign-up + payment. The candidate ID you mint becomes the external_id.
Provision them
POST /v1/partner/users (register) → POST /v1/partner/users/{id}/login-link
(email them in) → POST /v1/partner/accounts (create the challenge account
with its starting balance and stage: "challenge").
Candidate trades
They click the login link and trade their challenge account against live
Polymarket prices in the native UI.
Your engine evaluates
Poll GET /v1/partner/accounts/{id} (equity, drawdown) and
GET /v1/partner/accounts/{id}/trades (the fills), and apply your rules.
Pass / fail / reset
On pass, provision the next stage (funded). On fail or restart,
close (archives the
account, frees any open orders) or
reset (restarts the
same account back to its starting balance).
Stages move through your labels (demo → challenge → funded); each
transition is a fresh POST /v1/partner/accounts call with the next stage.
close and reset are live and preserve the full audit trail.
Your server-to-server X-API-Key, scoped to your tenant. Ask for a separate read-only key if you want to split provisioning from reporting.
Staging base URL
Build and test against this in place of https://api.polysimulator.com until you go live.
Redirect allowlist entries
Send us the PolyChallenge portal domains you want login links to redirect into. Until added, redirects default to PolySimulator URLs only.
Starting-balance bounds
Defaults are $100–$1,000,000 per account. Tell us if your plans need a different range.
Rate-limit tier
The eval tenant is 10 RPS / 600 RPM per tenant; production tiers are higher. Don’t hard-code it — read the X-RateLimit-* headers and honour 429Retry-After. If your cohort reconciliation needs more, we’ll raise the cap. See Rate Limits & Errors.
Support contact
A direct channel (email / shared Slack-or-Telegram) for integration and go-live coordination.
The trades feed is your primary data source. Follow next_cursor until
null, persist the newest (filled_at, order_id), and stop at the first
already-seen fill on each poll. See
Rate Limits & Errors → Pagination.
2. Compute realized P&L from fills
realized_pnl is null in v1; reconstruct it from each fill’s
side / price / quantity / fee. unrealized_pnl (= equity − starting_balance) is returned live, so drawdown checks can read the account
envelope directly. See the Endpoint Reference.
3. Branch on the error code, retry on 429/5xx
Branch on the error field + HTTP status, never the message prose. Retry
429 (honour Retry-After) and 5xx with backoff; treat *_CONFLICT as a
caller bug (reused external_id). See the
error reference.
4. Expect 404 until your tenant is enabled
The whole /v1/partner/* surface returns 404 until your tenant is turned on.
A 404 NOT_FOUND on a path you expect means your tenant isn’t enabled yet —
ping your contact. See Overview.