Opinion Labs (opinion.trade) runs on BNB Chain and uses a Gnosis Safe to hold positions, similar in structure to Polymarket. Orders are EIP-712 signed by your EOA on behalf of the Safe.Documentation Index
Fetch the complete documentation index at: https://docs.delphimarkets.com/llms.txt
Use this file to discover all available pages before exploring further.
At a glance
| Chain | BNB Chain (chainId 56) |
| Wallet model | Gnosis Safe, signed by EOA |
| Quote token | USDT (18 decimals on BSC) |
| Signing | Client-side (EIP-712) |
| Auth | Opinion Labs API key + EOA private key |
Prerequisites
- An Opinion Labs account (opinion.trade)
- USDT on BNB Chain in your Opinion Labs Safe wallet
- The EOA private key that controls the Safe
- A Delphi API key
One-time setup
Opinion Labs has two pre-trading steps: looking up your Safe address and approving the exchange contracts.1. Get your Safe address
2. Approve the exchange contracts
The Safe needs to approve the CTF Exchange contract to spend your USDT and Conditional Tokens. This is a one-time transaction per Safe.enableTrading submits a Safe transaction that sets approvals for both USDT (ERC-20) and Conditional Tokens (ERC-1155). After it confirms, you can place orders.
3. Register credentials with Delphi
Build and place an order
Build parameters
| Field | Type | Description |
|---|---|---|
marketId | number | Opinion Labs numeric market ID. |
tokenId | string | Outcome token ID (uint256 decimal string). |
side | 'BUY' | 'SELL' | |
price | number | Price per share in [0.01, 0.99]. |
amount | number | USDT amount, human-readable (e.g. 3 for 3 USDT). |
safeAddress | string | Your Opinion Labs Safe address. Required. |
feeRateBps | string? | Default '0'. |
expiration | number? | Unix seconds. Default = now + 24h. |
topicId, currencyAddress, tradingMethod, etc.) that the Opinion Labs API requires alongside the signature.
Query and cancel
Common pitfalls
Approval status check returns allApproved: false
Approval status check returns allApproved: false
Run
enableTrading() once and wait for the receipt. The Safe transaction sets approvals atomically. Re-check getSafeApprovalStatus() after the receipt confirms — it should return allApproved: true.USDT amounts look 1000x too small
USDT amounts look 1000x too small
USDT on BNB Chain uses 18 decimals, not 6 like USDT on Ethereum or Polygon. The SDK handles this for you — pass human-readable values to
amount (e.g. 3 for 3 USDT) and the SDK converts internally.signatureType must be 2
signatureType must be 2
Opinion Labs requires
signatureType: '2' (POLY_GNOSIS_SAFE) — the Safe signs as the asset owner with the EOA producing the signature. The SDK sets this automatically. If you’re hand-rolling a signed payload, don’t use 0 (EOA) or 1 (PROXY).Order field 'sign' duplicates 'signature'
Order field 'sign' duplicates 'signature'
Opinion Labs’s API requires both
signature and sign fields, set to the same value. The SDK populates both. This is a quirk of their API surface, not a bug.API reference
POST /api/v1/orders— accepts aSignedOpinionLabsOrderinsigned_orderPOST /api/v1/users/{userID}/credentials— pass_as the path segment

