Skip to content

Reserve a catalog row and get the URL to PUT the bytes to.

POST
/v0/projects/{id}/storage/uploads
curl --request POST \
--url https://infra-hyphae.run/v0/projects/example/storage/uploads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "bucket": "example", "key": "example", "content_type": "example" }'

The URL is on the Cloud itself (PUT /v0/projects/{id}/storage/objects/{bucket}/{key}), to be called with the same session bearer; it is not a presigned blob-store URL, so no client ever talks to MinIO/S3 directly and public traffic stays behind the Cloud auth proxy. The row is pending until the PUT completes. Pending rows are not garbage-collected in this phase.

id
required
string
/^prj_[0-9a-f]{16}$/
Media typeapplication/json
object
bucket
required

S3-compatible bucket name so the same name works on every backend.

string
/^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/
key
required
string
>= 1 characters <= 1024 characters
content_type
string | null
<= 255 characters
Examplegenerated
{
"bucket": "example",
"key": "example",
"content_type": "example"
}

Upload ticket.

Media typeapplication/json
object
object_id
required
string
/^obj_[0-9a-f]{16}$/
method
required
string
Allowed value: PUT
upload_url
required

Path on the Cloud origin; add Authorization: Bearer <session>.

string
headers
required
object
key
additional properties
string
max_bytes
required
integer
expires_at
required

RFC 3339, UTC.

string format: date-time
Example
{
"method": "PUT"
}

Malformed or out-of-bounds input (invalid_request).

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_request authentication_required authorization_denied not_found conflict payload_too_large not_implemented tenant_not_running tenant_running function_runtime_missing function_timeout function_bad_output function_busy orchestrator_unavailable upstream_unavailable internal
message
required
string
Example
{
"error": {
"code": "invalid_request"
}
}

Missing, malformed, duplicate, or unknown credential (authentication_required).

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_request authentication_required authorization_denied not_found conflict payload_too_large not_implemented tenant_not_running tenant_running function_runtime_missing function_timeout function_bad_output function_busy orchestrator_unavailable upstream_unavailable internal
message
required
string
Example
{
"error": {
"code": "invalid_request"
}
}
WWW-Authenticate
string
Allowed value: Bearer realm="hyphae-cloud"

Unknown route, or a project the caller does not own (not_found).

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_request authentication_required authorization_denied not_found conflict payload_too_large not_implemented tenant_not_running tenant_running function_runtime_missing function_timeout function_bad_output function_busy orchestrator_unavailable upstream_unavailable internal
message
required
string
Example
{
"error": {
"code": "invalid_request"
}
}