Skip to main content

Deploy Agent (x402)

The Acurast Deploy Agent lets developers deploy computational jobs to the Acurast decentralized processor network directly from EVM chains (starting with USDC on Base). Via the deploy agent's HTTP API a simple x402 payment together with a job specification will trigger the deployment for you.

This approach is ideal for:

  • AI agents using agentic wallets to deploy Acurast jobs from LLM clients
  • Backend services that need to programmatically deploy Acurast jobs without interacting with the Acurast parachain or managing ACU accounts

Both approaches are outlined below.

Supported Chains

ChainChain IDToken
Base8453USDC

Use via LLM

npx skills add coinbase/agentic-wallet-skills

Recommended skills are at least:

◆  Select skills to install (space to toggle)
│ ◼ authenticate-wallet (Sign in to the wallet. Use when you or the user want to l...)
│ ◼ fund (Add money to the wallet. Use when you or the user want to...)
│ ◻ monetize-service
│ ◼ pay-for-service (Make a paid API request to an x402 endpoint with automati...)
│ ◻ query-onchain-data
│ ◼ search-for-service (Search and browse the x402 bazaar marketplace for paid AP...)
│ ◻ send-usdc
│ ◻ trade
│ ◼ x402 (Search for new services and make paid API requests using ...)

Choose your LLM client and whether to install globally. For example:

│   ○ Augment (.augment/skills)
│ ○ IBM Bob (.bob/skills)
│ ❯ ● Claude Code (.claude/skills)
│ ○ OpenClaw (skills)
│ ○ CodeBuddy (.codebuddy/skills)
│ ○ Command Code (.commandcode/skills)
│ ○ Continue (.continue/skills)
│ ○ Cortex Code (.cortex/skills)
◆  Installation scope
│ ○ Project
│ ● Global (Install in home directory (available across all projects))
◆  Installation method
│ ● Symlink (Recommended) (Single source of truth, easy updates)
│ ○ Copy to all agents

And proceed with installation.

Read more about skills.

After restarting your LLM client, you can set up your wallet and fund it from within your LLM client using

/fund

Then, deploy a job via

/pay-for-service deploy.acu.run
A typical flow to deploy a job on Acurast
❯ /pay-for-service                                                                                                                                                                                                                                 

⏺ I'll check the wallet status first to make sure it's authenticated and ready for paid requests.

⏺ Bash(npx [email protected] status)
⎿ Wallet Server
✓ Running (PID: 33552)
… +4 lines (ctrl+o to expand)

⏺ The wallet is authenticated and ready.

To make a paid API request, I need to know which endpoint you want to call. Do you have a specific x402 service URL you'd like to use?

If not, I can help you search the bazaar marketplace for available paid services using the /search-for-service skill. What kind of service or API are you looking for?

❯ /pay-for-service deploy.acu.run

⏺ I see you want to use the deploy.acu.run service. Let me first check what endpoints and API documentation are available for this service.

