---
title: "Start a multipart upload directly to S3."
method: POST
path: "/api/v1/samples/init_multipart_upload"
---

# Start a multipart upload directly to S3.

`POST /api/v1/samples/init_multipart_upload`

## Request

- Base URL: `https://app.onecodex.com`
- URL: `https://app.onecodex.com/api/v1/samples/init_multipart_upload`
- Auth: API key in header `X-API-Key`

## Request body

- object
  - `external_sample_id` string, nullable
  - `filename` string, required
  - `interleaved` boolean, nullable
  - `metadata` object, nullable
    - `custom` object, nullable: Arbitrary metadata is supported as part of a custom object. custom has two constraints: (1) it must have a depth of one (i.e., no nested records); and (2) only strings, numbers, boolean, and null values are supported as values. Example: `{"lab_tech": "Linus Pauling", "amplicon_scheme": "V3-V4"}`
    - `date_collected` string, date-time, nullable: Timestamp for when the sample was collected.
    - `date_sequenced` string, date-time, nullable: Timestamp for when the sample was sequenced.
    - `description` string, nullable
    - `external_sample_id` string, nullable: An arbitrary external sample ID, e.g., an ID in a LIMS. Up to 60 characters.
    - `library_type` 'WGS' | 'Targeted/16S' | 'Other', nullable: Allowed types of SampleMetadata.library_type. Also used to populate form dropdown in the front-end
    - `location_lat` number, nullable: The latitude `(-90.0-90.0)` of the sample location. By convention, we recommend using this for the location in which the physical specimen was collected.
    - `location_lon` number, nullable: The longitude `(-180.0-180.0)` of the sample location.
    - `location_string` string, nullable
    - `name` string, nullable
    - `platform` '454 sequencing' | '454 GS FLX' | '454 GS FLX Titanium' | 'Illumina' | 'Illumina Genome Analyzer II' | 'Illumina HiSeq' | 'Illumina HiSeq 1500' | 'Illumina HiSeq 2000' | 'Illumina HiSeq 2500' | 'Illumina HiSeq 3000' | 'Illumina HiSeq 4000' | 'Illumina HiSeq X' | 'Illumina iSeq 100' | 'Illumina MiniSeq' | 'Illumina MiSeq' | 'Illumina NextSeq' | 'Illumina NextSeq 500' | 'Illumina NextSeq 550' | 'Illumina NovaSeq' | 'Illumina NovaSeq 5000' | 'Illumina NovaSeq 6000' | 'BGISEQ' | 'BGISEQ 50' | 'Element' | 'Element AVITI' | 'Ion' | 'Ion S5' | 'Ion S5 XL' | 'Ion PGM' | 'Ion Proton' | 'Ion Torrent' | 'Oxford Nanopore' | 'Oxford Nanopore GridION X5' | 'Oxford Nanopore MinION' | 'Oxford Nanopore PromethION' | 'PacBio' | 'PacBio RS II' | 'PacBio Sequel' | 'PacBio Sequel II System' | 'PacBio Revio' | 'PacBio Onso' | 'SOLiD' | 'Solexa Genome Analyzer' | 'Sanger' | 'Other', nullable: Allowed values of SampleMetadata.platform.
    - `sample_type` 'Isolate' | 'Metagenomic' | 'Other', nullable: Allowed values for SampleMetadata.sample_type. Used to populate values in the front-end dropdown
    - `starred` boolean, nullable: Whether the sample has been starred by the user within the One Codex web application.
  - `paired_end_filename` string, nullable
  - `project` object, nullable
    - `__DOLLAR_REF__` string, uri
  - `sample_id` string, nullable
  - `tags` object[]
    - `name` string, required: The tag label or name. Name must be 30 characters or fewer.

## Response `200`

OK

- object
  - `callback_url` string, required
  - `file_id` string, required
  - `paired_end_file_id` string, nullable, required
  - `s3_bucket` string, required
  - `sample_id` string, required
  - `upload_aws_access_key_id` string, required
  - `upload_aws_secret_access_key` string, required

## Changes

- **2026-11-03** `3be5a5f9bf7d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/onecodex/apis/one-codex-api-v1/changes/api/v1/samples/init_multipart_upload/post.md)

---

[API](https://skmtc.dev/onecodex/apis/one-codex-api-v1.md) - [All operations](https://skmtc.dev/onecodex/apis/one-codex-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/onecodex/apis/one-codex-api-v1/revisions/3be5a5f9bf7d?raw)
