Skip to main content
Bounties and achievements are two independent mechanisms. Bounties are assigned by the platform, claimed and delivered by you, and reviewed by an administrator. Achievements are scanned once a day by a background worker, with rewards claimed manually by you once the threshold is met. Both have shipped — the data structures, routes, and frontend entry points all exist; neither is a planned feature. But each has current limitations, which this page states plainly.
Figures on this page verified 2026-08-11; sources listed under “Sources of truth” at the end.

Bounty tasks

Lifecycle (five states)

When a review returns a task, it goes back to assigned rather than being released. It remains yours, and you can revise per the feedback and resubmit.

Preconditions for claiming

The server validates each condition on claim and rejects on the first failure: Submission additionally validates ownership and state: So a task you have already submitted and that is awaiting review cannot be resubmitted; to change the content you must wait for an administrator to return it.

Fields carried on a task

When creating a task an administrator can set: the diamond reward (rewardDiamonds), the claim limit (maxClaims, unlimited if omitted), a creator level requirement (levelRequirement), a deadline, and the two display flags “urgent” and “featured.”
Reward settlement in v1 is manual. An approved task (completed) only writes the status to the database — it does not automatically pay you diamonds. Rewards are disbursed manually by the operations team, a constraint recorded in the service layer’s comments:
So an unchanged diamond balance after a task completes is not a bug. If the reward has not arrived well past the agreed time, contact operations through the feedback channel.

Achievements

Five achievements (fixed; the list does not grow dynamically)

The name “First Publish” is misleading — its actual criterion is your first transaction, not publishing an Expert. If you publish an Expert but never make a sale, this achievement does not unlock. All four sales/revenue achievements count rows belonging to you in the creator_earning table (which includes non-sales rows such as achievement payouts).

Progress is not real-time

Achievement progress is updated by a background worker that runs once every 24 hours, so meeting a threshold does not take effect instantly:
Refreshing the page right after your tenth sale and not seeing “Ten Sales” is therefore expected; wait up to a day. The worker paginates 200 creators per batch, and a failure on one creator is isolated and logged without affecting others.

Rewards must be claimed manually

Meeting the threshold only marks the achievement complete — diamonds do not arrive automatically. You must click “Claim” in the creator dashboard, at which point the server:
  1. Locks the claim record with a conditional update (preventing double claims)
  2. Credits the corresponding amount to your diamond account
  3. Writes an earning record with earningType=reward, already in the unlocked state
Achievement reward diamonds have no freeze period — they are withdrawable on arrival, because the earning record is written with status already unlocked and unlockAt set to the current time. This differs from sales revenue, which must clear a freeze period.

Current limitations

Two reasons compound. First, withdrawals are hard-blocked on the server (WITHDRAWAL_CREATE_ENABLED = false), so no withdrawal request can be created at all. Second, even if one could, the background worker only scans first_expert, ten_sales, hundred_sales, and ten_thousand_earned — no code writes progress for first_withdrawal. This will be wired up when withdrawals open. See Withdrawal.
That is the designed v1 state, not a fault. Bounty rewards are settled manually by operations (see the warning above). Achievement rewards require you to click “Claim” — nothing arrives if you do not.
The criterion is the number of rows in the creator_earning table, and that table records more than sales revenue — achievement payouts (earningType=reward) and other non-sales entries also land there. So the count can run slightly higher than pure sales.
There is currently no creator-side “abandon task” endpoint. The task stays under your name until it is submitted and approved. Contact operations if it needs to be released.

Verifying your state

  1. Check achievement progress — the achievements page in the creator dashboard shows current progress and target for all five. Not seeing a just-met threshold is expected; the worker runs at most once every 24 hours.
  2. Confirm a reward landed — after claiming, look in your diamond ledger for the entry with type=reward and the description Achievement: <key>. If that entry is absent, the claim did not go through.
  3. Confirm bounty ownership — check the status under “My Tasks.” submitted means it is awaiting review; assigned means the ball is in your court (either newly claimed or returned).

Sources of truth

Verified 2026-08-11. Sources:
  • The five achievement definitions and reward amounts: services/core/src/db/service/creator-achievement.ts (ACHIEVEMENT_DEFS)
  • Scan interval and criteria: services/core/src/workers/achievement-checker.ts
  • Claim logic and freeze exemption: services/core/src/db/service/creator-achievement.ts (claimReward)
  • Bounty lifecycle and the v1 manual-settlement constraint: services/core/src/db/service/bounty.ts
  • Withdrawal hard-block: services/core/src/db/service/withdrawal.ts

Next steps

Revenue System

Revenue share rates and level thresholds

Withdrawal

Freeze periods and withdrawal rules