Overview
BitRobot uses a two-layer reward system to track and incentivize robot operations across all subnets. Subnet Points are an intermediate, per-subnet scoring layer, and BitRobot Bolts are the network-wide reward they convert into.- Subnet Points are instant, uncapped points that each subnet awards to its users for contributions. They exist to score contributions relative to each other within a period — a Subnet Point has no fixed Bolts value on its own. They are recorded on the user’s points ledger and can be attributed by BitRobot user ID, email, Discord user ID, or Solana wallet address.
- BitRobot Bolts are the final, network-wide reward. A user’s Bolts accumulate across every subnet they contribute to, plus Foundation rewards such as referral and hardware bonuses. At each distribution interval (every N days, where N is a factor of 30 — 1, 2, 3, 5, 6, 10, 15, or 30 — depending on the subnet’s settings), a user’s share of a subnet’s total Subnet Points for the period determines their share of that subnet’s Bolts allocation for the period.
Epochs
Points are organized into epochs, each with defined competition periods and leaderboards to track top contributors.Earning Subnet Points
Subnets award Subnet Points by sendingpoints_grant events via the API:
bitrobot_user_id, email, discord_user_id, or wallet_address inside the recipient object.
You can also grant points through the dedicated Grant Subnet Points endpoint — POST /subnets/{subnet_id}/points/grants — which takes the same recipient, points, reason, and client_ref fields directly, without the event_type wrapper. Both paths share the same grant logic and idempotency, so use whichever fits your integration.
Subnet Points are uncapped. New grants are recorded directly on the user’s points ledger and do not consume a point-pool balance.
Requirements
- Recipient: Provide exactly one of
recipient.bitrobot_user_id,recipient.email,recipient.discord_user_id, orrecipient.wallet_address. Email, Discord, and wallet identifiers all support pre-registration reward attribution. If the recipient is not yet known to BitRobot, the grant is held on a placeholder account and applied to the real user when they sign up (email or Discord). For a wallet address, everything you grant after the user connects reaches their account, and the balance already on the placeholder is folded in as well. - Client Reference: Unique identifier prevents duplicate grants (idempotency). Reusing the same
client_reffor a subnet returns an error for the events API. - Reason: Description of why points were awarded (max 256 characters).
The grant time is assigned by the server based on the current open distribution window for your subnet. Caller-supplied
granted_at and brb_epoch_id fields are not accepted and will return a 422 error.Automatic grants from VRW
By default, a subnet also grants Subnet Points automatically whenever a task run is validated. When a run is validated withvrw_points > 0 — through a task_validate event or a task batch upload — the resource owner is granted the same number of Subnet Points as the run’s vrw_points, in addition to the VRW recorded on-chain for token rewards.
A subnet controls this with the auto_grant_subnet_points_from_vrw setting (returned by the Subnet Economics Overview):
true(default) — validating a run grants the resource owner Subnet Points equal to itsvrw_points. Operators who want Subnet Points to track verified work 1:1 can rely on this alone and never sendpoints_grantevents.false— validating a run still records VRW on-chain, but grants no Subnet Points. The subnet distributes Subnet Points itself using thepoints_grantevents or CSV upload above. Use this to run your own incentive logic — quality tiers, loyalty, an operator cut — instead of granting points 1:1 with VRW.
Referral Bonuses
When a referred user’s Subnet Points convert to BitRobot Bolts, their referrer automatically receives a 10% bonus paid in Bolts (10% of the referee’s Bolts allocation from that conversion). The bonus is applied at conversion time, not when the Subnet Points are initially granted.Points Management
Subnet admins can manage points through the Points Management page in the BitRobot dashboard:- Upload Points CSV: Bulk distribute points to contributors via CSV upload
- View Grants History: See all points granted for the subnet with filtering and sorting
- Reverse Grants: Reverse a previous grant — instantly if its points haven’t converted yet, or by requesting a reversal if they have (see Reversing grants)
Reversing grants
Each grant on the Points Management page shows a reversal action that depends on whether its Subnet Points have already converted to Bolts:- Unconverted grants reverse instantly. Choose Reverse Instantly to remove the points right away. Because they haven’t converted to Bolts yet, no approval is required. This is the dashboard equivalent of the
points_revokeAPI event. - Converted grants need a reversal request. Once a grant’s points have converted to Bolts, you can’t reverse them yourself. Choose Request Reversal and provide a reason. A BitRobot admin reviews the request, and if approved, the already-converted Bolts for that period are rebalanced: the Bolts the grant produced are clawed back from the contributor, and the subnet owner’s split and any referral bonuses for that period are adjusted to match. If the request is rejected, nothing changes. While a request is awaiting review, the grant shows Reversal Requested.
CSV Upload
Bulk distribute points by uploading a CSV file through the dashboard. Subnet Points are uncapped, so uploads do not require a pre-funded point pool.CSV Format
The CSV must include a header row. Required and optional columns:Exactly one of
bitrobot_user_id, email, discord_user_id, or wallet_address is required for each row. The grant time and epoch are assigned by the server from the current open distribution window — granted_at and brb_epoch_id columns are not accepted and will fail validation if present.Example CSV
Usingbitrobot_user_id:
email:
Idempotency
If you include aclient_ref value, the system will skip any rows where that client_ref has already been processed for your subnet. This allows you to safely re-upload the same CSV without creating duplicate grants. Note that the events API behaves differently: a duplicate client_ref there returns an error instead of skipping.
Response
A successful upload returns:processed: Rows processed after duplicateclient_refskipsimported: Rows successfully importederrors: Details for any rows that failed
Error Handling
The CSV upload continues processing valid rows even when some rows fail. If a row’sclient_ref has already been processed for the subnet, that row is skipped and does not appear in errors. Common errors:
Viewing Bolts and Points
Users can check their earnings via:- Bolts Balance: Total BitRobot Bolts earned across all subnets and the Foundation Pool
- Subnet Points: Points earned within each individual subnet for the current period
- Leaderboard Rankings: Compare Bolts earnings with other contributors across the current epoch and all-time
Subnet Economics Overview
Retrieve the authenticated economics and configuration view for a subnet. This endpoint is intended for subnet admins and super admins in the BitRobot Main App and requires a JWT bearer token.Response
Response Fields
Identity and metadata
Lifecycle and visibility
configuration
stats
This endpoint is admin-authenticated, so the response always describes the caller’s own subnet. The lifecycle and visibility fields primarily drive the BitRobot dashboard UI — most integrations only need the
configuration and stats objects.Revoke Subnet Points
Revoke previously granted Subnet Points from a user by sending apoints_revoke event via the same events endpoint used for granting points.
Request Fields
Response
remaining_unconverted_points reflects the user’s remaining unconverted balance for this subnet after the revocation is applied. resolved_user_id is the BitRobot user the revocation was applied to, and resolved_by indicates which recipient identifier matched them (bitrobot_user_id, email, discord_user_id, or wallet_address).
Errors
Balances
List all users and their Subnet Points and Bolts balances for your subnet.Query Parameters
Response
Response Fields
The
bolts field only reflects Bolts earned through this subnet. It does not include Foundation Bolts (hardware purchases, referral bonuses, etc.), which are managed separately by the BitRobot Foundation.Subnet Points History
View the full history of Subnet Points grants and revocations for your subnet. Filterable by user and date range.Query Parameters
Response
Subnet Points to Bolts Conversions
View the history of Subnet Points -> BitRobot Bolts conversions for your subnet. Each entry represents a single conversion event (e.g., one period’s distribution).Query Parameters
Response
Response Fields
API Reference
Learn how to grant points via the events API