Skip to content

Dispatch one durable Modal upload publication

POST
/v1/datasets/upload/publication
curl --request POST \
--url https://example.com/v1/datasets/upload/publication \
--header 'Content-Type: application/json' \
--data '{ "operation_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "repo_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example", "source_format": "lerobot_v2_1", "expected": { "generation": 1, "git_hash_algorithm": "sha1", "git_oid": "example", "commit_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "pack_digest": "example" }, "uploads": [ { "staging_id": "example", "blob_id": "example", "content_length": 1 } ], "manifests": [ { "file_format": "generic", "terms": [ { "blob_id": "example", "offset_in_blob": 1, "length": 1 } ], "expected_raw_blake3": "example", "expected_raw_sha256": "", "path": "example", "mode": 33188 } ], "existing_entries": [ { "manifest_id": "example", "path": "example", "mode": 33188 } ] }'

Persist one complete tree and return immediately after worker dispatch.

x-api-key
string | null
Media type application/json
BeginUploadPublicationBody
object
operation_id
required
string format: uuid
repo_id
required
string format: uuid
name
required
string
source_format
required
string
Allowed values: lerobot_v2_1 lerobot_v3 mcap_ros2
expected
object
generation
required
integer
> 0
git_hash_algorithm
required
string
Allowed values: sha1 sha256
git_oid
required
string
/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/
commit_id
required
string format: uuid
pack_digest
required
string
/^[0-9a-f]{64}$/
uploads
required
Array<object>
StagedUploadBody
object
staging_id
required
string
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/
blob_id
required
string
/^[0-9a-f]{64}$/
content_length
required
integer
>= 1
manifests
required
Array<object>
UploadVerificationManifestBody
object
file_format
string
default: generic
terms
required
Array<object>
>= 1 items
ManifestTermBody

One contiguous run of chunks inside one blob, named as a byte range.

The blob seal proves offset_in_blob is a dense prefix sum of length over the directory ordinal, so a range of ordinals is exactly one range of bytes and the two spellings carry the same fact.

object
blob_id
required
string
/^[0-9a-f]{64}$/
offset_in_blob
required
integer
length
required
integer
>= 1
expected_raw_blake3
required
string
/^[0-9a-f]{64}$/
expected_raw_sha256
string
"" /^(?:|[0-9a-f]{64})$/
path
required
string
>= 1 characters <= 4096 characters
mode
required
integer
Allowed values: 33188 33261
existing_entries
required
Array<object>
ExistingUploadPublicationEntryBody
object
manifest_id
required
string
/^[0-9a-f]{64}$/
path
required
string
>= 1 characters <= 4096 characters
mode
required
integer
Allowed values: 33188 33261

Successful Response

Media type application/json
Example generated
example

Validation Error

Media type application/json
HTTPValidationError
object
detail
Array<object>
ValidationError
object
loc
required
Location
Array<string | integer>
msg
required
Message
string
type
required
Error Type
string
input
ctx
Context
object
Example generated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}