Endpoint reference
Summary of the v1 surface. Full machine-readable spec at tools.ranomics.com/api/v1/openapi.json and interactive Swagger docs at /api/v1/docs.
Bearer tokens, org-scoped
Every request other than openapi.json requires a Bearer token in the Authorization header. Tokens are issued from the account page on tools.ranomics.com and scoped to your organization. Two roles: Member (read + write) and Viewer (read only).
Authorization: Bearer rk_live_... Base URL: https://tools.ranomics.com/api/v1
Surface summary
| Method | Path | Purpose |
|---|---|---|
| GET | /targets | List calibrated targets (filterable). Empty at launch. |
| POST | /experiments | Create an experiment from spec + sequences. Returns experiment_id and Draft status. |
| POST | /experiments/cost-estimate | Non-binding ballpark from spec only. Returns concrete USD for calibrated targets, range + scoping_url for custom. |
| GET | /experiments/{id} | Cheap status snapshot. Returns status, results_status, last_transition_at, status_log. |
| GET | /experiments/{id}/quote | Scoped quote with line items, total_usd, and valid_until. |
| POST | /quotes/{id}/confirm | Accept the quote and advance to WaitingForMaterials. Triggers library construction. |
| GET | /experiments/{id}/results | Full result payload. Meaningful only when results_status is partial or all. |
| GET | /openapi.json | Machine-readable OpenAPI spec. Unauthenticated. |
Status FSM
Each experiment transitions through nine states. Conventions mirror Adaptyv's Foundry API where they fit; the wet-lab stages diverge to reflect yeast display reality (LibraryConstruction, Sorting, NGS, DataAnalysis).
Draft
↓ POST /experiments/{id}/submit (or auto-submit on /experiments POST)
WaitingForConfirmation
↓ scoping (Leo for custom, auto for calibrated)
QuoteSent
↓ POST /quotes/{id}/confirm
WaitingForMaterials
↓
LibraryConstruction
↓
Sorting
↓
NGS
↓
DataAnalysis
↓
InReview
↓
Done
(Canceled is reachable from any pre-Done state.) Cheap results-readiness signal
An orthogonal field on the status response. Lets agents avoid fetching the full result payload just to check whether anything is available yet.
none No results yet. Continue polling status; do not call /results.
partial At least one sort round has results. The sequences array is populated but may grow.
all All planned rounds and analyses complete. The result payload is final.
Signed POSTs on status transitions
Pass webhook_url at experiment creation. We POST to it on every status change. Signature header lets you verify authenticity and protects against replay (timestamp is in the signed payload).
POST <your webhook_url>
Content-Type: application/json
X-Ranomics-Signature: t=1748983212,v1=<hmac-sha256 hex>
{
"experiment_id": "exp_01HZ...",
"prev_status": "Sorting",
"new_status": "NGS",
"timestamp": "2026-06-04T14:13:32Z"
} Delivery is async with exponential backoff and a 5-attempt cap over 24 hours. Failures never block experiment status transitions. Verify the signature with HMAC-SHA256(secret, "{t}.{body}") using the webhook secret from your account page.
Rate limits, idempotency, versioning
Rate limit
60 requests per minute per token. 429 on exceed, with Retry-After header.
Idempotency
Pass Idempotency-Key header on POSTs. Retries within 24h dedupe to the same experiment_id. Safe to wrap in tool-call retry loops.
Versioning
Path-prefixed (/api/v1/). Breaking changes bump the prefix. Deprecation announced via Sunset header and email to active token holders with a minimum 90-day window.
Errors
JSON envelope: {"error": {"code": "...", "message": "...", "field": "..."}}. Standard HTTP status codes; 4xx for client error, 5xx for server error.
Quickstart
Six API calls from candidates to enriched hits, end to end.
Get an API key
Mint a Bearer token from the account page on tools.ranomics.com. Scoped per organization; revocable any time.
Talk to us about a campaign
Custom targets get a human-scoped quote in 24 hours. Useful before the first POST on anything novel.