Skip to content

What a tournament would cost its organizer

POST
/api/tournaments/organizer-fee/quote
curl --request POST \
--url https://foxleague.ai/api/tournaments/organizer-fee/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "developer_mode": true, "format": "example", "has_third_place_match": true, "home_and_away": true, "max_teams": 1, "private": true, "starts_at": "2026-04-15T12:00:00Z" }'

The private tournament fee and the calendar deposit of a tournament of this shape, for the signed-in wallet, before anything is signed. Once they apply, the organizer of a tournament that books the calendar pays one shopPay of total_foxsy, then sends its hash with the create. A 1v1, a developer tournament and an admin’s event owe nothing. The deposit comes back after the last game, with the fee of any game not played; a cancel within the free time returns everything; a later cancel or a tournament with too few teams to start keeps the deposit and returns the fee.

Media type application/json

The tournament to price.

object
developer_mode

A developer tournament: it pays nothing.

boolean
format
required

The tournament’s format.

string
has_third_place_match

A knockout with a third-place game.

boolean
home_and_away

A round robin played twice.

boolean
max_teams
required

The teams it holds.

integer format: int32
private

It has an invite list.

boolean
starts_at

The start asked for (RFC 3339), so the answer can say when this time slot has no free cancellation. Optional.

string | null format: date-time
Example generated
{
"developer_mode": true,
"format": "example",
"has_third_place_match": true,
"home_and_away": true,
"max_teams": 1,
"private": true,
"starts_at": "2026-04-15T12:00:00Z"
}

Success or a refusal: read success (the refusals are in the description).

Media type application/json
object
code

A machine-readable reason next to error, set only where the caller must act differently. tx_pending: the payment was not refused but could not be verified yet; keep the transaction hash and confirm again with the same hash, never pay twice.

string | null
data

The answer. Present when success is true.

object
deposit_foxsy
required

The calendar deposit, in whole FOXSY.

integer format: int64
games
required

The scheduled games the amounts are counted on.

integer format: int64
grace_minutes
required

Minutes after the create during which a cancel returns the deposit. 0 when this time slot has no free cancellation.

integer format: int64
no_free_cancel
required

A tournament of yours overlapping this time slot was cancelled in its free time in the last 24 hours (or, created with one signature, did not open: still waiting for its verdict, voided unpaid or refused once paid in the last 24 hours), so this one has no free cancellation.

boolean
owed
required

Whether this tournament owes a payment now. False: pay nothing, send no hash.

boolean
private_fee_foxsy
required

The private tournament fee, in whole FOXSY. 0 on a public tournament.

integer format: int64
total_foxsy
required

The one payment: exactly this, in whole FOXSY.

integer format: int64
error

Why the request was refused, in plain words. Present when success is false.

string | null
success
required

true when the request did what it asked. false is a refusal: read error.

boolean
Example
{
"data": {
"owed": true,
"games": 28,
"private_fee_foxsy": 420,
"deposit_foxsy": 700,
"total_foxsy": 1120,
"grace_minutes": 60,
"no_free_cancel": false
},
"success": true
}

No valid session. The body is plain text: Missing Authorization header, Invalid Authorization format, Invalid session token or Session expired or invalid. Sign in again.

Media type text/plain
string
Example
Session expired or invalid