---
title: "Multiplex PCR panel design"
method: POST
path: "/multiplex_panel_design"
tags: ["Primers & oligos"]
---

# Multiplex PCR panel design

`POST /multiplex_panel_design`

## Request

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

Choose one primer pair per target so the whole panel works in one tube: no cross-dimer between any two of the primers, every amplicon resolvable from every other on the gel you will run, and one annealing temperature that serves all of them. Searches combinations rather than picking each target's best pair in isolation, which is what makes panels fail — and when no compatible panel exists it names the target pairs that cannot be multiplexed at all, so you know which one to redesign.

## Request body

- object
  - `targets` object[], required: 2-8 targets to amplify in one reaction.
    - `label` string: Name for this target, used throughout the result.
    - `template` string, required: Template sequence, raw or FASTA.
    - `targetStart` number: 1-based start of the region the product must span.
    - `targetEnd` number: 1-based inclusive end of that region.
    - `ampliconMin` number: Smallest product for THIS target. Giving each target its own size band is how a panel is made readable — leaving them all on one range makes comigration the dominant conflict.
    - `ampliconMax` number: Largest product for this target.
  - `agarosePercent` number: Gel the panel will be read on. Omit and the percentage whose resolving window contains the amplicons is chosen and reported — a panel of small products judged on a 1% gel reads as all-comigrating, which is about the gel rather than the primers.
  - `dimerThresholdDG` number: ΔG (kcal/mol) at or below which a cross-dimer involving a primer's 3' END is a conflict. That end is where extension starts, so it matters at a weaker ΔG than an internal pairing.
  - `internalDimerThresholdDG` number: The looser bar for a cross-dimer that pairs internally and only sequesters primer.
  - `maxTmSpread` number: Widest Tm difference tolerated across every primer in the panel, in °C — one annealing temperature has to serve all of them.
  - `candidatesPerTarget` number: Candidate pairs considered per target (max 6). More finds a panel where fewer cannot, at the cost of a larger search.
  - `ampliconMin` number: Panel-wide default product size floor, for targets that set none.
  - `ampliconMax` number: Panel-wide default product size ceiling.

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