---
title: "qPCR ΔΔCt fold change"
method: POST
path: "/qpcr_ddct"
tags: ["Analysis"]
---

# qPCR ΔΔCt fold change

`POST /qpcr_ddct`

## Request

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

Relative quantification from Ct values: ΔCt, ΔΔCt and fold change, with the standard error propagated from replicates. Picks the method from the amplicon efficiencies rather than leaving it to you — Livak's 2^-ΔΔCt when both are 100% efficient, the Pfaffl efficiency-corrected ratio when they are not, since running Livak over amplicons that do not qualify is the failure this tool exists to prevent. Reports what Livak would have said, so the size of that difference is visible.

## Request body

- object
  - `sampleTarget` number[], required: Ct values for the gene of interest in the treated/test sample. Replicates as a list.
  - `sampleReference` number[], required: Ct values for the reference (housekeeping) gene in the same sample.
  - `controlTarget` number[], required: Ct values for the gene of interest in the calibrator/control sample.
  - `controlReference` number[], required: Ct values for the reference gene in the control sample.
  - `targetEfficiency` number: Per-cycle amplification fold for the target amplicon. 2.0 = 100%. From a standard curve, E = 10^(-1/slope).
  - `referenceEfficiency` number: Per-cycle amplification fold for the reference amplicon. 2.0 = 100%.

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