Skip to main content

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 sending points_grant events via the API:
Identify the recipient using exactly one of 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, or recipient.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_ref for 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 with vrw_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 its vrw_points. Operators who want Subnet Points to track verified work 1:1 can rely on this alone and never send points_grant events.
  • false — validating a run still records VRW on-chain, but grants no Subnet Points. The subnet distributes Subnet Points itself using the points_grant events 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.
This setting is configured per subnet by a BitRobot admin.

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_revoke API 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

Using bitrobot_user_id:
Using email:

Idempotency

If you include a client_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 duplicate client_ref skips
  • imported: Rows successfully imported
  • errors: Details for any rows that failed

Error Handling

The CSV upload continues processing valid rows even when some rows fail. If a row’s client_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

The response returns the subnet’s full record. Every field is documented below.

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 a points_revoke event via the same events endpoint used for granting points.
This endpoint only revokes unconverted Subnet Points. Once Subnet Points have been included in a Bolts conversion, they can’t be revoked through the API — the Bolts those points produced have already been distributed and recorded on the user’s ledger. The maximum amount you can revoke for a user equals their current_period_points value from the List balances endpoint, which is exactly the user’s remaining unconverted Subnet Points.To reverse a grant that has already converted to Bolts, submit a reversal request from the dashboard instead — see Reversing grants.

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