---
title: "`POST /user/season-claim/redeem` — verifies a season-claim voucher issued by the testnet side and redeems it (merging the testnet root's XP into the caller's mainnet account), or dry-runs the entitlement when `preview` is set. Root-only, same as the issue side."
method: POST
path: "/api/v1/user/season-claim/redeem"
tags: ["User"]
---

# \`POST /user/season-claim/redeem\` — verifies a season-claim voucher issued by the testnet side and redeems it (merging the testnet root's XP into the caller's mainnet account), or dry-runs the entitlement when \`preview\` is set. Root-only, same as the issue side.

`POST /api/v1/user/season-claim/redeem`

## Request

- Base URL: `https://api.ekiden.fi`
- URL: `https://api.ekiden.fi/api/v1/user/season-claim/redeem`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/ekidenfi/apis/ekiden-gateway/docs/api/v1/user/season-claim/redeem/post.ts> (a function with typed inputs; its response is checked against the schema)

## Request body

- RedeemSeasonClaimRequest: `POST /season-claim/redeem` — redeem (or, with `preview`, dry-run) a season-claim voucher.
  - `preview` boolean
  - `voucher` string, required

## Response `200`

Redemption outcome

- RedeemSeasonClaimResponse: `status` is one of `"preview"`, `"granted"`, or `"already_claimed"`.
  - `merged_xp` integer, required
  - `multiplier_bps` integer, required
  - `status` string, required

## Changes

- **2026-09-10** `fad9eecaba2e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/ekidenfi/apis/ekiden-gateway/changes/api/v1/user/season-claim/redeem/post.md)

---

[API](https://skmtc.dev/ekidenfi/apis/ekiden-gateway.md) - [All operations](https://skmtc.dev/ekidenfi/apis/ekiden-gateway/llms.txt) - [OpenAPI document](https://skmtc.dev/ekidenfi/apis/ekiden-gateway/revisions/fad9eecaba2e?raw)
