Skip to Content
We are live but in Staging 🎉

dodil data object

Manage objects in a K3 bucketcreate (upload), show, list, url (presign), remove. All object subcommands take a required -b/--bucket flag (persistent on the group).

There is also a dodil data object destination subgroup. It is not a Storage command: an object destination is a pipeline with an object facet, its subcommands take a pipeline id, and it is documented under Pipelines → CLI Guide.

dodil data object create uploads over HTTP PUT to the S3 object gateway — https://object.<region>.dodil.io/<bucket>/<key> — not to --api-endpoint, which is a gRPC host:port. Every other subcommand on this page is a gRPC StorageService call. See Objects — byte plane.

dodil data object create

dodil data object create [path] -b BUCKET [-k KEY] [-r]

Uploads a local file as an object, or with -r/--recursive a whole directory tree. If --key is omitted for a single file, the object key defaults to the file’s base name.

FlagShortTypeDescription
--bucket-bstringRequired. Target bucket name.
--key-kstringSingle file: the full object key (defaults to the file’s base name). With --recursive: a key prefix.
--recursive-rboolUpload a directory tree. Each key is the file’s path relative to [path], forward-slashed.

Passing a directory without --recursive is an error. With --recursive the CLI walks the tree, uploads file by file, prints a progress bar to stderr, and exits non-zero if any file failed; -o json returns {bucket, uploaded, failed, objects[]} instead.

Examples:

# Key defaults to "sample.pdf" dodil data object create ./sample.pdf -b kb-prod # Explicit key with prefix dodil data object create ./contract.pdf -b kb-prod -k docs/contract.pdf # Whole tree — ./site/css/app.css becomes assets/css/app.css dodil data object create ./site -b kb-prod --recursive --key assets

For anything larger than a handful of files, an S3 client is the better tool — it parallelises, resumes and diffs, none of which this command does:

aws s3 sync ./site s3://kb-prod/assets/ \ --endpoint-url https://object.uk-lon-1.dodil.io

dodil data object show

dodil data object show [key] -b BUCKET

Calls GetObjectInfo and returns object metadata (ObjectInfo — size, etag, content-type, per-pipeline index status). Pass the key unencoded; the CLI sends it as a gRPC field, so there is no %2F escaping to do here.

The default output prints only four fields — Key, Bucket, Size, LastModified (as raw Unix milliseconds). Use -o json for the full ObjectInfo, including indexStatus and pipelineStatuses:

dodil data object show docs/contract.pdf -b kb-prod -o json

See Core Concepts → Object for the type signature.

dodil data object list

dodil data object list -b BUCKET

Lists objects in the bucket. Filtering by prefix / delimiter / pagination exists on the ListObjects API but is not surfaced as CLI flags today, so this is a first-page-only view: the server default of 1000 keys applies and the CLI never follows nextContinuationToken.

The table prints KEY, SIZE and LAST MODIFIED (raw Unix milliseconds). -o yaml is accepted by the global flag but not implemented here — anything other than json falls through to the table. Keys under the K3-managed _warehouse/ and _vector/ prefixes are filtered out server-side and will not appear.

For prefix filters, paging or a machine-readable listing at scale, use an S3 client:

aws s3 ls s3://kb-prod/docs/ --recursive \ --endpoint-url https://object.uk-lon-1.dodil.io

dodil data object url

dodil data object url [key] -b BUCKET [--expires SECS]

Generates a pre-signed URL for an object — mirrors GetObjectUrl. Default output prints just the URL on stdout (pipe-friendly); -o json returns the full GetObjectUrlResponse (url + expiresAt).

FlagShortTypeDefaultDescription
--bucket-bstringRequired. Target bucket name.
--expiresint3600URL expiry in seconds. Silently clamped to 86400 (24h) server-side — asking for more is not an error.

The URL points at the object gateway, not at the control plane, and carries X-K3-Token / X-K3-Expires / X-K3-Org:

https://object.uk-lon-1.dodil.io/kb-prod/docs/contract.pdf?X-K3-Token=…&X-K3-Expires=…&X-K3-Org=…

It is a K3-token URL, not AWS SigV4, and it grants GET only — a browser upload needs a SigV4 presign minted by an S3 SDK instead. The token is a live credential for that one object: treat the output as a secret.

Examples:

# 1h URL (default) — pipe-friendly, just the URL is printed URL=$(dodil data object url docs/contract.pdf -b kb-prod) curl "$URL" --output contract.pdf # 15 minutes dodil data object url docs/contract.pdf -b kb-prod --expires 900 # Full response (url + expiresAt, Unix millis) for clients that need the timestamp dodil data object url docs/contract.pdf -b kb-prod -o json

dodil data object remove

dodil data object remove [key] -b BUCKET

Deletes an object from a bucket, via gRPC DeleteObject — the same operation the admin route DELETE /:bucket/objects/:key serves. The S3-protocol delete (DELETE /:bucket/:key, no /objects/ segment) goes through the gateway proxy and cleans up identically.

Removing a key that does not exist succeeds silently — the underlying S3 delete is idempotent and nothing turns that into an error. Index/ingest cleanup is fire-and-forget, so object show may briefly disagree with reality after a delete.

Example:

dodil data object remove docs/contract.pdf -b kb-prod

See also