QOURA

Docs

Three moves: pay for a credit, turn it into key balance, send requests. The website is only a client of the endpoints below; scripts can use them directly.

Getting started

  1. Open any listing in the marketplace, choose a face value (smallest is $1) and approve the USDG signature on Robinhood Chain.
  2. Go to the dashboard and press redeem. A proof is computed locally and a fresh key receives the balance.
  3. Configure your OpenAI SDK with base URL https://qoura.xyz/v1 and the new key.
curl https://qoura.xyz/v1/chat/completions \
  -H "Authorization: Bearer qk-..." \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-oss-120b", "max_tokens": 400,
       "messages": [{"role": "user", "content": "List three risks in this plan"}]}'
from openai import OpenAI

qoura = OpenAI(base_url="https://qoura.xyz/v1", api_key="qk-...")
answer = qoura.chat.completions.create(
    model="deepseek-v4-flash",
    max_tokens=400,
    messages=[{"role": "user", "content": "Draft a release note"}],
)
print(answer.choices[0].message.content)

Billing per request equals the supplier's cost for it multiplied by the markup, debited from the key.

Pictures

Image listings answer on a separate path, still authenticated by the same key, and bill per request.

curl https://qoura.xyz/v1/images/generations \
  -H "Authorization: Bearer qk-..." \
  -H "Content-Type: application/json" \
  -d '{"model": "gemini-3.1-flash-image", "aspect_ratio": "3:2",
       "prompt": "Fog over a frozen harbour at dawn, film grain"}'

Results are inline: each entry in data holds b64_json plus its mime_type. Nothing is stored server-side, so no URLs are issued.

Automation

A script or agent with USDG can complete the full cycle unattended: discover listings at /v1/listings, pay, prove, redeem, call. Since quick pay-then-redeem sequences are easy to correlate, check /v1/credits for the size of each face-value set before redeeming. More on the agents page.

Endpoint reference

MethodPathPurpose
GET/v1/listingsCatalogue as JSON: maker, category, marked-up price and the path that serves each listing.
GET/v1/modelsModel ids in the OpenAI list format, handy for SDK dropdowns.
POST/v1/chat/completionsChat in the OpenAI schema. Needs a bearer key; set stream: true for server-sent events. Header x-charge-usd states what was billed.
POST/v1/images/generationsPictures. JSON {model, prompt, n?, aspect_ratio?} with n up to 4; results inline as base64.
GET/v1/keyRemaining balance for the bearer key and up to 50 recent requests (usage and cost only).
GET/v1/creditsPreset face values, set size per value, payment chain and token, tree size, prover file paths.
GET/api/credit/leaves?from=NOrdered leaf list in pages of 5,000, so any client can recompute the root.
POST/api/credit/relayRelays a signed USDG ReceiveWithAuthorization for a commitment; responds with the transaction hash.
POST/api/credit/redeemJSON {proof, root, face, spendTag, keyBinding}. Verified by the desk contract, then credited to that binding.

Failures return the familiar OpenAI envelope {"error": {...}}. Status 402 with insufficient_balance means the key needs topping up.

Credit mechanics

Two locally generated numbers make up a credit. Their hash, the commitment, travels with your payment; the desk contract then stores Poseidon(commitment, face) as a new leaf, taking the face value from the USDG it received. Redeeming means proving knowledge of one leaf's preimage under a root the contract recognises. The proof exposes Poseidon(nullifier), which the server records to block reuse, and the binding of your key, which decides who gets paid. Details in the whitepaper.

Privacy model

Protected

The pairing between a payment and a key. Any credit with the same face value is an equally likely source; the buy panel and the dashboard display that set size. Rare face values make small sets.

Not protected

  • Payments themselves: payer, value and time live on Robinhood Chain.
  • Timing correlation, especially redeeming right after paying or being the sole buyer of a value.
  • Your IP address toward this site, both when redeeming and when calling.

Model traffic

Requests reach third-party suppliers via the gateway. Suppliers process content without learning your key, address or wallet. The gateway retains listing, usage counts and cost, never message bodies or images.

Rules and caps

  • Qoura issues the credits; they work only on this gateway and are not a deposit with any AI lab.
  • No refunds and no transfers, for credits or for key balances.
  • Secrets live in your browser only. Export backups; nobody can recover lost ones.
  • Omitting max_tokens caps a reply at 8,192 tokens, or lower when the balance is smaller.

Contracts

Credit deskNot deployed yet. The site runs in practice mode until it is.
USDG0x5fc5…d168
$QOURAContract address coming soon.

Questions

What is Qoura?

Qoura is a private AI compute marketplace on Robinhood Chain. You buy credits for language models and image generation in USDG, then redeem them with a zero-knowledge proof into an API key that no wallet points to.

How does Qoura work?

You pay for a credit in public. Your browser keeps two secret numbers for it. Later it proves, without saying which credit is yours, that you own one unspent credit of that amount, and the proof tops up a key you generated. You then call models through an OpenAI-compatible gateway with that key.

How do I buy $QOURA?

$QOURA has not launched yet. Its contract address will be published on this site and on @qouraxyz at launch; trust no other source.

Which network is Qoura on?

Robinhood Chain, chain id 4663. Credits are paid in USDG, the Global Dollar stablecoin on that chain.

Is Qoura audited?

Not yet. The credit desk contract and the redeem circuit are tested, and their source is published for review, but no third-party audit has been completed.

Do I need ETH for gas?

Not when the gasless relayer is on: you sign one USDG authorization and the relayer pays the gas. Without it, your wallet approves USDG and pays the purchase transaction itself, which needs a little ETH.