API Endpoints
WAO Devnet exposes the standard AO protocol endpoints under path prefixes. Each prefix corresponds to an AO unit type. All endpoints accept and return JSON unless otherwise noted.
Base URL (local): http://localhost:8788
Arweave Gateway (/ar)
The AR unit emulates an Arweave gateway — transaction storage, data retrieval, and GraphQL queries.
GET /ar
Network info. Returns the current block height, network name, and node address.
curl http://localhost:8788/ar{
"network": "ao.DN.1",
"height": 42,
"current": "abc123...",
"blocks": 42,
"node_address": "eNaLJL...Vp9kcg"
}GET /ar/:id
Fetch raw transaction data by ID. Returns the binary data payload of the transaction.
curl http://localhost:8788/ar/zu2vm4M_xooORPqu2HX6-Q53BWv2RpILIXf8wG4AWoAPOST /ar/graphql
Arweave-compatible GraphQL endpoint. Supports transactions and blocks queries with tag filters, owner/recipient filters, pagination, and sorting.
curl -X POST http://localhost:8788/ar/graphql \
-H "Content-Type: application/json" \
-d '{
"query": "{ transactions(first: 5, tags: [{name: \"Type\", values: [\"Process\"]}]) { edges { node { id tags { name value } } } } }"
}'POST /ar/:id
Submit a transaction or data chunk. Used internally by Arweave client libraries.
GET /ar/tx/:id/offset
Transaction offset info. Used by Arweave clients for chunked uploads.
GET /ar/tx_anchor
Returns the current transaction anchor (latest block hash).
curl http://localhost:8788/ar/tx_anchorGET /ar/mine
Mine a new block. Forces block creation without waiting for the automatic interval.
curl http://localhost:8788/ar/mineGET /ar/wallet/:id/balance
Get wallet balance for an address.
curl http://localhost:8788/ar/wallet/eNaLJL...Vp9kcg/balanceGET /ar/mint/:id/:amount
Mint tokens to an address. Devnet-only — does not exist on mainnet.
curl http://localhost:8788/ar/mint/eNaLJL...Vp9kcg/1000000000000GET /ar/price/:id
Transaction price estimation. Always returns "0" on devnet.
Messenger Unit (/mu)
The MU accepts signed messages and spawns, forwards them to the Scheduler, and triggers compute evaluation.
GET /mu
Health check. Returns MU status.
curl http://localhost:8788/muPOST /mu
Send a signed message or spawn request. This is the primary write endpoint for AO — it accepts an ANS-104 DataItem as the request body.
# Typically called via WAO SDK or aoconnect, not curl:
const { mid } = await ao.message({
process: "FDDE_p5x...",
data: "Hello",
tags: [{ name: "Action", value: "Greet" }],
})The MU:
- Validates the signed DataItem
- Forwards it to the SU for scheduling
- Triggers CU evaluation
- Routes any outbound messages (from
ao.send()in handlers) back through the pipeline
POST /mu/monitor/:pid
Start monitoring a process. The MU will automatically trigger compute for new messages to this process.
curl -X POST http://localhost:8788/mu/monitor/FDDE_p5x...DELETE /mu/monitor/:pid
Stop monitoring a process.
curl -X DELETE http://localhost:8788/mu/monitor/FDDE_p5x...Scheduler Unit (/su)
The SU assigns slot numbers to messages, maintaining a deterministic order per process.
GET /su
Scheduler info. Returns the network name and address.
curl http://localhost:8788/suGET /su/timestamp
Current scheduler timestamp and block height.
curl http://localhost:8788/su/timestamp{
"timestamp": 1700000000000,
"block_height": 42
}GET /su/:pid
Get all scheduled assignments for a process. Returns the ordered sequence of messages assigned to the process.
curl http://localhost:8788/su/FDDE_p5x...{
"page_info": { "has_next_page": false },
"edges": [
{
"cursor": "0",
"node": {
"message": { "id": "abc123...", "tags": [...] },
"assignment": { "processes": ["FDDE_p5x..."] }
}
}
]
}Query parameters:
from— Start from this cursor/slotto— End at this cursor/slot
Compute Unit (/cu)
The CU evaluates process state by replaying messages through WASM modules. It returns compute results including output, spawned messages, and errors.
GET /cu
CU info. Returns timestamp and address.
curl http://localhost:8788/cuGET /cu/result/:mid
Get the compute result for a specific message. This is the most commonly used CU endpoint — it returns what happened when the process evaluated this message.
curl "http://localhost:8788/cu/result/U3DaDUN8...?process-id=FDDE_p5x..."{
"Output": {
"data": "Pong",
"prompt": "aos> ",
"print": true
},
"Messages": [
{
"Target": "Y4P53TzF...",
"Tags": [
{ "name": "Action", "value": "Pong" }
]
}
],
"Spawns": [],
"Error": ""
}Query parameters:
process-id— (required) The process that received this message
POST /cu/result/:mid
Same as GET but accepts parameters in the request body. Used by HyperBEAM.
GET /cu/results/:pid
Get all compute results for a process, in slot order.
curl "http://localhost:8788/cu/results/FDDE_p5x..."Query parameters:
from— Start from this cursor/slotto— End at this cursor/slotsort—ASCorDESClimit— Max results to return
GET /cu/state/:pid
Get the current WASM memory state of a process. Returns the raw memory buffer.
curl http://localhost:8788/cu/state/FDDE_p5x...POST /cu/dry-run
Execute a message against a process without persisting it. Useful for read-only queries.
curl -X POST http://localhost:8788/cu/dry-run \
-H "Content-Type: application/json" \
-d '{
"Target": "FDDE_p5x...",
"Tags": [{"name": "Action", "value": "Info"}]
}'POST /cu/evaluate
Force evaluation of pending messages for a process.
Bundler (/bd)
The BD unit accepts transaction bundles. It is automatically enabled when the AR unit is enabled.
POST /bd/tx
Submit a transaction bundle (ANS-104 format). Used internally by the MU when routing messages through the Arweave write path.
WebSocket (/ws)
Live transaction notifications. WAO Scan uses this to update in real time.
GET /ws (Upgrade: websocket)
Connect a WebSocket client. The server broadcasts a JSON message for every new transaction:
{
"type": "tx",
"id": "abc123...",
"device": "mu",
"timestamp": 1700000000000
}Example client:
const ws = new WebSocket("ws://localhost:8788/ws")
ws.onmessage = (e) => {
const { type, id, device } = JSON.parse(e.data)
console.log(`New ${type} from ${device}: ${id}`)
}WAO Scan (/)
GET /
Serves WAO Scan, the single-page block explorer. Open in a browser to inspect the devnet visually.
Error Responses
All endpoints return errors in a consistent format:
{
"error": "TransactionNotFound: Process abc123 was not found on gateway"
}HTTP status codes:
200— Success400— Bad request (malformed input)404— Resource not found500— Internal server error