API · Native Bittensor
Permissioned proxy actions on Bittensor (add/move stake), permission lifecycle, and simulated swaps.
All endpoints below are mounted under /v1 on the validator API (https://api.minotaursubnet.com). The CORS allowlist covers https://app.minotaursubnet.com.
GET /v1/native-bittensor/executions
List native Bittensor execution audit records.
Query parameters
permission_id—strowner_ss58—strstatus—str
GET /v1/native-bittensor/permissions
List native Bittensor delegated permissions.
Query parameters
owner_ss58—strstatus—str
POST /v1/native-bittensor/permissions
Create a policy-bounded native Bittensor delegated permission.
Request body
body—CreateNativePermissionRequest(required) (model CreateNativePermissionRequest)owner_ss58:str=Field(..., description="User's safe Bittensor ss58 account")allowed_netuids:list[int]=Field(..., description='Subnet netuids this permission may touch')allowed_hotkeys:list[str]=Field(default_factory=list, description='Allowed validator hotkeys')delegate_ss58:str=Field('', description='Optional dedicated delegate ss58 to bind')max_rao_per_action:int | None=Field(None, description='Max native amount per action in RAO')max_rao_per_day:int | None=Field(None, description='Max native amount per rolling day in RAO')max_slippage_bps:int | None=Field(None, description='Max tolerated slippage in basis points')cooldown_seconds:int | None=Field(None, description='Minimum delay between delegated actions')expires_at:float | None=Field(None, description='Unix timestamp when permission expires')enable_remove_stake:bool=Field(False, description='Opt-in to delegated remove_stake')policy_tier:str=Field('strict', description='Policy tier: strict/hybrid/expert')metadata:dict[str, Any]=Field(default_factory=dict, description='Extra metadata')
GET /v1/native-bittensor/permissions/{permission_id}
Get a native Bittensor delegated permission by ID.
Path parameters
permission_id—str(required)
POST /v1/native-bittensor/permissions/{permission_id}/actions/add-stake
Execute a proxied native add_stake request.
Path parameters
permission_id—str(required)
Request body
body—AddStakeRequest(required) (model AddStakeRequest)netuid:int=Field(..., description='Target subnet netuid')hotkey_ss58:str=Field(..., description='Validator hotkey to stake to')amount_rao:int=Field(..., description='Stake amount in RAO')reason:str=Field('', description='Human-readable execution reason')metadata:dict[str, Any]=Field(default_factory=dict, description='Extra execution metadata')
POST /v1/native-bittensor/permissions/{permission_id}/actions/move-stake
Execute a proxied native move_stake request.
Path parameters
permission_id—str(required)
Request body
body—MoveStakeRequest(required) (model MoveStakeRequest)origin_netuid:int=Field(..., description='Origin subnet netuid')origin_hotkey_ss58:str=Field(..., description='Origin validator hotkey')destination_netuid:int=Field(..., description='Destination subnet netuid')destination_hotkey_ss58:str=Field(..., description='Destination validator hotkey')amount_rao:int=Field(..., description='Stake amount in RAO')reason:str=Field('', description='Human-readable execution reason')metadata:dict[str, Any]=Field(default_factory=dict, description='Extra execution metadata')
POST /v1/native-bittensor/permissions/{permission_id}/activate
Activate a permission after on-chain proxy.addProxy() is confirmed.
Path parameters
permission_id—str(required)
POST /v1/native-bittensor/permissions/{permission_id}/refresh
Refresh a permission against current on-chain proxy state.
Path parameters
permission_id—str(required)
POST /v1/native-bittensor/permissions/{permission_id}/revoke
Soft-revoke a delegated permission inside Minotaur.
Path parameters
permission_id—str(required)
Request body
body—RevokeNativePermissionRequest(required) (model RevokeNativePermissionRequest)reason:str=Field('', description='Optional soft-revoke reason for audit history')
POST /v1/native-bittensor/sim-swap
Simulate a TAO ↔ Alpha swap and return expected output.
Request body
body—SimSwapRequest(required) (model SimSwapRequest)origin_netuid:int=Field(..., description='Source netuid (0=TAO)')destination_netuid:int=Field(..., description='Dest netuid (0=TAO)')amount_rao:int=Field(..., description='Input amount in RAO')