Skip to main content
Scale is paused: registering a machine with the Machine Markets API fails for Tokenomics 1.0 and Economics 2.0 machines. See Scale.
Machine Markets is the orchestration layer behind Scale. It pairs an AI agent to an activated, machine, gives that a policy with spend limits and an allow/denylist, and exposes a curated catalogue of capabilities and provider services the agent can search against using the machine’s context. The agent’s legitimacy is the machine’s: , , , and all carry through.

Roles

Core objects

Skills vs services

Two things look similar. They aren’t.
  • A skill is a capability schema. storage.object says “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.
Service types:
Execution modes:
  • 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.
Integration status surfaces how ready a service is to execute end-to-end:

Identity proof flow

Machine registration with the orchestrator is gated by a DID-controller . The flow:
  1. Call POST /machine-identity/challenges with the machine’s identityRef. The orchestrator looks up the controller addresses from peaqOS MCR data and returns a short-lived challengeId plus a message.
  2. Sign message with the controller’s using personal_sign.
  3. Submit { challengeId, signature } as identityProof when calling POST /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.
The proof expires. Re-challenge when it does.

Pairing flow

Pairing an agent to a machine follows the same -sign-verify pattern, scoped to the agent’s key:
  1. Call POST /machines/:machineId/agent-pairings/challenges with agentAddress, agentProvider, agentRole, and optional agentDid. The orchestrator returns an AgentPairingChallenge with a challengeId, a machine-bound message, and an expiresAt.
  2. The signs message (EIP-191 personal_sign) with the wallet key behind agentAddress.
  3. Call POST /machines/:machineId/agent-pairings with agentProof: { challengeId, signature } and the . The orchestrator verifies the signature recovers to agentAddress, persists the pairing with verification metadata, and returns the AgentPairing with a signed HS256 session JWT in pairingToken. Store the token client-side and send it as x-agent-pairing-token on market writes.
  4. Tokens expire (default 1 hour). Rotate by issuing a fresh challenge and calling POST /machines/:machineId/agent-pairings/:pairingId/sessions with the new proof. A policy change invalidates the current token’s delegationPolicyHash, so rotate after every PATCH to the delegation policy.

Order lifecycle

A successful purchase walks the order state machine:
Branches: 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 always recorded.
Set 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 through PATCH /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
The orchestrator speaks 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).