Request a presigned upload URL
Requires scope `runs:upload`. PAT only; browser sessions are rejected. Watchers at 1.1.0 or newer send `relative_path` and `X-Data-Hub-Watcher-Version`. A file whose name is already used by a different folder is stored as `<stem>~<folder hash>.<ext>`, and the returned `s3_key` uses that stored name. Older watchers are looked up by filename only.
Requires scope runs:upload. PAT only; browser sessions are rejected. Watchers at 1.1.0 or newer send relative_path and X-Data-Hub-Watcher-Version. A file whose name is already used by a different folder is stored as <stem>~<folder hash>.<ext>, and the returned s3_key uses that stored name. Older watchers are looked up by filename only.
Authorization
bearerAuth Personal access tokens begin with dhub_… and are restricted by their assigned scopes.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/instruments/plate-reader/runs/run-2026-001/request-upload-url" \ -H "Content-Type: application/json" \ -d '{ "filename": "string" }'{ "already_uploaded": true, "file_id": 0, "s3_bucket": "string", "s3_key": "string"}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}{ "error": { "code": "string", "message": "string", "details": { "property1": null, "property2": null } }}