Roles
Core objects
Skills vs services
Two things look similar. They aren’t.- A skill is a capability schema.
storage.objectsays “an object-storage service exposes these operations”. Skills are the contract. - A service is a concrete instance of a skill from a specific provider. “Exa search via agentic.market” is a service. Services are what you actually buy.
- Native: peaqOS executes the skill server-side or on a registered machine-side runtime endpoint. No human handoff.
- External handoff: the orchestrator returns a structured handoff (URL, contact, setup steps) and the agent or operator completes the purchase out of band. Used when a provider integration is partner-required or credentials-required.
Identity proof flow
Machine registration with the orchestrator is gated by a DID-controller . The flow:- Call
POST /machine-identity/challengeswith the machine’sidentityRef. The orchestrator looks up the controller addresses from peaqOS MCR data and returns a short-livedchallengeIdplus amessage. - Sign
messagewith the controller’s usingpersonal_sign. - Submit
{ challengeId, signature }asidentityProofwhen callingPOST /machines. The orchestrator verifies the signature recovers to one of the controller addresses before persisting. The stored proof is re-checked against MCR data on subsequent machine-bound writes.
Pairing flow
Pairing an agent to a machine follows the same -sign-verify pattern, scoped to the agent’s key:- Call
POST /machines/:machineId/agent-pairings/challengeswithagentAddress,agentProvider,agentRole, and optionalagentDid. The orchestrator returns anAgentPairingChallengewith achallengeId, a machine-boundmessage, and anexpiresAt. - The signs
message(EIP-191personal_sign) with the wallet key behindagentAddress. - Call
POST /machines/:machineId/agent-pairingswithagentProof: { challengeId, signature }and the . The orchestrator verifies the signature recovers toagentAddress, persists the pairing withverificationmetadata, and returns theAgentPairingwith a signed HS256 session JWT inpairingToken. Store the token client-side and send it asx-agent-pairing-tokenon market writes. - Tokens expire (default 1 hour). Rotate by issuing a fresh challenge and calling
POST /machines/:machineId/agent-pairings/:pairingId/sessionswith the new proof. A policy change invalidates the current token’sdelegationPolicyHash, so rotate after everyPATCHto the delegation policy.
Order lifecycle
A successful purchase walks the order state machine:disputed if the buyer raises a dispute after delivery; cancelled if a refund settles before delivery; failed if execution errors; handoff if the service ships as an external handoff rather than a native skill run.
Each successful execution writes an Outcome and a Run. Outcomes record the service result; runs record the execution metadata (skill, route, status). Both are queryable via GET /runs and GET /machines/:machineId/outcomes.
Payments follow their own state machine, coupled to the order:
not_required short-circuits the payment lifecycle for free or pre-authorised services.
Payment rails
The orchestrator quotes services in the rail the provider supports:
Payment proof modes:
recorded: operator attestation. The orchestrator stores the proof but does not verify on-chain.rpc: the orchestrator queries an RPC for the receipt and the ERC-20 Transfer log, validating sender, recipient, token, and amount. Solana proofs are alwaysrecorded.
PEAQOS_PAYMENT_RPC_URL (or PEAQ_EVM_RPC_URL / PEAQOS_EVM_RPC_URL) to enable RPC verification by default.
Delegation, bounded
The orchestration layer enforces the delegation policy server-side. Spend limits, allow/denylists, and skill restrictions are checked at request time, not just at pairing time. Mutating the policy throughPATCH /machines/:machineId/agent-pairings/:pairingId takes effect immediately for new calls.
Revoking a pairing (DELETE) terminates the agent’s authority at once, unless the pairing still has open market orders: then the call returns OPEN_MARKET_ORDERS (409) with their orderIds, and you cancel or settle those orders first and retry. See Agent pairings.
Multichain shape
Scale keeps peaq canonical for identity and registry state. Across supported chains:- peaqID, Machine NFT, and the stay on peaq
- Machine NFTs and deploy on supported chains ( first)
- IdentityLite, DIDLite, and StakingLite mirror peaq state on each supported chain (Agung and Base Sepolia)
- Machine Agents can pay across chains using the chain and token a service quotes in
eip155:* CAIP-2 identifiers through the wallet layer. See Wallets (OWS) and the Omni-chain concept for the satellite-chain contract surface (DIDLite, IdentityLite, StakingLite).

