You are wiring RoRo into a product or a pipeline. The lab is where you prototype and read the catalogue; the SDKs and the API are where the integration lives. Same run engine, same credits, same machine codenames everywhere.
Prototype here, ship from your stack
- Everything the Python kernel runs is the real
roro_platformSDK — write againstroro_platformin a.pyor a notebook, and the same file runs unchanged on your servers with the platform SDK from the RoRo repository (the REST client is on PyPI asroro-quantum). - The Run rail's Machines — code names list is your integration reference: codename (
targetId), simulator vs hardware, qubits, list per-shot rate, live status. The codename you copy here is the string every SDK and/v1/machinesaccept. - The one-line submit_run example on the Python face (
roro.submit_run("<codename>", shots=1000, circuit=qc)) is the REST client's call (pip install roro-quantum;RoRoClient(api_key=…)). Addwait=Trueto block until terminal, or poll the run id.
API keys and secrets
API keys are minted in the Integrate rail → API keys (or in the console): create one, copy it from the once-only box — it is never shown again — and revoke it there when it leaks or a teammate leaves. Keys belong to your organisation, so runs made with them bill the org's balance at the org's pricing. The same rail's Quickstart tab writes a Python / JavaScript / Kotlin / curl snippet against your real machine codenames. Never paste a key into a project file — projects can be shared and forked, and the browser kernel does not need one (it runs locally and never submits on your behalf). Keep keys in your own environment.
Billing model in one paragraph
Every submission is quoted (POST /runs/quote) with the same code path that charges. Submit holds the quote; completion settles; cancel returns the hold; machine-side failure refunds automatically; a hardware job unfinished after 72 hours is failed and refunded. Org accounts can carry negotiated per-shot pricing, which is why the lab shows list rates as reference and the quote as truth. AI usage (Copilot, explanations) is metered as separate AI credits per turn, with no per-message cap — every cost is visible as it settles.
Other SDKs and the contract
- JavaScript / TypeScript (
@roro/quantum, isomorphic, typed) and Kotlin/JVM clients mirror the Python REST client. - An OpenAPI contract describes the public API; the SDKs mirror it.
- Run status streams over SSE and can be polled; every SDK can cancel a run.
Where team features stand in the lab
- Sharing: read-only snapshot links, revocable. Recipients fork on their own credits.
- GitHub: read-only import (public URLs, or your repos via OAuth); no push by design.
- Members, roles, workspace budgets and spend caps are managed in the console; keys and quickstarts live in the lab's Integrate rail. Export there hands you the whole project as a
.zip, a hackathon-ready submission bundle (files + generated README +runs.csv), or the run history as CSV — and Import .zip brings a project in.
Related: Python in the browser · Machines & credits · Sharing & GitHub