Canonical peaqOS ROS 2 machine endpoints plus documented agent aliases, grouped by SDK capability.
This page lists the canonical machine endpoints and documented agent aliases exposed under /peaqos_node. Requests use ROS 2 service types from peaq_ros2_interfaces. All examples assume the node is running with a populated peaq_robot.yaml; see ROS 2 configuration.
Quote EVM addresses and large integers in ros2 service call YAML payloads. Unquoted addresses can parse as numbers and break the request.
Local EVM registry. Service calls return public metadata only: address, account_id, chain_id, network, label, and created_at. Private keys never cross ROS.
Service
Type
/peaqos_node/wallet/create
peaq_ros2_interfaces/srv/PeaqosCreateWallet
/peaqos_node/wallet/list
peaq_ros2_interfaces/srv/PeaqosListWallets
/peaqos_node/wallet/get
peaq_ros2_interfaces/srv/PeaqosGetWallet
/peaqos_node/wallet/delete
peaq_ros2_interfaces/srv/PeaqosDeleteWallet
# Createros2 service call /peaqos_node/wallet/create \ peaq_ros2_interfaces/srv/PeaqosCreateWallet \ "{label: 'robot-001'}"# Listros2 service call /peaqos_node/wallet/list \ peaq_ros2_interfaces/srv/PeaqosListWallets "{}"# Getros2 service call /peaqos_node/wallet/get \ peaq_ros2_interfaces/srv/PeaqosGetWallet \ "{address: '<MACHINE_EVM_ADDRESS>'}"# Deleteros2 service call /peaqos_node/wallet/delete \ peaq_ros2_interfaces/srv/PeaqosDeleteWallet \ "{address: '<MACHINE_EVM_ADDRESS>'}"
SDK import, export, and from_wallet flows are intentionally not exposed over ROS because they require , , or . Use the Python SDK or CLI for those.
onboarding for fresh machine wallets. 2FA codes are request-only and should not be logged.
Service
Type
/peaqos_node/faucet/setup_2fa
peaq_ros2_interfaces/srv/PeaqosSetupFaucet2FA
/peaqos_node/faucet/confirm_2fa
peaq_ros2_interfaces/srv/PeaqosConfirmFaucet2FA
/peaqos_node/wallet/fund
peaq_ros2_interfaces/srv/PeaqosFundWallet
# 1. Start 2FA enrollment for the ownerros2 service call /peaqos_node/faucet/setup_2fa \ peaq_ros2_interfaces/srv/PeaqosSetupFaucet2FA \ "{owner_address: '<OWNER_EVM_ADDRESS>', qr_format: 'svg'}"# 2. Confirm with the OTP from the authenticatorros2 service call /peaqos_node/faucet/confirm_2fa \ peaq_ros2_interfaces/srv/PeaqosConfirmFaucet2FA \ "{owner_address: '<OWNER_EVM_ADDRESS>', two_factor_code: '123456'}"# 3. Fund the target wallet through the Gas Stationros2 service call /peaqos_node/wallet/fund \ peaq_ros2_interfaces/srv/PeaqosFundWallet \ "{owner_address: '<OWNER_EVM_ADDRESS>', target_address: '<MACHINE_EVM_ADDRESS>', chain_id: '3338', two_factor_code: '123456', request_id: ''}"
See the error reference for INVALID_2FA, 2FA_LOCKED, RATE_LIMITED, and CAP_EXCEEDED_OWNER.
/machine/register and /agent/register are interchangeable surfaces over the same registration call. Pick whichever language matches your fleet model. /machine/register_for and /agent/register_for are likewise the same handler under two paths.
# Self-managed: machine signs for itselfros2 service call /peaqos_node/machine/register \ peaq_ros2_interfaces/srv/PeaqosRegisterMachine \ "{address: '<MACHINE_EVM_ADDRESS>'}"# Equivalent agent-flavored aliasros2 service call /peaqos_node/agent/register \ peaq_ros2_interfaces/srv/PeaqosRegisterAgent \ "{address: '<AGENT_EVM_ADDRESS>'}"# Proxy operator: operator signs on behalf of a fleet machineros2 service call /peaqos_node/machine/register_for \ peaq_ros2_interfaces/srv/PeaqosRegisterFor \ "{proxy_address: '<OPERATOR_EVM_ADDRESS>', machine_address: '<MACHINE_EVM_ADDRESS>'}"
/did/write_machine_attributes is the standard machine DID write path the MCR API consumes. It writes machineId, nftTokenId, operatorDid, documentationUrl, dataApi, and dataVisibility in one call. /did/write_proxy_attributes is the proxy/operator equivalent; it atomically writes the two standard proxy DID attributes (proxy_agent_id and the list of machine_ids the operator manages).
# Read one attribute by name from the DID precompileros2 service call /peaqos_node/did/read_attribute \ peaq_ros2_interfaces/srv/PeaqosReadDidAttribute \ "{signer_address: '<SIGNER_EVM_ADDRESS>', did_address: '<DID_EVM_ADDRESS>', name: 'machineId'}"# Write the standard machine attributes in one shotros2 service call /peaqos_node/did/write_machine_attributes \ peaq_ros2_interfaces/srv/PeaqosWriteMachineDidAttributes \ "{signer_address: '<MACHINE_EVM_ADDRESS>', machine_id: 1, nft_token_id: 1, operator_did: 'did:peaq:<OPERATOR_EVM_ADDRESS>', documentation_url: 'https://docs.example/robot-001', data_api: 'https://api.example/robot-001', data_visibility: 'onchain'}"# Write proxy/operator DID attributesros2 service call /peaqos_node/did/write_proxy_attributes \ peaq_ros2_interfaces/srv/PeaqosWriteProxyDidAttributes \ "{signer_address: '<PROXY_EVM_ADDRESS>', proxy_agent_id: 1, machine_ids: [1, 2, 3]}"
/events/validate runs locally: it computes the and checks the payload before you spend . /events/batch_submit goes through the peaq batch (0x...0805) so a multi-event submission is atomic on chain.
Hosted MCR API queries. Returned bodies are SDK JSON passthrough; operator-fleet results may include per-machine negative_flag and top-level pagination.
ERC-4337 machine accounts are deployed through MachineAccountFactory. Address prediction is deterministic (CREATE2 salt) and cheap; call address first, deploy second.
daily_limit is kept on the service for backward compatibility. The current MachineAccountFactory ignores it, so an empty string is fine. Both calls require peaq_os.contracts.machine_account_factory (or MACHINE_ACCOUNT_FACTORY_ADDRESS) to be set.