Docs

Guide

Versioning and the sandbox

What we promise about change, how you hear about it before it reaches you, and a key you can test against without spending anything.

The policy

The API has one major version, /v1, in the path. Within it, changes are additive: new routes, new optional request fields, new response fields and new headers. Your code should ignore fields it does not know. We do not rename or remove a field, change its type, or make an optional field required within /v1.

Every answer from the API host and the control plane carries Silicon-Version: the date of the last change to the contract, for example 2026-10-29. Log it with your request ids; it tells you which revision answered. You cannot pin a revision: there is only the current one.

Changes are announced in the changelog, which is also an RSS and JSON feed.

Deprecation and sunset

Something that has to go is deprecated first. From the day it is deprecated, every answer on that route carries these headers, so a log search or a client check finds it long before it stops working:

Headers on a deprecated route
HeaderMeaning
Deprecation: @1793491200RFC 9745: when it was deprecated, as seconds since 1970.
Sunset: Thu, 01 Apr 2027 00:00:00 GMTRFC 8594: when it stops working. Set once the date is decided.
Link: <...>; rel="deprecation"Where the change and its replacement are described. rel="sunset" as well once there is a sunset.

The sunset is at least 90 days after the deprecation. After it, the route answers 410 Gone with the replacement in the error message. Nothing is deprecated today.

Safe retries

The routes that start or stop compute or move money take an Idempotency-Key header. Send a unique value, and the same value when you retry the same request: the first answer comes back with Idempotent-Replayed: true and nothing happens twice.

Retrying with the same key
CaseAnswer
Same request, first one finishedThe first answer again, with Idempotent-Replayed: true.
Same request, first one still running409 with Retry-After: 1.
A different request422: the key was used for a different request.
First answer was a 5xx, 408, 409, 425 or 429Not kept: the retry runs the request again.

Keys are kept for 24 hours and are scoped to the credential that sent them. The routes: compute launch and stop, top-up claims, the spend cap, project budgets, invoices, referral codes, operator bonds and refunds, SIL withdrawals, and agent credit lines and repayments. Compute launch also takes an idempotency_key in the body, which keeps working.

Sandbox keys

A sandbox key is an sn_test_ key made with the sandbox option on the API Keys page. It reaches only the sandbox: the API host answers it with deterministic test output and never sends it to a node or a compute provider, and it is never billed. Every answer to it carries Silicon-Sandbox: 1. Sandbox keys are not switched on yet; the option appears once they are.

What it answers

The sandbox
RouteAnswer
POST /v1/chat/completionsA reply quoting your last message, streamed or not. max_tokens, stop and stream_options.include_usage are honored. With tools, a user message gets a call of the named (or first) function with placeholder arguments from its schema; a tool result gets text again.
POST /v1/embeddingsUnit vectors derived from a hash of each input, the same every time. dimensions (default 64) and encoding_format are honored.
GET /v1/modelssandbox-chat and sandbox-embed.
/v1/compute/*One sandbox offer per workload at a price of zero. Instances start, run, log and stop like real ones, in memory: a restart of the API host forgets them.
Everything else403, naming the sandbox.

Validation is the real one: a missing model, empty messages, an out of range temperature or n above 1 get the same 400 as on a live key. Use it in CI, for the compute API and the GitHub Action, and to check client code before you add balance.

Silicon Network›Docs›Guides›Versioning and the sandbox51 items