---
title: "Fold a riboswitch with and without its ligand"
method: POST
path: "/riboswitch_states"
tags: ["Analysis"]
---

# Fold a riboswitch with and without its ligand

`POST /riboswitch_states`

## Request

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

Fold a transcript twice — once freely, once with the aptamer held out of the secondary structure as a bound ligand would hold it — and report what changes at the ribosome binding site. Returns both structures, both free energies, the cost of occupying the aptamer, and whether the site becomes more or less accessible. This is the question a riboswitch design can be checked on before the bench: is the site sequestered in one state and free in the other. Returns NO activation ratio and no fold-change — see this tool's validation note for why that number is not offered. Pair with rbs_occlusion, which finds what can pair over the site in the first place.

## Request body

- object
  - `sequence` string, required: The transcript: aptamer, expression platform, and at least the start of the CDS. DNA or RNA. Max 1,000 nt, because it is folded twice.
  - `aptamerStart` integer: 1-based start of the aptamer — the region the ligand occupies. Omit both ends to fold freely and only report the site's accessibility.
  - `aptamerEnd` integer: 1-based end of the aptamer.
  - `siteStart` integer: 1-based start of the region whose accessibility is the answer. Omit both ends and the ribosome footprint is located automatically from the first start codon and its Shine-Dalgarno.
  - `siteEnd` integer: 1-based end of that region.
  - `temperature` number: Folding temperature in °C. A switch characterised at 37 °C is not a switch at 30 °C.

## 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)