⏺ Bash(npx [email protected] x402 pay https://deploy.acu.run --json)
⎿ {
"status": 200,
"statusText": "OK",
… +5 lines (ctrl+o to expand)

⏺ The root endpoint doesn't require payment. Let me check if there's documentation or an OpenAPI spec available.

⏺ Fetch(https://deploy.acu.run)
⎿ Received 4 bytes (200 OK)

⏺ Let me check if there's documentation in the current repository about this deploy agent service.

⏺ Read 1 file (ctrl+o to expand)

⏺ I found the documentation. The Acurast Deploy Agent at deploy.acu.run is an x402 service for deploying jobs to the Acurast decentralized cloud.

Service Details
┌──────────┬────────────────────────────────────────────┐
│ Field │ Value │
├──────────┼────────────────────────────────────────────┤
│ Endpoint │ https://deploy.acu.run/deploy │
├──────────┼────────────────────────────────────────────┤
│ Method │ POST │
├──────────┼────────────────────────────────────────────┤
│ Network │ Base (chain 8453) │
├──────────┼────────────────────────────────────────────┤
│ Payment │ USDC (dynamic pricing based on job reward) │
└──────────┴────────────────────────────────────────────┘
Required Parameters
┌────────┬────────┬────────────────────────────────────────────────────────┐
│ Field │ Type │ Description │
├────────┼────────┼────────────────────────────────────────────────────────┤
│ script │ string │ IPFS hash of the script (e.g., ipfs://Qm...) │
├────────┼────────┼────────────────────────────────────────────────────────┤
│ reward │ number │ Reward per execution in picoACU (1 ACU = 10¹² picoACU) │
└────────┴────────┴────────────────────────────────────────────────────────┘
Optional Parameters

- schedule - Job schedule (start/end times, interval, duration)
- slots - Number of processor slots (default: 1)
- runtime - NodeJS, NodeJSWithBundle, or Shell
- assignmentStrategy - Single or Competing
- allowOnlyVerifiedSources - Only verified processors (default: true)

---
Would you like me to deploy a job? If so, please provide:
1. IPFS script hash (e.g., ipfs://QmZ9mvN4RFCqSqivB2LF3VF1qgrDGTW393PJezbdPy7nH2)
2. Reward amount in ACU (e.g., 0.0771 ACU)

❯ deploy ipfs://QmZ9mvN4RFCqSqivB2LF3VF1qgrDGTW393PJezbdPy7nH2 with 0.0771 ACU reward

⏺ I'll deploy that script with 0.0771 ACU reward (77,100,000,000 picoACU).

⏺ Bash(npx [email protected] x402 pay https://deploy.acu.run/deploy -X POST -d '{"script": "ipfs://QmZ9mvN4RFCqSqivB2LF3VF1qgrDGTW393PJezbdPy7nH2", "reward": 77100000000}'
--…)
⎿ {
"status": 200,
"statusText": "OK",
… +22 lines (ctrl+o to expand)

⏺ Deployment successful!
┌────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Field │ Value │
├────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Job Hash │ 0xe8c81b116fb4412571c1edcd8764e35db4a96507b599c86baf51746c55aecc25 │
├────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Explorer │ https://hub.acurast.com/explorer/extrinsic/0xe8c81b116fb4412571c1edcd8764e35db4a96507b599c86baf51746c55aecc25 │
├────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Payment TX │ 0x88053... on Base (chain 8453) │
├────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Payer │ 0xceA0d23336f285f9d85d6b0c3DE7103eAEB168F9 │
└────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Your job has been deployed to the Acurast decentralized cloud with a reward of 0.0771 ACU per execution.

Programmatically deploy

This approach uses Coinbase's awal tool directly, instead of via the LLM. This is a deterministic approach for dApps and backends.

  1. Set up a Coinbase Agentic Wallet

  2. Fund your agentic wallet, then validate with:

    npx awal balance

    Example output:

    Base
    ────────────────────────
    USDC $20.21
    ETH 0.0008
    WETH 0.0008
3. OPTIONAL: Query accepted tokens and pricing before deploying

You can query the deploy agent to see accepted tokens and the job's price before making a payment:

curl "https://deploy.acu.run/deploy" -X POST -H "Content-Type: application/json" -i -d '{
"script": "ipfs://QmZ9mvN4RFCqSqivB2LF3VF1qgrDGTW393PJezbdPy7nH2",
"allowedSources": null,
"allowOnlyVerifiedSources": true,
"schedule": {
"startTime": 1777593600000,
"endTime": 1777651200000,
"duration": 3600000,
"interval": 3600001,
"maxStartDelay": 10000
},
"memory": 0,
"networkRequests": 0,
"storage": 0,
"requiredModules": [],
"assignmentStrategy": "Single",
"slots": 1,
"reward": 77136800000,
"minReputation": 0,
"runtime": "NodeJS"
}' | sed -n 's/^payment-required: //Ip' | tr -d '\r' | base64 -d | jq

Example response:

{
"x402Version": 2,
"error": "Payment required",
"resource": {
"url": "http://deploy.acu.run/deploy",
"description": "Deploy Acurast job",
"mimeType": "application/json"
},
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "79000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x9b442C40DAaC631F74de4094F2998E4aC016098A",
"maxTimeoutSeconds": 300,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
],
"extensions": ...
}
  1. Deploy using the agentic wallet

    See First App Deployment to learn how to upload your script and receive an IPFS URL using the Acurast CLI.

    npx awal@latest x402 pay "https://deploy.acu.run/deploy" -X POST -d '{
    "script": "ipfs://QmZ9mvN4RFCqSqivB2LF3VF1qgrDGTW393PJezbdPy7nH2",
    "reward": 77136800000
    }'

    The agent handles deployment to the Acurast network once an x402 facilitator confirms the payment was successful.

    Example response:

    Response:
    {
    "success": true,
    "paymentTxHash": "x402-1776088198704",
    "payer": "unknown",
    "chainId": 8453,
    "acurastJobHash": "0xfe16aa9be55907284cf7eafaabfc9b41e6d7caa19a55d7b518146551783a1b83",
    "explorerLink": "https://hub.acurast.com/explorer/extrinsic/0xfe16aa9be55907284cf7eafaabfc9b41e6d7caa19a55d7b518146551783a1b83",
    "message": "Job deployed successfully"
    }

    The deploy agent has deployed the job under 5H3ChM1QgrYyGwzmyQ1QkdFCJxzakjWsbQN5tSGP8dkn2VCR.

Full job specification

Generate job specification

The easiest way to craft a job specification as JSON is using the Acurast CLI with the extra argument --only-upload to just output the IPFS URL:

acurast deploy --only-upload

You can provide a complete job specification for more control:

npx awal@latest x402 pay "https://deploy.acu.run/deploy" -X POST -d '{
"script": "ipfs://QmZ9mvN4RFCqSqivB2LF3VF1qgrDGTW393PJezbdPy7nH2",
"allowedSources": null,
"allowOnlyVerifiedSources": true,
"schedule": {
"startTime": 1777593600000,
"endTime": 1777651200000,
"duration": 3600000,
"interval": 3600001,
"maxStartDelay": 10000
},
"memory": 0,
"networkRequests": 0,
"storage": 0,
"requiredModules": [],
"assignmentStrategy": "Single",
"slots": 1,
"reward": 77136800000,
"minReputation": 0,
"runtime": "NodeJS"
}'

The jobSpec object follows the standard Acurast job registration format:

FieldTypeDescription
scriptstringREQUIRED IPFS hash or inline script code
allowedSourcesstring[] | nullProcessor whitelist (null = any)
allowOnlyVerifiedSourcesbooleanRequire attested processors
schedule.startTimenumberJob start time (Unix ms)
schedule.endTimenumberJob end time (Unix ms)
schedule.durationnumberExecution duration (ms)
schedule.intervalnumberExecution interval (ms)
schedule.maxStartDelaynumberMax acceptable start delay (ms)
memorynumberMax memory bytes (0 = default)
networkRequestsnumberMax network requests (0 = default)
storagenumberMax storage bytes (0 = default)
requiredModulesnumber[]Required modules (e.g., LLM)
assignmentStrategystring"Single" or "Competing"
slotsnumberNumber of processor slots
rewardnumberREQUIRED Reward per execution (picoACU)
minReputationnumberMin processor reputation (0-1000000)
runtimestring"NodeJS", "NodeJSWithBundle", or "Shell"