---
title: "Get an upload URL for dataset data"
method: POST
path: "/dataset/{dataset_id}/presigned_url"
tags: ["Datasets"]
---

# Get an upload URL for dataset data

`POST /dataset/{dataset_id}/presigned_url`

## Request

- Base URL: `https://api.indexone.io`
- URL: `https://api.indexone.io/dataset/{dataset_id}/presigned_url`
- Auth: API key in header `x-api-key` and API key in header `Authorization`

Returns a presigned S3 `PUT` URL. Step one of the two-step upload: `PUT` your CSV or parquet bytes to the returned `url` with `Content-Type` set to exactly the `file_type` you requested (a mismatch makes S3 reject the signature), then call `POST /dataset/{dataset_id}/mutation` with the URL stripped of its query string to fold the upload into the dataset.

The upload lands at a unique per-file key, so an upload alone never overwrites the current data.

## Path parameters

- `dataset_id` string, required

## Request body

- object
  - `file_type` string, required: MIME type of the upload; becomes the required `Content-Type` of the PUT.
  - `file_name` string: Optional filename. Defaults to a generated `fil_...` name.

## Response `200`

The presigned upload URL.

- object
  - `url` string, uri: Presigned PUT URL.
  - `key` string
  - `bucket` string
  - `dataset_id` string
  - `content_type` string

## Other responses

- `401`: Missing or invalid id token.
- `403`: Missing or invalid `x-api-key`.
- `429`: API key usage-plan rate limit exceeded.

---

[API](https://skmtc.dev/indexone/apis/index-one-rest-api.md) · [All operations](https://skmtc.dev/indexone/apis/index-one-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/indexone/apis/index-one-rest-api/revisions/df5a92216a9c?raw)
