---
title: "Design an RBS library spanning a range of translation rates"
method: POST
path: "/rbs_library_design"
tags: ["Analysis"]
---

# Design an RBS library spanning a range of translation rates

`POST /rbs_library_design`

## Request

- Base URL: `https://seqbench.com/api/v1`
- URL: `https://seqbench.com/api/v1/rbs_library_design`
- Auth: none required

Build a ladder of ribosome binding sites whose predicted translation initiation rates are evenly spread, in log space, across a range you choose — the standard way to titrate one enzyme's level in a pathway without guessing. Scores every SD-core/spacing/spacer-composition combination with OSTIR in your own CDS context, then picks one variant per rung. Rungs it cannot fill are reported as GAPS rather than filled with the nearest available variant, so a library that does not really span the range says so. PREDICTED, NOT MEASURED: the ordering comes from a model with ρ ≈ 0.39 against measured expression, which is what makes it usable for ranking a library you will screen and unusable for hitting an absolute number.

## Request body

- object
  - `cds` string, required: The coding sequence, raw or FASTA, starting at its start codon. Only the 5' end affects the prediction, so the first ~90 nt is enough. Max 10,000 nt.
  - `leader` string: Sequence upstream of the RBS (the 5' end of the transcript). OSTIR needs some 5' context for its standby-site term; a 20 nt A-rich leader is assumed when none is given, which is an assumption and not a measurement.
  - `targetMin` number: Weakest rung, in OSTIR's arbitrary units. OMIT THIS and the range is taken from what the candidates actually reach in your CDS context, which is usually what you want: the units have no absolute meaning, so a number carried over from a paper or a default describes nothing. Set it only when you are matching a value you measured yourself in the same context.
  - `targetMax` number: Strongest rung, in the same arbitrary units. Omit with targetMin to use the candidates' own range.
  - `librarySize` integer: How many variants the ladder should have (default 8).
  - `antiShineDalgarno` string: Override the host's anti-Shine-Dalgarno sequence. Defaults to the E. coli one OSTIR is parameterised on.

## Response `200`

Tool ran successfully.

- SuccessResponse: Standard success envelope returned by every single-tool call.
  - `ok` unknown, required
  - `tool` string, required: The tool slug that ran.
  - `result` object, required: Tool-specific output object. Its shape depends on the tool — call `GET /{tool}` or see the docs for each tool's fields.
  - `gate` GateResult
    - `pass` boolean, required: True if and only if every hard check passed.
    - `checks` GateCheck[], required
      - `id` string, required
      - `label` string, required
      - `severity` 'hard' | 'soft', required
      - `pass` boolean, required
      - `message` string, required
      - `value` number
      - `threshold` string
    - `notChecked` string[], required: Honest list of what this gate does NOT verify.
  - `provenance` Provenance, required
    - `apiVersion` string, required
    - `tool` union, required: Tool slug, or an array of slugs (one per step) for a workflow.
      - string
      - string[]
    - `generatedAt` string, date-time, required: ISO 8601 timestamp of when the result was generated.

## Other responses

- `400`: Invalid argument or the tool could not run.
- `404`: Unknown tool.
- `429`: Rate limited (metered tools only). Body carries code `rate_limited` and retryable `true`; honor the Retry-After header.
- `503`: A metered tool is momentarily at capacity. The identical request should succeed after Retry-After; body carries code `upstream_unavailable`.

---

[API](https://skmtc.dev/seqbench/apis/seqbench-api.md) · [All operations](https://skmtc.dev/seqbench/apis/seqbench-api/llms.txt) · [OpenAPI document](https://skmtc.dev/seqbench/apis/seqbench-api/revisions/132575216865?raw)
