Endpoints
Access-Control-Allow-Origin: *, so they work from a browser app on any origin.
You never construct the blob URL yourself — take files[].url from the
manifest. It’s absolute, so a distribution publishing to a customer-owned bucket
or CDN needs no client change.
Both appear in the generated API Reference under Content
delivery.
The manifest
Fields
files[]
languageDetails[]
Always fall back — the field is optional and releases published before it
existed don’t carry it:
Shape notes
filesis an array, not a map keyed by language. A distribution split by module has several files per language, and keeping it an array made that an additive change rather than a breaking reshape.- The manifest is a bare JSON document, deliberately not the
{success, data}envelope the rest of/api/v1uses. The identical bytes are also written to object storage and read by clients that know nothing about TextSetu.
Caching
Files are content-addressed: the URL contains the content hash, so it never
needs revalidating and a browser will not re-request it. Only the manifest is
invalidated on publish — one path per release.
stale-if-error=86400 means your app keeps working from the last good
manifest for a day if the origin is unreachable. This is the main reason to
read the manifest rather than hardcoding file URLs.
Conditional requests
Both endpoints supportETag. Send If-None-Match to get a 304:
Response headers
Status codes
A paused distribution and an unknown key return the identical
404 on
purpose — the endpoint is unauthenticated, and distinguishing them would turn it
into an oracle for probing valid keys.
Going over quota does not black out your app by default: TextSetu keeps
serving and sets X-TextSetu-Quota: exceeded.
Compatibility
What you can rely on:- New fields may be added to the manifest and to
files[]at any time. Ignore what you don’t recognise. minAppVersion,maxAppVersionandbundlesare reserved. They’re alwaysnull/[]today so that version pinning and grouping can be added without breaking a client shipped now.schemagets a new major version if anything breaking changes. Check it and refuse an unknown major rather than guessing.languageDetailsis optional. Always keep a fallback.
Related
- Content Delivery — creating and publishing distributions
- Using a distribution in your app — client code
- API Reference — the generated endpoint reference

