Create uploads

Begins a multipart upload of a large file into one of the caller's org buckets.

POST /v1/s3/buckets/{bucket}/uploads

Addresshttps://api.hanzo.ai/v1/s3/buckets/{bucket}/uploads
MethodPOST
Operationpost_s3_buckets_by_bucket_uploads
AuthAuthorization: Bearer $HANZO_API_KEY

Begins a multipart upload of a large file into one of the caller's org buckets. Then mint presigned URLs for its parts with POST .../uploads/{upload}/parts, PUT each part's bytes to its URL — every part but the last exactly partSize bytes — and assemble the object with POST .../uploads/{upload}/complete. A dropped connection loses nothing: GET .../uploads/{upload} lists the parts already stored, so only the rest are sent again. Use this for anything over a few megabytes; a small file takes the single presigned PUT of POST /v1/s3/buckets/{bucket}/objects.

Request

4 fields, body application/json (required).

FieldInTypeRequiredDescription
bucketpathstringyesBucket is the bucket to upload into, from the path.
bucketbodystring—Bucket is the bucket to upload into, from the path.
keybodystring—Key is the object key the upload will become, relative to the bucket root.
typebodystring—Type is the object's media type, kept with it once it is assembled.

Response

StatusBodyMeaning
200s3.uploadStartedok
defaultproblem-detailsrefused

200 body — 3 fields.

FieldInTypeAlwaysDescription
keybodystring—Key is the object key the upload is bound to.
partSizebodyinteger (int64)—PartSize is the size every part but the last must be, in bytes.
uploadbodystring—Upload is the upload's id, which every later call names.

Failure carries the platform error shape — see Errors.

Examples

hanzo has no subcommand for this operation — the CLI serves only what cloud's live route table confirms. Use HTTP or an SDK.

import { Configuration, S3Api } from 'hanzoai';

const api = new S3Api(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postS3BucketsByBucketUploads({ bucket: 'bucket', bucket: "<bucket>", key: "<key>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import S3Api

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = S3Api(client).post_s3_buckets_by_bucket_uploads(bucket='bucket', bucket="<bucket>", key="<key>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.S3API.PostS3BucketsByBucketUploads(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, s3_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = s3_api::post_s3_buckets_by_bucket_uploads(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.S3Api;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new S3Api(client).postS3BucketsByBucketUploads();
curl -X POST https://api.hanzo.ai/v1/s3/buckets/<bucket>/uploads \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "bucket": "<bucket>",
       "key": "<key>"
     }'

MCP reaches s3 through the s3 tool, which names its 6 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_s3_buckets"
         }
       }
     }'

S3 API · All Hanzo APIs · Interactive reference

Was this page useful?