Every AI call gets a receipt.
One OpenAI-compatible key for hundreds of models. Every call returns a signed receipt, each day's receipts are settled on chain, and our price sits next to the provider's, markup included.
Our price, next to theirs.
Every model lists what the provider charges and what we charge, per million tokens. The difference is our markup, and it's the same on every model.

| Model | Provider in / out | Ostraka in / out | Markup | Context |
|---|---|---|---|---|
| Loading prices… | ||||
Don't trust the bill. Check it.
You call a model
The answer streams back as usual. The response header x-ostraka-receipt carries the receipt id.
We sign a receipt
Model, tokens in and out, our charge and the provider's cost, signed by our published receipt key. No prompt, no answer.
The day settles on chain
Each epoch's receipts become one Merkle root, posted with the settlement on Robinhood Chain. Verify any receipt in your browser, without asking us.
Prepaid, on chain, and yours to take back.
You fund a balance in USDG on Robinhood Chain. The vault contract sets hard limits on what we can charge, and nothing in it can stop you withdrawing.
From request to your wallet. The wait lets the last day's usage settle. Nothing can pause it.
Per account per settlement, enforced by the contract, never more than you hold.
The vault refuses a settlement sooner than its minimum gap.
Anything that raises what we can take waits 8 days on chain, longer than any withdrawal.
The vault goes live at launch. See the public ledger.
A fixed share of revenue, paid back as credits.
A set share of every settled dollar goes to the credits pool contract. Each round, holders of the token claim it as inference credits.
The pool has no withdrawal function. Money that goes in can only come out as credits. The share is on chain, and changing it takes 8 days' notice.
Change two lines.
Anything that speaks the OpenAI API works: SDKs, coding agents, frameworks. Set the base URL and your key.
from openai import OpenAI client = OpenAI( base_url="https://ostraka.xyz/api/v1", api_key="osk_…", ) r = client.chat.completions.with_raw_response.create( model="anthropic/claude-sonnet-4.5", messages=[{"role": "user", "content": "Hello"}], ) # every answer carries its receipt print(r.headers["x-ostraka-receipt"])
Plain answers.
Do you store my prompts or answers?
No. They pass through Ostraka to the provider and back, and are never written down. Receipts record the model, token counts, the charge and the provider's cost, nothing else.
Does the model provider see my prompts?
Yes, the provider that runs the model has to read them to answer. We ask the router to send requests only to providers that don't store or train on prompts. A provider's own policy still applies, so pick models that fit your data.
How is the price set?
We charge the provider's cost for each request plus our published markup. Both prices are listed for every model, on the site and in GET /api/v1/models.
Can I get my money back?
Yes. Request a withdrawal in the app and collect it after the delay shown in the vault (24 hours at launch). You get your deposits minus what you spent. Credits are for inference only and can't be withdrawn.
Do I need the token to use Ostraka?
No. Anyone with a wallet can fund a balance and use every model. Holding the token makes you eligible for credit rounds paid from the credits pool.
What stops you from overcharging?
Three things. Every charge has a signed receipt you can check against the root on chain. The vault caps each settlement per account. And any change that would let us charge more waits 8 days, so you can withdraw first.
