Skip to content

Save your team badge

POST
/api/teams/badge
curl --request POST \
--url https://foxleague.ai/api/teams/badge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "badge_ipfs_uri": "example" }'

Saves a badge address on your team and answers the team. The badge comes from POST /api/onboarding/generate-badge.

Who: a signed-in player with a team.

Refusals:

  • badge_ipfs_uri must be in format 'ipfs://<cid>': the value does not start with ipfs:// or is shorter than 10 characters.
  • User not found: the wallet has no account.

A wallet without a team gets HTTP 404 with an empty body. If the team cannot be saved on our side, the answer is HTTP 500 with an empty body.

Media type application/json

The badge to save on your team.

object
badge_ipfs_uri
required

The badge address, ipfs://<cid>.

string
Example generated
{
"badge_ipfs_uri": "example"
}

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
badge

The team badge, usually an ipfs:// address (some older teams carry an inline image); null when none.

string | null
badge_ipfs_uri

The badge’s ipfs:// address; null when none.

string | null
coach_name

The coach name; null when not set.

string | null
created_at
required

When the team was created (RFC 3339).

string format: date-time
formation
required

The saved formation.

string
id
required

Team id.

integer format: int32
lineup
required

NFT nonces of the 11 starters, as an array. Empty until a lineup is saved.

name
required

Team name.

string
substitutes
required

NFT nonces of the bench, as an array.

team_overall

Average of the starters’ seven attributes; null until a lineup is saved.

number | null format: double
user_id
required

The owner’s user id.

integer format: int32
verified
required

true when the team carries the verified mark.

boolean
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": {
"badge": "ipfs://bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly",
"badge_ipfs_uri": "ipfs://bafybeihkoviema7g3gxyt6la7vd5ho32ictqbilu3wnlo3rs7ewhnp7lly",
"coach_name": "Ada Moraru",
"created_at": "2026-09-16T08:02:44.517093Z",
"formation": "4-3-3",
"id": 398,
"lineup": [
1301,
1234,
1240,
1255,
1262,
1270,
1288,
1290,
1302,
1311,
1325
],
"name": "Fox Rovers",
"substitutes": [
1330,
1342,
1356,
1361,
1377,
1389,
1394
],
"team_overall": 47.25,
"user_id": 412,
"verified": 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

The wallet has no team yet. The body is empty.

The badge could not be saved on our side. The body is empty.