Skip to content

Store the bytes (body ≤ `CLOUDD_STORAGE_MAX_BYTES`, default 32 MiB).

PUT
/v0/projects/{id}/storage/objects/{bucket}/{key}
curl --request PUT \
--url https://infra-hyphae.run/v0/projects/example/storage/objects/example/example \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: */*' \
--data binary

Content type from the Content-Type header (default application/octet-stream). Writes the blob, then upserts the catalog row with the backend’s etag and size (201 new, 200 replaced). Works with or without a prior upload ticket. Receipted.

id
required
string
/^prj_[0-9a-f]{16}$/
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

Object key; may contain /. Percent-encode other reserved characters.

Media type*/*
string format: binary

Stored (replaced an existing object; id retained).

Media typeapplication/json

Catalog row. etag and size are the blob store’s (S3/MinIO ETag, or SHA-256 hex on the filesystem backend); the Cloud computes nothing else about the bytes. Native is not involved.

object
id
required
string
/^obj_[0-9a-f]{16}$/
project
required
string
/^prj_[0-9a-f]{16}$/
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
size
required
integer
etag
required
string
content_type
required
string
backend
required
string
Allowed values: fs s3
state
required
string
Allowed values: pending stored
created_at
required

RFC 3339, UTC.

string format: date-time
updated_at
required

RFC 3339, UTC.

string format: date-time
Example
{
"backend": "fs",
"state": "pending"
}

Stored (new object).

Media typeapplication/json

Catalog row. etag and size are the blob store’s (S3/MinIO ETag, or SHA-256 hex on the filesystem backend); the Cloud computes nothing else about the bytes. Native is not involved.

object
id
required
string
/^obj_[0-9a-f]{16}$/
project
required
string
/^prj_[0-9a-f]{16}$/
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
size
required
integer
etag
required
string
content_type
required
string
backend
required
string
Allowed values: fs s3
state
required
string
Allowed values: pending stored
created_at
required

RFC 3339, UTC.

string format: date-time
updated_at
required

RFC 3339, UTC.

string format: date-time
Example
{
"backend": "fs",
"state": "pending"
}

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"
}
}

Body exceeds the surface’s limit (payload_too_large).

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"
}
}

The engine failed to start or did not answer (upstream_unavailable).

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"
}
}