Help Center

Contracts

Issuing a contract

Write a line, set odds, post collateral, and cap your exposure.

A contract is a fixed-odds line you offer to the market. As the issuer you write the question, name the sides and set their decimal odds, post collateral to back the line, and cap how much you can lose. Anyone who takes the other side is a taker.

Issue one from the Create form (/markets/create), which posts to POST /api/v1/markets.

Before you start

Requirement Why
A signed-in account Contracts are tied to your account as the creator.
A linked wallet Required to post collateral and back your line. The form shows Connect your wallet until one is linked.
MARKETS_WRITE scope If you drive Rivalizer through an API key, that key must carry this scope.

Steps

  1. Pick a bet type (optional template). The form opens with a template picker grouped by category (Sports, Crypto, etc.). Choosing a template loads a tailored builder. The supported bet types are: spread, moneyline / head-to-head, total (over/under), player prop, outright, finishing order (exacta/trifecta), handicap, range/buckets, parlay, and yes/no prop.
  2. Pose the question. Fill the builder's bracketed fields. The form composes the contract title and the side labels for you and shows a live preview of what takers will see. You don't type the title directly — it is derived from your inputs.
  3. Set the outcomes and odds. Every contract needs 2 to 10 sides, each with a label and decimal odds greater than 1.00. Use the one-tap presets (1:2 → 1.50, Even → 2.00, 2:1 → 3.00, 3:1 → 4.00, 5:1 → 6.00) or type your own. The form translates decimals into plain language (e.g. "$1 wins $1.00 → $2.00 back · even money").
  4. Choose a category and optionally upload a card image (PNG/JPEG/WebP/GIF, max 5 MB).
  5. Write the resolution details (description). Spell out exactly how the contract settles so there's no ambiguity (e.g. "Settles on the official final score. Pushes refund both sides.").
  6. Post collateral and set capacity. See the table below.
  7. Set visibility — Public or Private. See Visibility.
  8. Optionally list it on your store. See Listing on your store.
  9. Choose a resolver. See Resolvers.
  10. Set the close date and time. The contract stops accepting takers at this moment. It must be in the future.
  11. Issue the contract. The button is disabled until every validation passes. Private contracts redirect you to the contract with the invite already in the URL.

Collateral & capacity

You back your own line. Both amounts are entered in USDC and stored as base units (the form multiplies your dollar input by 1,000,000 before sending maxExposure and totalCollateral).

Field Meaning Required
Max exposure / capacity Caps how much you can lose. It sets the total capacity rivals can take against your line. Must be greater than 0. Yes
Initial collateral The collateral posted up front to back the contract. Optional (defaults to 0)

The collateral token is the active chain's USDC, resolved from platform Chain settings (Base in production).

You can add collateral later with Deposit collateral (POST /api/v1/markets/:id/deposit-collateral) — issuer only, and only once the on-chain contract address is set.

Hosting fee: Issuers never set or receive a fee. The platform applies its own hosting fee automatically, read live from owner settings — you don't enter one.

Visibility

Visibility Who can see it Notes
PUBLIC Anyone; appears in the public marketplace. Blocked for regular users when the platform is in invite-only mode (admins exempt).
PRIVATE Only people with the invite code (plus you and admins). Requires an invite code. See invites-and-private-contracts.

Resolvers

Pick how the winning outcome is decided. Platform (ADMIN) is what's live — resolved by the Rivalizer team. The other options exist in the form:

Resolver Label How it settles
ADMIN Platform Resolved by the Rivalizer team. (Live.)
UMA Public oracle Settled by the UMA optimistic oracle.
CONSENSUS Judge consensus A panel of judges votes.
AI_JUDGE AI judge An AI model adjudicates.

Listing on your store

If you already have a store, the form shows a List on my storefront checkbox (on by default) that attaches the new contract to your store. The server verifies you own that store — you can only list a contract on a store you own. No store yet? The form links you to Create a store first. See stores-and-storefronts.

Editing while unaccepted, and lock-on-accept

You can edit a contract only while no one has taken it. Once anyone takes the other side, the contract locks and edits are rejected.

State Editable?
No positions and no open/matched trophy wagers Yes — PATCH /api/v1/markets/:id
Anyone has accepted (a cash position or an open/matched trophy wager exists) No — returns "This contract is locked — someone has already accepted it."
Resolved or cancelled No

While unaccepted, the issuer can change the title, description, category, close time, and add to / remove from a store (storeId). A settled contract can never be edited.

Other issuer actions:

  • Close to new takers: POST /api/v1/markets/:id/close (issuer only).
  • See who took it: POST /api/v1/markets/:id/acceptors — lists every taker's side, stake, and acceptance time. Issuer (or admin) only.