---
title: "Transfer PlateRecord content"
method: POST
path: "/api/v3/plate-record:transfer"
tags: ["Plate Record"]
---

# Transfer PlateRecord content

`POST /api/v3/plate-record:transfer`

## Request

- Base URL: `https://{tenant_name}.benchling.com`
- URL: `https://{tenant_name}.benchling.com/api/v3/plate-record:transfer`
- Auth: HTTP bearer

Create destination plate record(s) by transferring content out of existing source plates. Each move is recorded as a destination_transfer on the child and a source_transfer on the source. The source plates are historical records and are never rewritten; instead the result also carries a copy of each source holding what remained after the transfer, which is empty when any drawn-from well could not say how much it had left.

## Request body

- PlateRecordTransferRequestInput
  - `destinationBarcodes` string[]: Optional barcode to stamp on each destination plate record, one entry per destination plate in destination-index order. Length must equal the number of destination plates.
  - `height` integer, required: Number of rows in each destination plate record.
  - `metadataLayers` MetadataColumnInput[]: Metadata layers to apply to each created destination plate record.
    - `name` string, required
    - `plateValue` union
      - string
      - integer
      - number, double
      - boolean
    - `systemName` string
    - `type` 'text' | 'integer' | 'float' | 'boolean' | 'date' | 'datetime', required
    - `wells` MetadataWellInput[]
      - `value` union, required
        - string
        - integer
        - number, double
        - boolean
      - `wellPosition` string, required
  - `name` string, required: Base name for destination plate record(s). If multiple are created, numeric suffixes are appended.
  - `plateSchemaId` string: ID of the plate schema to apply to each destination plate record. If omitted, no plate schema is attached.
  - `transfer` PlateRecordTransferInput, required
    - `direction` 'ACROSS_ROWS' | 'DOWN_COLUMNS': Well traversal order for layout-based transfers. Defaults to ACROSS_ROWS.
    - `layout` 'COLUMN_INTERLEAVE' | 'INTERLEAVE' | 'REVERSE_COLUMN_INTERLEAVE' | 'REVERSE_INTERLEAVE' | 'REVERSE_STAMP_TO_QUADRANTS' | 'STAMP' | 'STAMP_TO_QUADRANTS': Layout algorithm used with sourcePlateIds. Determines the fan ratio of sources to destinations: STAMP (1:1), STAMP_TO_QUADRANTS/INTERLEAVE (4:1), COLUMN_INTERLEAVE (2:1), and their REVERSE_ variants (1:4, 1:2).
    - `operations` WellTransferInput[]: Explicit well-to-well moves. Use this mode for fan-in, many-to-many, or serial dilution transfers. Mutually exclusive with sourcePlateIds + layout.
      - `destinationPlateIndex` integer, required
      - `destinationWellPosition` string, required
      - `diluentEntityId` string
      - `diluentQuantity` QuantityInput
        - `amount` number, double, required
        - `unit` UnitInputWithPathParams
          - `id` string, required
          - `versionNumber` integer
      - `finalVolume` QuantityInput
        - `amount` number, double, required
        - `unit` UnitInputWithPathParams
          - `id` string, required
          - `versionNumber` integer
      - `sourceDestinationPlateIndex` integer
      - `sourcePlateId` string
      - `sourceWellPosition` string, required
      - `transferQuantity` QuantityInput
        - `amount` number, double, required
        - `unit` UnitInputWithPathParams
          - `id` string, required
          - `versionNumber` integer
    - `skipEmpty` boolean: If true (default), empty source wells are skipped rather than producing empty destination wells in layout-based transfers.
    - `sourcePlateIds` string[]: Ordered source plates for layout-based transfers. Consumed group by group according to the fan ratio of the chosen layout. Mutually exclusive with operations.
    - `transferQuantity` QuantityInput
      - `amount` number, double, required
      - `unit` UnitInputWithPathParams
        - `id` string, required
        - `versionNumber` integer
  - `width` integer, required: Number of columns in each destination plate record.

## Response `200`

OK

- TransferPlateRecordsResult: The plate record(s) produced by a transfer.
  - `createdPlateIds` string[]: Use createdPlates instead, and select the id subfield.
  - `createdPlates` PlateRecordRef[]: The destination plate records created by the transfer.
    - `__typename` string
    - `id` string, api_id
  - `decrementedSourcePlates` PlateRecordRef[]: Copies of the source plates the transfer drew from, holding what remained after it. The source plates themselves are historical records and are never rewritten. Empty when any drawn-from source well could not say how much it had left, since a partial list would read as the full set of what remains.
    - `__typename` string
    - `id` string, api_id

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `429`: Too Many Requests
- `500`: Internal Server Error

---

[API](https://skmtc.dev/benchling/apis/benchling-api.md) - [All operations](https://skmtc.dev/benchling/apis/benchling-api/llms.txt) - [OpenAPI document](https://skmtc.dev/benchling/apis/benchling-api/revisions/c9f087b98b8b?raw)
