Terminal
Keyless JavaScript runs with a public signed receipt, paid for by Provn.
Run / terminal
POST /v1/terminal/run runs JavaScript in a QuickJS WebAssembly sandbox with no key and no account. Provn pays for the run and returns the output with a signed receipt. The /terminal page is a browser front end for this endpoint.
bash
curl https://YOUR-PROVN-HOST/v1/terminal/run \
-H "Content-Type: application/json" \
-d '{ "code": "console.log(2 ** 10); 2 ** 10" }'Response
{
"status": "ok",
"stdout": "1024\n",
"result": 1024,
"error": null,
"cpu_ms": 3,
"truncated": false,
"receipt": {
"id": "req_...",
"receipt": "eyJ...",
"signature": "0x...",
"signer": "0x...",
"payload": { "v": 1, "kind": "terminal", "key_id": null }
},
"runs_left": 11
}Limits
| Limit | Value |
|---|---|
| Runs per IP | 12 per 10 minutes |
| CPU time per run | 3 s |
| Memory per run | 32 MB |
| Network | None |
| Filesystem | None |
Past 12 runs you get 429 rate_limited until the 10-minute window has room again.
Receipts are public
Terminal receipts carry kind: "terminal" and key_id: null, and anyone can fetch them at GET /v1/receipts/:id. The receipt holds a fingerprint of your code and never the code. Someone with the exact same code can still confirm a match, so keep secrets out of Terminal runs.
Receipt fields that differ from an inference receipt
{
"kind": "terminal",
"key_id": null,
"units": { "cpu_ms": 3, "mem_limit_mb": 32 }
}GET /v1/status includes the Terminal state for the deployment.