services

Buckets, access control, pre-signed URLs and the CDN.

Object storage

Buckets are S3-compatible and live inside a project. Create one from Storage → New bucket.

Visibility

Buckets are private by default. Reads and writes go through pre-signed URLs or the SDK, both of which are scoped and time-limited. Marking a bucket public is an explicit action and serves it through the edge CDN.

Public URLs

A public bucket answers at:

https://<bucket>.app.tngat.com/<object-key>

Pre-signed URLs

bash
curl -X POST https://api.tngat.com/api/v1/buckets/{{bucketId}}/presign \
  -H "Authorization: Bearer $TNGAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key": "invoices/2026-09.pdf", "method": "PUT", "expiresIn": 900}'

The response contains a URL that can be used directly by a browser or a mobile client without ever seeing your API key.

Quotas

Each bucket declares a quota in GB. Uploads that would exceed the quota are rejected with 413, and the bucket's usage is included in the organization's billing meter.