---
title: "Upload a CSV file to GCS imports prefix"
method: POST
path: "/file/upload"
tags: ["File Storage Resource"]
---

# Upload a CSV file to GCS imports prefix

`POST /file/upload`

Accepts a file via multipart/form-data and stores it in the configured Google Cloud Storage bucket under imports/<filename>, where <filename> is taken verbatim from the uploaded file's name. The upload is retried up to a configured number of attempts (default 3) with exponential backoff before failing. No CSV validation is performed server-side, and there is no overwrite protection: uploading a file whose name matches an existing object overwrites it. A successful upload emits no event and triggers no asynchronous job. Use this endpoint to stage a file in GCS before referencing it by path from GET /file/read or GET /file/download. Send a multipart/form-data request with a single field named exactly file, along with a valid JWT.

## Headers

- `tenant-id` string, required

## Response `200`

The file was stored in GCS; the plain-text response body contains "File uploaded to GCS".

## Other responses

- `400` — No file was supplied, or the uploaded file has no filename. Send a multipart/form-data field named file containing a valid file.
- `401` — Authentication failed. Supply a valid JWT bearer token.
- `415` — The request Content-Type is not multipart/form-data. Submit the file as multipart/form-data.
- `500` — The upload failed after all retry attempts were exhausted. Retry later; if the problem persists, contact support.

---

[API](https://skmtc.net/certifyos/apis/certify-api-layer.md) · [All operations](https://skmtc.net/certifyos/apis/certify-api-layer/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/certifyos/certify-api-layer/revisions/563848e0ecc0/schema)
