Skip to content

User Progress ​

Query the current state of a user's challenge or funded account. Use this to build progress displays in your sportsbook UI.

Endpoint ​

GET /v1/users/:userId/progress
bash
curl -H "X-API-Key: your-api-key" \
  https://api.fundedfast.eu/v1/users/user-001/progress

Response Types ​

The response type field indicates the user's current state: challenge, challenge_passed, funded_account, or none.

Challenge Response ​

json
{
  "type": "challenge",
  "challengeId": "uuid",
  "currentBalance": 72.50,
  "targetBalance": 100.00,
  "startingBalance": 50.00,
  "daysElapsed": 8,
  "daysRemaining": 12,
  "activeDays": 6,
  "totalBetsPlaced": 34,
  "totalBetsAccepted": 31,
  "totalBetsRejected": 3,
  "minBetsRequired": 10,
  "minActiveDays": 5,
  "status": "active",
  "cooldownUntil": null,
  "reserved": 10.00,
  "currency": "EUR",
  "correlationId": "uuid"
}

Challenge Passed Response ​

When the user reaches the target, the challenge stops in passed_pending_choice and waits for the user to decide. No funded account exists yet.

json
{
  "type": "challenge_passed",
  "challengeId": "uuid",
  "programBalance": 2000.00,
  "targetBalance": 2000.00,
  "ownStake": 100.00,
  "bonusAmount": 900.00,
  "refundableOwnStake": 100.00,
  "choices": ["continue", "refund"],
  "status": "passed_pending_choice",
  "currency": "EUR",
  "correlationId": "uuid"
}

Show the user both choices and call the matching endpoint:

ChoiceEndpointEffect
continuePOST /v1/users/:userId/challenge/continueCreates the funded account and marks the challenge completed. No body, no approval.
refundPOST /v1/users/:userId/challenge/refund-stakeEnds the challenge as refunded and voids the bonus. Body {"confirm": true} and an X-Idempotency-Key header are required. FAST sends challenge.stake_refunded and challenge.bonus_voided; you pay refundableOwnStake back to the user.

Both return 404 no_pending_choice if the challenge is not awaiting a choice. The user cannot buy a new challenge until this one is resolved.

Funded Account Response ​

json
{
  "type": "funded_account",
  "fundedAccountId": "uuid",
  "currentBalance": 5250.00,
  "fundedAmount": 5000.00,
  "ownStake": 100.00,
  "nonWithdrawableBonus": 900.00,
  "refundableOwnStake": 0,
  "stakeRefundable": false,
  "earnedProfit": 200.00,
  "withdrawableProfit": 200.00,
  "rawProfit": 250.00,
  "isWithdrawable": true,
  "profitSplitPercent": 80,
  "payoutCapPercent": null,
  "totalPayoutCap": null,
  "payoutCount": 0,
  "totalWithdrawn": 0,
  "maxPayouts": null,
  "firstPayoutDeadlineAt": "2026-11-14T10:00:00.000Z",
  "status": "active",
  "reserved": 25.00,
  "openStake": 25.00,
  "currency": "EUR",
  "payout": { "...": "the payout state, as in GET /withdrawable" },
  "correlationId": "uuid"
}

On a funded account rawProfit is the ledger balance above the funded amount and earnedProfit the user's split of it. What a payout can actually take is measured on the virtual balance (ledger less open stake) and is in payout, the same payout state GET /v1/users/:userId/withdrawable returns: withdrawableProfit is its withdrawableNow (the user's share a request may ask for now) and isWithdrawable its canRequest. firstPayoutDeadlineAt is the date by which the first payout must be requested, or the account ends; null with no deadline or once a payout has executed. See Withdrawals.

No Active Record ​

json
{
  "type": "none",
  "message": "No active challenge or funded account",
  "correlationId": "uuid"
}

The reserved Field ​

The reserved field represents the total stake amount in accepted but unsettled bets. This is money currently at risk in pending bets.

Use it to show the user their effective available balance:

Available balance = currentBalance - reserved

Display example:

Balance: 72.50 EUR
Pending bets: 10.00 EUR
Available: 62.50 EUR

Key Fields ​

FieldDescription
currentBalanceCurrent shadow ledger balance
targetBalanceBalance required to complete the challenge
daysRemainingCalendar days until challenge expires
activeDaysDays with qualifying bet activity
totalBetsAcceptedTotal accepted bets placed during this challenge
minBetsRequiredMinimum accepted bets needed to complete the challenge
minActiveDaysMinimum active days needed to complete the challenge
cooldownUntilISO 8601 timestamp if user is in cooldown, null otherwise
reservedStake locked in unsettled bets
isWithdrawableWhether the funded account user can request a payout now
withdrawableProfitFunded: the user's share a payout request may ask for now (0 while anything blocks)
firstPayoutDeadlineAtFunded: request the first payout by then or the account ends
profitSplitPercentUser's share of profit on withdrawal (e.g., 80)

User History ​

Fetch all past challenges and funded accounts:

bash
curl -H "X-API-Key: your-api-key" \
  https://api.fundedfast.eu/v1/users/user-001/history

User Ruleset ​

Fetch the active ruleset to display bet limits in your UI:

bash
curl -H "X-API-Key: your-api-key" \
  https://api.fundedfast.eu/v1/users/user-001/ruleset

BLACKLINE CONSULTING d.o.o.