Resource Update Checks
Publish the latest version of each resource you sell so installed copies can check for updates.
A product can publish the latest version of the resource it sells. Installed copies of the resource request a URL on your store and compare the answer with their own version. When you release an update, change the version in the editor and every server that checks sees it.
Requirements
| Requirement | Detail |
|---|---|
| Plan | Starter, Pro, or Ultra |
| Store | Published. Unpublished, suspended, and demo stores answer every check with 404. |
| Product | A specific product. The default product settings cannot hold a resource version. |
Set up a product
- Open your project in the editor and select the Product Detail page.
- Select the product in the toolbar.
- In the Properties panel, find Resource Updates under 5Metrics Usage.
- Enter the Resource Name. The placeholder shows the product's Tebex slug. Use the name your resource will request.
- Enter the Latest Version in the same format your resource uses, for example
v1.2.0. - Save your changes, then publish the store if it is not live yet.
The Update URL field shows the address to put in your resource. It uses your verified custom domain when your plan includes custom domains, and your .taintless.store subdomain otherwise.
Keep the URL stable
Installed copies keep calling the URL they shipped with. Keep the resource name unchanged while
older copies are in use. The .taintless.store address keeps answering after you add a custom
domain; a custom-domain address stops answering if the domain is removed.
Name and version rules
| Field | Rules |
|---|---|
| Resource Name | Up to 64 lowercase letters, numbers, - and _. Starts with a letter or number, cannot be only numbers, and is unique per store. |
| Latest Version | Up to 32 letters, numbers, ., +, - and _, starting with a letter or number. Returned exactly as entered. |
Names are not case-sensitive in the URL: /api/versions/My-Resource and /api/versions/my-resource return the same version.
How the URL responds
| Situation | Status | Body |
|---|---|---|
| The name belongs to a product with a version | 200 | The version, for example v1.2.0 |
| Unknown name, no version set, or store not live | 404 | Not found |
| Too many requests from one IP address | 429 | Too many requests |
| Temporary server error | 500 | Internal server error |
The 200 body is plain text: no quotes, no JSON, and no trailing newline. Treat any other status as "no update information" and skip the check quietly.
Responses are cached. A saved version, or unpublishing the store, can take up to about 6 minutes to reach every server. A 404 can be cached for up to a minute. Errors are never cached.
Check for updates from a FiveM resource
This server-side example runs when the resource starts. It reads the installed version from fxmanifest.lua (for example version 'v1.2.0') and prints a notice when the store publishes a different one.
local UPDATE_URL = 'https://yourstore.taintless.store/api/versions/my-resource'
local resourceName = GetCurrentResourceName()
local installedVersion = GetResourceMetadata(resourceName, 'version', 0) or 'unknown'
PerformHttpRequest(UPDATE_URL, function(status, body)
if status ~= 200 or not body then
return -- Store unreachable or no version published: skip the check.
end
if body ~= installedVersion then
print(('[%s] Version %s is available. Installed: %s'):format(resourceName, body, installedVersion))
end
end, 'GET')- Hardcode the URL instead of building it from the resource folder name. Server owners can rename the folder.
- Use one version format in both places. If
fxmanifest.luasays1.2.0and the store saysv1.2.0, the check reports an update that does not exist. - Check once at start-up or on a timer of several minutes. Very frequent checks from one IP address can receive
429.
Troubleshooting
| Issue | Solution |
|---|---|
Every name returns 404 | Confirm the store is published, is on Starter or above, and that you saved in the editor |
One name returns 404 | Confirm the URL ends with the Resource Name and the product has a Latest Version |
| The previous version is still returned | Wait up to 6 minutes. Responses are cached |
| Save fails with a resource name error | Each name can belong to one product. Clear it on the other product first |
| Another product, even a deleted one, holds the name | Use Move the name here next to the conflict in Resource Updates, then save. Deployed resources checking that URL get this product's version, or 404 until it has one |