---
title: "Why is this Sanger read bad?"
method: POST
path: "/trace_diagnose"
tags: ["Files & formats"]
---

# Why is this Sanger read bad?

`POST /trace_diagnose`

## Request

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

Diagnose a failing Sanger chromatogram: the longest usable window (Mott trimming), whether there is signal above the noise at all, whether more than one molecule is in the tube and from which base, whether quality collapsed at a homopolymer or tandem repeat the polymerase stuttered through, and whether a dye blob or the instrument's own separation is the problem rather than the DNA. Each finding carries the measurement it is based on, what that pattern is usually caused by, and what to do next. Reads .ab1, .abi and .scf.

## Request body

- object
  - `fileBase64` string, required: The binary trace file (.ab1 / .abi / .scf), base64-encoded.
  - `fileName` string: Optional original file name (echoed back, and used to explain a refusal).
  - `qualityCutoff` number: Phred score the usable window is measured at. 20 is the conventional 1-in-100 line.
  - `mixedRatio` number: A second peak at or above this fraction of the called peak counts as a mixed position. Lower it to catch a minor species, raise it if ordinary crosstalk on your instrument is firing it.

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