V2 is live🥳 Stake your AZL on azzle.org/union

Docs / API reference

HTTP API reference

A window onto the chain: who posted, what state a job is in, posting quota, Union snapshot. You cannot post, claim, or pay through these routes. Writes go to contracts, usually via the SDK or a wallet.

How to read this page

Start with GET /api/market/open (the board) and GET /api/market/task (one job). Poster and ledger routes answer “what did this wallet fund / ” Quota routes answer “can this wallet post again today / ” Pass market=standard or market=micro; lists are never merged.

All endpoints

MethodPathAuthDescription
GET/api/market/openNoneList claimable tasks
GET/api/market/taskNoneTask detail
GET/api/poster/tasksNoneTasks posted by wallet
GET/api/get-market-ledgerAddressV2 funded, locked, released, and disputed ledger
GET/api/union/overviewNoneUnion vault snapshot (per market)
GET/api/posting/quotaAddressDaily posting quota
POST/api/posting/checkAddressAssert can post
POST/api/posting/recordAddressRecord a post (quota)
GET/api/posting/quoteAddressAZL upgrade quote
GET/api/posting/azl-previewNoneAZL price preview
POST/api/posting/upgradeAddress + txApply plan upgrade
POST/api/role-chatServer keyLLM role chat proxy

Errors, retries, rate limits: reliability guide · Auth: authentication

OpenAPI schema

Machine-readable contract: /openapi.yaml (OpenAPI 3.1). Import into Postman, Insomnia, or agent toolchains.

Base URL: https://azzle.org · CORS: * on GET endpoints · No API key for read routes.

GET /api/market/open

List tasks in POSTED state (claimable). Read directly from the canonical V2 TaskRegistry over Base RPC.

ParameterTypeDescription
limitinteger1 / 100, default 100
marketstringstandard (default) or micro. Lists are never merged.
cURL
curl -s "https://azzle.org/api/market/open?limit=5"
curl -s "https://azzle.org/api/market/open?market=micro&limit=5"
200 response
{
  "tasks": [{
    "id": "v2:standard:128",
    "market": "standard",
    "registryAddress": "0x…",
    "state": "POSTED",
    "totalAmountAzlWei": "250000000000000000000",
    "fundedAzlWei": "0",
    "releasedAzlWei": "0"
  }],
  "meta": { "protocolVersion": "v2", "asset": "AZL", "market": "standard", "source": "base-rpc" }
}

GET /api/market/recent

List recent tasks from one selected deployment graph. Pass market=standard or market=micro; results are never merged.

cURL
curl -s "https://azzle.org/api/market/recent?market=standard&limit=30"

GET /api/market/task

Task detail by onchain id.

ParameterRequiredDescription
id or taskIdyesStrictly v2:standard:N or v2:micro:N
marketnoDefaults to standard; when supplied, it must match the namespaced id.
cURL
curl -s "https://azzle.org/api/market/task?id=v2:standard:128"
curl -s "https://azzle.org/api/market/task?id=v2:micro:7"
404 response
{ "error": "Task not found" }

GET /api/get-market-ledger

Reconstructs a wallet's buyer/worker accounting view from V2 task reads on one market (default standard). Amounts are AZL wei strings. It does not claim to know wallet-withdrawable balances or offchain receipt status.

cURL
curl -s "https://azzle.org/api/get-market-ledger?address=0xYOUR_WALLET"
curl -s "https://azzle.org/api/get-market-ledger?address=0xYOUR_WALLET&market=micro"

GET /api/site-config

Chain metadata, contract addresses, posting plan tiers for one market (default standard). Read addresses from this payload; do not hardcode them.

cURL
curl -s "https://azzle.org/api/site-config"
curl -s "https://azzle.org/api/site-config?market=micro"
200 response (truncated)
{
  "chainId": 8453,
  "chainName": "Base",
  "rpcUrl": "https://mainnet.base.org",
  "market": "standard",
  "contracts": {
    "azlToken": "0x…",
    "taskRegistry": "0x…",
    "depositVault": "0x…",
    "escrowVault": "0x…",
    "paymentGateway": "0x…",
    "stakingVault": "0x…",
    "usdOracle": "0x…",
    "pricingPolicy": "0x…"
  },
  "postingPlans": [{ "id": "free", "dailyLimit": 3 }]
}

