ReadyAI

Subnet 33 Jobs API

A pay-per-request API by ReadyAI, powered by Bittensor subnet 33 and settled in USDC on Base via the x402 protocol.

What this is

Send a chunk of text, get a list of tags back. Each request is paid for in USDC stablecoin using x402 — an open HTTP-native payment standard. No accounts, no API keys, no monthly bill: you pay per call, and the payment is bound cryptographically to that single request.

Supported job category for the initial release: tagging of raw text. Submit websites, articles, named-entity extraction targets, or meeting minutes; receive a normalized tag list.

Powered by Bittensor subnet 33

Behind the scenes, every job you submit is dispatched to miners on Bittensor subnet 33 — a decentralized network of nodes specializing in semantic tagging. ReadyAI operates this API as a payment-gated entry point: you pay in USDC via x402, and subnet 33 miners do the work. Results from multiple miners are aggregated server-side into a single tag list before being returned.

You don't need TAO, a Bittensor wallet, or any subnet-specific tooling to use the API — a standard EVM wallet with USDC on Base is the only client requirement.

How a request flows

  1. Quote. POST /jobs-api/v1/quote with the job type, category, and declared content size. Get back a quote ID and the exact USDC amount required.
  2. Pay & submit. POST /jobs-api/v1/jobs with the quote ID, full payload, and an X-PAYMENT header containing your signed payment authorization (your x402 client builds this from the 402 challenge). The server verifies and settles the payment, then queues the job. You receive a jobId and a short-lived JWT.
  3. Poll for result. GET /jobs-api/v1/jobs/{jobId} with the JWT in Authorization: Bearer <token>. Status moves queued → processing → complete (or failed). Results are retained for 30 days.
The 402-then-retry handshake is what x402 is designed for — your client library handles it automatically. You usually don't manually craft the X-PAYMENT header.

Priority tiers

Both the quote and job requests accept an optional priority field that trades cost against turnaround. The price scales off the normal rate:

The tier is locked into your quote, so the amount you're quoted is the amount you pay. Send the same priority on both the quote and the job — a mismatch is rejected.

Leaving priority out is fully backward compatible: requests behave exactly as before and bill at the NORMAL rate.

Extra tags

Set the optional extraTags flag (boolean, default false) to have your job processed by more miners before the result is finalized — broader, richer tag coverage. This multiplies the price by 1.5×, stacking on top of the priority multiplier (e.g. X_HIGH + extraTags = 2.0 × 1.5 = 3.0×). Like priority, it's locked into the quote and must match on both the quote and the job.

Getting set up with x402

You need three things on the client side:

  1. A wallet (any standard EVM-compatible wallet — a private key your client can sign with).
  2. USDC on Base (mainnet) to pay for requests.
  3. An x402-aware HTTP client. The reference implementations ship Python, TypeScript, and Go SDKs that wrap your existing HTTP client and transparently sign & retry on a 402 response.

Minimal Python example

import httpx
from eth_account import Account
from x402 import x402Client
from x402.http.clients.httpx import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact import register_exact_evm_client

account = Account.from_key("0x...your private key...")
client = x402Client()
register_exact_evm_client(client, EthAccountSigner(account), networks=["base"])

API = "https://your-deployment.example"

async def submit():
    async with (
        httpx.AsyncClient(base_url=API) as plain,
        x402HttpxClient(x402_client=client, base_url=API) as paid,
    ):
        # 1. Get a quote (no payment required).
        quote = (await plain.post("/jobs-api/v1/quote", json={
            "jobType": "tagging",
            "declaredSize": 256,
            "category": "WEBSITE",
        })).json()

        # 2. Submit the paid job. x402HttpxClient handles the 402 handshake.
        job = (await paid.post("/jobs-api/v1/jobs", json={
            "quoteId": quote["quoteId"],
            "jobType": "tagging",
            "category": "WEBSITE",
            "payload": {"content": ""},
        })).json()

        # 3. Poll for the result.
        token = job["token"]
        result = (await plain.get(
            f"/jobs-api/v1/jobs/{job['jobId']}",
            headers={"Authorization": f"Bearer {token}"},
        )).json()
        print(result)

For a full reference of every endpoint, request shape, and response schema, see the interactive Swagger UI.

Payment transparency

All paid requests settle as USDC transfers on Base mainnet to a single ReadyAI-operated receiving wallet. Every successful job submission is one on-chain transfer — you can verify it from the transaction hash returned by your x402 client and follow live activity, balances, and historical inflows on Basescan:

0x85B47b40455ab2Bd7921f76dCe841B48C82d627C

75% of enrichment revenue goes to alpha buybacks. Every API call flowing through the pipeline — whether from existing enterprise customers or new Jobs submissions — funds buybacks of SN33 alpha from the open market. All on-chain, all verifiable. Real revenue from real customers flowing back into alpha.

API reference

The complete API spec — every endpoint, request body, response shape, error code, and example payload — lives in the interactive Swagger UI. The raw OpenAPI document is available at /jobs-api/openapi.json if you want to generate clients or import it into another tool.

Resources

Support

Questions, bug reports, integration help? Reach the ReadyAI team at . Include your jobId when reporting issues with a specific request — it's the fastest way for us to trace what happened.