Over-the-Air (OTA) Updates
Over-the-air (OTA) delivery publishes a project's built localized files to a public location your running app can download directly - no sign-in, no API credentials, nothing to hold or rotate. A translation fix or a newly added language reaches your users the next time your app fetches its files, the same way a website loads any other static asset - not on your next release. Files are served through a CDN, so downloads are fast wherever your users are.
Enable publishing
Turn on Publish artifacts for a project - when adding it, or later from its own Manage Project page (open the project from your project list, then click Manage). Once enabled, every successful build copies that project's localized files to a public artifacts location, keyed by the project's GUID (not its numeric ID, which is never exposed here). Turning the option back off only stops future builds from publishing further updates - it does not remove files already published under the project's existing artifact URLs.
A project's GUID is shown on its own Manage Project page, with a button to copy it to the clipboard.
Download your files
Two endpoints, both public and anonymous - no Authorization header needed:
| Request | Returns |
|---|---|
GET https://www.soluling.com/api/artifacts/{projectGuid}/languages |
The language codes currently published for the project. |
GET https://www.soluling.com/api/artifacts/{projectGuid}/{filename} |
Redirects to the published file itself, for example messages.de.json. |
filename is the artifact's path relative to the project's artifacts folder, exactly
as it was built - for example messages.de.json, de/values.ini, or
sample.de-DE.resx. Both endpoints return 404 if the project either
doesn't have publishing enabled or hasn't been built since it was turned on - not whether the
project itself exists, so a wrong or guessed GUID isn't distinguishable from an unpublished one.
curl https://www.soluling.com/api/artifacts/1b6e2f0a-4c2d-4e9a-9f1a-example-guid/languages curl -L https://www.soluling.com/api/artifacts/1b6e2f0a-4c2d-4e9a-9f1a-example-guid/messages.de.json -o messages.de.json
Delivery and caching
The actual file download is served through a CDN rather than straight from storage, so your app
gets it from a nearby edge location instead of a single origin region. Every published file's
URL bakes in a hash of its content, so it's safe to cache aggressively - the URL only ever
resolves to that exact content. A new build that changes the file gets a new hash, and so a new
URL, rather than overwriting the old one in place - which is also why the languages/
{filename} endpoints above (not the CDN URL itself) are what your app should call:
they always resolve to whatever was most recently published.
From SoluCLI
SoluCLI's artifact languages and
artifact get commands wrap the same two endpoints, also without signing in:
solucli artifact languages <project-guid> solucli artifact get <project-guid> messages.fi.json ./out/messages.fi.json
Usage and billing
OTA usage is metered against two separate monthly quotas on your Cloud plan: how many download requests your app makes, and how much data those downloads transfer in total. Either one running out stops further downloads until your plan's next monthly reset, or until you buy additional usage from Your Accounts. See the Pricing page for current plan limits.
What "public" means
A published artifact is reachable by anyone who has (or guesses) the project's GUID and a valid filename - there's no further access check. Only publish projects whose localized strings you're comfortable serving to anyone on the internet, and don't rely on the GUID alone as a secret.