Playground
aile.sh/playground runs a real request against a real sharer, in either wire format, and shows you who served it.


What it is for
- Checking a model answers before wiring it into anything.
- Comparing the two wire formats against the same model.
- Reading the
x-aile-*decision headers without writing a client. - Exporting a working request as code once it does what you want.
It spends real money
These are billed requests
The playground places real, billed requests with your own sk-aile- key. It
selects a sharer, pays them from your balance, and meters the call like any
other request. Use a small max_tokens while you are experimenting.
Reading the result
The response panel shows more than the completion:
| Field | Meaning |
|---|---|
| Capacity | Self-hosted, node subscription, nodeless or nodeless (OAuth): x-aile-capacity |
| Node saw | Whether the node could read it: x-aile-blind |
| Sharer ref | A shortened x-aile-sharer: tells serves apart without naming the sharer |
| Priced as | The model id the request was priced on: x-aile-model |
| Served model | The model the provider's response named, with a Downgrade flag if it was weaker |
| Attempts | Shown when earlier sharers failed over: x-aile-attempts |
| Quote | The pre-flight price in USD: x-aile-price |
The quote is priced on max_tokens before the serve. The charge follows the
reply, on the tokens actually used, and on a request that set no max_tokens
it can exceed the quote, up to the cap sent upstream (the model's context
window when none is sent).
x-aile-blind: true means the sharer's machine could not read the request. It
makes no claim about Aile, which terminates TLS with the provider to meter the
call. See What Aile can see.
Both wire formats
Switching the format changes which endpoint the request uses
(/v1/chat/completions or /v1/messages); the models you can reach stay the
same. A Claude model through the OpenAI format works, and so does the reverse; Aile
translates between shapes. See Model names.
It also changes the error shape you would get back, which is worth seeing once: the shape follows the endpoint you called, independent of the model you asked for.
Exporting the request
Once a request does what you want, export it as the production call: the same
body, the same headers, against https://api.aile.sh. From there,
Your first request has the SDK versions.
Streaming
Streaming works here as it does anywhere else: tokens arrive as they are produced,
and the decision headers arrive first, with the response head. The playground
streams through the same route handler your own requests would use. A stream
with no answer after 25 seconds is held open with keepalives and carries
x-aile-edge-hold and only the decision headers that could no longer change:
not the sharer or price, except on self-hosted capacity.
If nothing is available
A 503 naming a provider means nobody is sharing it this minute. The
marketplace shows who is online right now; the model
picker reads the same pool.