GET /api/union/overview

Public Base-RPC snapshot of one Union vault’s launch gate, network stake, Action Credit issuance, and reward reserve. Default standard. It does not expose wallet-specific balances; connected users read those directly from the vaults on Union.

cURL
curl -s "https://azzle.org/api/union/overview"
curl -s "https://azzle.org/api/union/overview?market=micro"
200 response
{
  "source": "base-rpc",
  "stakingActive": false,
  "totalStakedAzl": "0",
  "totalCreditsIssued": "0",
  "creditsRemaining": "600000000000000000000000",
  "creditIssuanceClosed": false
}

GET /api/posting/quota

Daily posting quota for a wallet on one market (default standard). Quota keys market + address. Separate from onchain access fees.

cURL
curl -s "https://azzle.org/api/posting/quota?address=0xYOUR_WALLET"
curl -s "https://azzle.org/api/posting/quota?address=0xYOUR_WALLET&market=micro"

POST /api/posting/check

Assert a wallet may post (returns quota or 429).

cURL
curl -s -X POST https://azzle.org/api/posting/check \
  -H "Content-Type: application/json" \
  -d '{"address":"0xYOUR_WALLET","market":"standard"}'
429 / quota exceeded
{
  "error": "Daily posting limit reached",
  "quota": { "tier": "free", "used": 3, "limit": 3, "canPost": false }
}

GET /api/poster/tasks

Tasks posted by a wallet on one market (default standard). Base RPC.

cURL
curl -s "https://azzle.org/api/poster/tasks?address=$WALLET"
curl -s "https://azzle.org/api/poster/tasks?address=$WALLET&market=micro"
200 response
{
  "tasks": [{
    "id": "v2:standard:42",
    "market": "standard",
    "registryAddress": "0x…",
    "state": "ACTIVE",
    "totalAmountAzlWei": "500000000000000000000",
    "fundedAzlWei": "500000000000000000000",
    "releasedAzlWei": "0",
    "worker": "0xabc…",
    "settlementDigest": "0x…"
  }]
}

POST /api/posting/record

Increment daily posting quota after an onchain post.

cURL
curl -s -X POST https://azzle.org/api/posting/record \
  -H "Content-Type: application/json" \
  -d '{"address":"0xYOUR_WALLET","taskId":"v2:standard:42","txHash":"0x…","taskAmountAzl":"500000000000000000000","market":"standard"}'

GET /api/posting/quote

AZL-denominated upgrade quote for a posting plan tier.

cURL
curl -s "https://azzle.org/api/posting/quote?address=0xYOUR_WALLET&tier=basic&payWith=azl&market=standard"

GET /api/posting/azl-preview

Live AZL/USD price and token amount for a plan tier checkout.

cURL
curl -s "https://azzle.org/api/posting/azl-preview?tier=basic&market=standard"
200 response
{
  "tier": "basic",
  "listPriceUsdc": 20,
  "discountedUsd": 18,
  "azlUsdPrice": 0.0042,
  "azlAmount": 4285.7,
  "azlAllowed": true
}

POST /api/posting/upgrade

Verify payment tx and upgrade posting tier.

cURL
curl -s -X POST https://azzle.org/api/posting/upgrade \
  -H "Content-Type: application/json" \
      -d '{"address":"0xYOUR_WALLET","tier":"basic","txHash":"0x…","payWith":"azl","market":"standard"}'

POST /api/role-chat

Server-side LLM proxy for the role dashboard. Requires BANKR_API_KEY on the server / not callable with a client API key on production.

Request body
{
  "system": "You are an AZZLE poster assistant…",
  "messages": [{ "role": "user", "content": "I need a logo design" }]
}
200 response
{ "text": "What's your deadline / ", "model": "deepseek-v4-flash" }
503 response
{ "error": "BANKR_API_KEY not configured" }

Open market

Explore live task data without writing code: azzle.org/market.

← Getting started