---
title: "Ligation / assembly reaction setup"
method: POST
path: "/ligation_setup"
tags: ["Enzymes & cloning"]
---

# Ligation / assembly reaction setup

`POST /ligation_setup`

## Request

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

Work out how many microlitres of vector and insert to pipette to hit a target molar ratio, from each part's length and stock concentration. Handles one insert or several with independent equivalents (Gibson, Golden Gate, MoClo), reports pmol and ng per part alongside the volumes, and flags the two things that actually go wrong on a bench: a volume below what a pipette measures reliably, and a plan whose DNA does not leave room for buffer and enzyme. A molar ratio is about moles, so a shorter insert at 3 molar equivalents goes in at LESS mass than the vector — that conversion is the point.

## Request body

- object
  - `vectorLengthBp` integer, required: Backbone length in bp.
  - `vectorNgPerUl` number, required: Backbone stock concentration, ng/µL.
  - `vectorNg` number: How much backbone to put in the reaction, ng. This is the quantity you fix; every insert mass follows from the ratio.
  - `insertLengthBp` integer: Insert length in bp. Use `inserts` instead for a multi-fragment assembly.
  - `insertNgPerUl` number: Insert stock concentration, ng/µL.
  - `molarRatio` number: Molar equivalents of insert per vector. 3 is the usual starting point for a sticky-end ligation; 1-2 is common for Gibson and Golden Gate.
  - `inserts` object[]: Multi-fragment assembly: one entry per insert, each with its own length, stock and molar equivalents. Overrides insertLengthBp/insertNgPerUl/molarRatio when present.
    - `label` string
    - `lengthBp` integer, required
    - `ngPerUl` number, required
    - `equivalents` number
  - `reactionVolumeUl` number: Total reaction volume, µL.
  - `vectorSequence` string: Optional backbone sequence — gives an exact molar mass from base composition instead of the 650 g/mol/bp average.

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