Skip to main content

Mainnet Addresses

Devnet Addresses

Use all values from one network only. A devnet subscribe transaction from 6pW64gN1s2uqjHkn1unFeEjAwJkPGHoppGvS715wyP2J must be activated with https://txline-dev.txodds.com, and a mainnet subscribe transaction from 9ExbZjAapQww1vfcisDmrngPinHTEfpjYRWMunJgcKaA must be activated with https://txline.txodds.com.

Network Consistency Checklist

The transaction signature, guest JWT, activation endpoint, and program ID must all come from the same row. If any one value comes from a different row, activation can fail even when the on-chain transaction itself confirmed.

API Hosts

Use the host root for /auth/guest/start, then use the matching /api/token/activate endpoint after the on-chain subscribe transaction confirms.

Backend Admin Keys

The signer the program expects on the Ed25519 verify instruction that precedes book_fixture, validateOddsV4, and validateStatV4:

Program References

For runnable code, use the examples that match your network and keep the program ID, generated types, API host, and proof data aligned.

Activation Message

After subscribe(serviceLevelId, durationWeeks) confirms, activate the API token by signing this exact message with the same wallet that submitted the transaction:
For the standard free bundle, selectedLeagues = [], so the message is:
Send the detached wallet signature as base64 in walletSignature, and send the guest JWT from the matching network as Authorization: Bearer <jwt>.

Epoch Day

An epoch day is the number of whole days since the Unix epoch, 1 January 1970 00:00 UTC. Compute it from a timestamp in milliseconds:
Days are counted in UTC, so the epoch day changes at midnight UTC, not at local midnight. For example, 1 November 2026 15:20 UTC is 1793546400000 ms, which is epoch day 20758. The epoch day is used in two places:
  • On-chain root accounts. Merkle roots are stored in one account per epoch day, and the epoch day is part of the account’s PDA seeds. It is encoded as a u16, little-endian: 2 bytes, so day 20758 is the bytes 16 51. A u16 holds days up to 65535, which is in the year 2149.
  • API paths. Endpoints such as GET /api/scores/updates/{epochDay}/{hourOfDay}/{interval} take the epoch day of the period you want. See Fetching Snapshots.

Aligned Epoch Day

Fixture roots are stored ten days to an account. The account for a fixture proof is keyed by the aligned epoch day, the first day of its ten-day window: the epoch day rounded down to a multiple of 10.
Day 20750 covers epoch days 20750 to 20759, 24 October to 2 November 2026 UTC.

Which Timestamp to Use

Derive the epoch day from the timestamp in the proof response, never from Date.now(). A proof can belong to an earlier day than today, for example a record from just before midnight UTC fetched just after it, so the current time can select the wrong account. Recompute it for every proof.

Public Validation Accounts

Ticket Accounts

On mainnet these accounts apply once mainnet runs the program version that includes book_fixture, validate_fixture_for_tree, and close_worker_ticket. Substitute the program ID of the network you use.
The IDL does not embed PDA seeds for these accounts, so the seeds above are not read from it. fixtureId is encoded as 4 bytes.
domain and workerId are client-chosen. See On-Chain Validation for the sequence that uses them.