K3 Objects

S3 that turns files into data. Keep your SDK. Change the address.

The aws CLI, boto3 and standard S3 tools connect with one address change. Then switch on a template and every upload becomes rows you can query and vectors you can search, in the same bucket.

Start free AWS_ENDPOINT_URL=https://object.uk-lon-1.dodil.io
S3 API with SigV4 · multipart uploads · share links · public or private buckets
terminal
$ aws s3 cp q3-financials.pdf s3://finance/reports/ \
    --endpoint-url https://object.uk-lon-1.dodil.io
upload: ./q3-financials.pdf to s3://finance/reports/q3-financials.pdf
The rule on reports/** fired:
objectreports/q3-financials.pdf · 412 KB
rowsfinancial_statements · line items, totals
vectorsreport_chunks · 31 chunks embedded
SELECT line_item, amount FROM financial_statements
 WHERE period = '2026-Q3';
S3 compatible

Drop in. Don’t rewrite.

Put, get, head, range reads, bulk delete, listing and full multipart upload, signed with SigV4 like any S3 request. Set the endpoint once and your S3 code keeps working.

aws CLIboto3standard S3 SDKs
export AWS_ENDPOINT_URL=https://object.uk-lon-1.dodil.io

aws s3 cp model.safetensors s3://ml/models/
aws s3 ls s3://ml/models/
Path-style addressing. Your bucket's short name is all you type.
Smarter than a bucket

Every upload can become rows and vectors.

Attach a rule to a prefix and pick a template. From then on each file that lands is extracted into a table you can query, or embedded into vectors you can search. No queue to run and no workers to host.

Into tables
Financial statementsOCR textEntities and PII
Into vectors
TextCodeImagesFacesObjects in images
Ready-made templates, run on every upload that matches the rule.
$ dodil data object url reports/q3.pdf -b legal --expires 900
https://object.uk-lon-1.dodil.io/legal/reports/q3.pdf?X-Amz-…

$ curl -L "$URL" -o q3.pdf   # no credentials needed
Share a file

A link that opens one file, then expires.

Hand a report to a customer or an upload slot to a browser without creating an account. Links last as long as you set, up to 24 hours; S3 presign calls work too, and the CLI makes one in a line.

Who can read what

Private by default. Public when you say so.

Signed requests are bound to your organization, so another organization’s keys never reach your bucket. Open a bucket to the public only when you choose, and call it from the browser with CORS.

Private

The default. Only your organization’s people and keys.

Public

Anyone can read with the URL; writes still need a signature. For logos, docs and downloads.

Custom

A bucket policy decides, request by request: by prefix, by action, by caller.

Good to know

Coming from S3? Four differences.

One version per object

A new PUT replaces the object. Put a version in the key when you need history.

Lifecycle and expiry

Run cleanups from a pipeline or a schedule rather than lifecycle rules.

Buckets from the console or CLI

Create buckets with dodil data bucket create, so they get access rules, CORS and pipelines.

Browser uploads

Use a presigned PUT. HTML form POST uploads aren’t accepted.

Change one URL. Upload your first file.

Your SDK, your scripts, your terraform, and a bucket that understands what you put in it. Free to start, no card.

Regions
UK · LondonliveEU · FrankfurtnextMiddle EastsoonAfricasoon
Compliance
SOC 2in progressISO 27001in progressGDPR-readyData residencyenforced
© 2026 Circle Technologies Pte Ltd. All rights reserved.