---
title: "Measure a set of barcodes you already have"
method: POST
path: "/barcode_audit"
tags: ["Primers & oligos"]
---

# Measure a set of barcodes you already have

`POST /barcode_audit`

## Request

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

Take a set of barcodes and report the minimum edit distance in it, which pairs sit at that distance, any duplicates, the GC range and the longest homopolymer. The pairs are the point: 'minimum distance 2' is a number, and 'these two barcodes are one substitution apart' is something to fix. Use before committing a pool you inherited or assembled by hand — a single close pair makes two constructs indistinguishable in the data and nothing downstream can detect it.

## Request body

- object
  - `barcodes` string, required: The barcodes, as FASTA, one per line, or comma-separated. Max 1,000, because every pair is compared.
  - `metric` 'levenshtein' | 'hamming': 'levenshtein' counts substitutions, insertions and deletions — the right choice for nanopore or PacBio, and the safe default. 'hamming' counts substitutions only, which is faster and adequate when the platform's errors are substitutions (Illumina), but gives NO protection against an indel shifting one barcode into another.

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