Contracts
Invites & private contracts
Per-contract and per-store invite codes, plus invite-only mode.
Rivalizer has two independent invite layers plus a platform-wide invite-only mode. This guide covers all three and how to share access.
The two invite layers
| Layer | Where it's set | Gates access to | Auto-generated? |
|---|---|---|---|
| Per-contract invite code | The Create form (Private visibility) | One specific private contract | No — you type it. The form requires a code for private contracts. |
| Per-store invite code | The store settings (private store) | An entire private store page | Yes — left blank, the server generates one. |
The two are separate: a private store gates the store page, while each private contract gates that one contract. A private contract is never listed publicly regardless of any store.
Private contracts
When you set a contract's visibility to PRIVATE, you must supply an invite code. After that:
- The contract never appears in public listings — its existence is hidden.
- Anyone fetching it without a valid code gets "Market not found" (so the code can't be guessed by probing).
- The issuer and admins can always view it without the code.
- The invite code is only ever returned to the issuer — it's stripped from everyone else's view.
Sharing an invite link
Both layers share access through a link with an invite= query parameter, not a bare code. The link grants view-and-take access to whoever holds it.
| Target | Link format |
|---|---|
| Private contract | /markets/:id?invite=CODE |
| Private store | /stores/:slug?invite=CODE |
How to get the link:
- Contract — On a private contract you issued, the "Share this private contract" card shows the full link and a Copy button. (The card reads: "Anyone with this link can view and take your contract.")
- Store — In your store settings, the Copy link button next to the invite code copies a ready-to-share store link (
/stores/<slug>?invite=<code>), not just the raw code.
When you create a private contract, you're redirected straight to it with the invite already in the URL, ready to copy.
Entering an invite code as a visitor
If you open a private contract link without a valid code (or the code is wrong), you'll see an invite gate — a card prompting you to enter the code shared by the issuer. Submitting it reloads the contract at /markets/:id?invite=<code>. A wrong code shows: "That invite code didn't match this contract."
Platform invite-only mode
The platform owner can switch the whole site into invite-only mode (an owner access setting, inviteOnly). This is framed by jurisdiction, not as the platform being closed.
What changes when it's on:
| Behaviour | Invite-only ON | Normal |
|---|---|---|
| Public contracts stay visible in the marketplace | Yes | Yes |
| Signups | Open | Open |
| Betting on a public contract (regular users) | Blocked, with a jurisdiction message | Allowed |
| Posting a public contract (regular users) | Blocked, with a jurisdiction message | Allowed |
| Creating private lines + inviting others | Allowed | Allowed |
| Admins (the house) | Exempt — can still post/bet public | — |
The messages shown to regular users:
- Trying to post a public contract: "Your jurisdiction doesn't allow public contracts yet. Set your own line as invite-only and invite others — we'll notify you once it is open to the public."
- Trying to bet on a public contract: "Your jurisdiction doesn't allow public bets. You can still use the invite only as it is available. Set your own line and invite others. We'll notify you once it is open to the public."
So even in invite-only mode the marketplace stays browsable — the gate is enforced at bet/post time, and the path forward for users is to create their own private lines and share invite links.