---
title: "Create Tool Upload"
method: POST
path: "/api/v1/benchmarks/tools/uploads"
tags: ["benchmarks"]
---

# Create Tool Upload

`POST /api/v1/benchmarks/tools/uploads`

Allocate a registry tool upload: a new tool_id plus signed GCS PUT URLs for the declared files (run.py + artifacts/). Finalize with registerTool.

## Request body

- UploadFilesRequest — One batch of files to sign PUT urls for; the owning id comes from the path or is minted.
  - `files` BenchmarkUploadFile[], required — Files to sign upload URLs for, one URL returned per declared path.
    - `path` string, required
    - `content_type` string, required
    - `size_bytes` integer, required

## Response `201`

Successful Response

- CreateToolUploadResponse
  - `tool_id` string, required
  - `urls` BenchmarkUploadUrl[], required
    - `path` string, required
    - `url` string, required
    - `headers` object, required
  - `expires_at` string, date-time, required

---

[API](https://skmtc.dev/trajectory/apis/trajectory-api.md) · [All operations](https://skmtc.dev/trajectory/apis/trajectory-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/trajectory/trajectory-api/revisions/d930b23b9602/schema)
