
A phone script asks for a Fivemanage token, or a resource's install notes mention FIVEMANAGE_MEDIA_API_KEY, and you want to know what you are signing up for. Fivemanage is a third-party service for two jobs most roleplay servers run into: hosting the images, videos and audio that scripts upload, and keeping server logs where you can search them. This guide covers what it is, what it costs and how to set it up with the official SDK, screenshot-basic, ox_lib and oxmysql. If "fivem manage" meant managing the server itself, that is txAdmin (see our txAdmin guide), and license keys live in the Cfx Portal.
Quick answer: Fivemanage is a hosted service, run by Fivemanage AS and not by Cfx.re, that stores the screenshots, videos and audio your FiveM scripts upload and collects your server logs in a searchable dashboard. If you searched for "fivem manage", this is most likely what you saw. To set it up, create a team at app.fivemanage.com, make a Media token and a Logs token, add them to server.cfg with set FIVEMANAGE_MEDIA_API_KEY "..." and set FIVEMANAGE_LOGS_API_KEY "...", and start the official fmsdk resource after screenshot-basic. ox_lib and oxmysql can send logs to it as well. The free Dev plan includes 10 GB of file storage, 20 GB of bandwidth a month and 5 GB of logs kept for 15 days (checked 31 October 2026).
What Fivemanage Is
Fivemanage is a separate company from Cfx.re, the team behind FiveM. It does not host your game server or handle license keys. It sells two things:
- Storage and CDN. Scripts upload images, videos or audio and get back a link for a Discord embed, a report or an in-game UI. Files can be up to 1 GB each and can go into folders.
- Logs. Your server sends structured lines (a level, a message and metadata such as player identifiers) into datasets that you search and chart in the dashboard, for example everything one license or Discord ID did in a time window.
Many scripts support it already: Fivemanage's docs have setup pages for LB Phone, Quasar Smartphone, the YSeries phones, nPhone, JPR Phone System, CodeM Phone, TGIANN, RX ReportsPRO and 0Bug Report System. Those keep the token in their own server-side config. LB Phone, for example, needs version 1.5.0 or newer, its upload methods set to "Fivemanage" in lb-phone/config/config.lua and the token in lb-phone/server/apiKeys.lua.
Fivemanage Pricing and the Free Dev Plan
This is what Fivemanage's pricing page listed on 31 October 2026, in US dollars:
| Dev | Hobby | Pro | |
|---|---|---|---|
| Price per month | $0 | $8 | $24 |
| File storage | 10 GB | 20 GB, then $0.20 per GB | 120 GB, then $0.10 per GB |
| Bandwidth per month | 20 GB | 200 GB, then $4 per TB | 1 TB, then $4 per TB |
| Storage retention rules | No | Yes | Yes |
| Log storage | 5 GB | 5 GB | 100 GB |
| Log retention | 15 days | 15 days | 90 days |
| Log datasets | 3 | 5 | 50 |
| Dashboards | 1 | 2 | 5 |
| Custom CDN domain | No | No | Yes |
Fivemanage pitches Dev at development and testing; it needs no credit card. A $79 Network plan adds 500 GB of storage, 5 TB of bandwidth, 250 GB of logs and 180 days of log retention. Yearly billing gives two months free, and a first payment can be refunded within 14 days. In February 2026 Fivemanage wrote that a free account over its limit is paused until the next billing cycle or an upgrade, with its files kept. Phone photos and clips add up fast, so set a usage alert in the dashboard.
Step 1: Create a Team and Two API Tokens
- Sign up at app.fivemanage.com with an email address, GitHub or Discord, and create a team.
- Open Tokens and select Create token.
- Pick the scope: Images, Videos, Audio, Media (all three) or Logs. Make one Media token and one Logs token, and name each after the server that uses it.
Anyone with your Media token can upload files to your storage and delete them through the API, so treat both tokens like passwords.
Step 2: Add the Keys to server.cfg
The SDK reads its keys from convars, so they never sit inside resource files you might share:
set FIVEMANAGE_MEDIA_API_KEY "your_media_token"
set FIVEMANAGE_LOGS_API_KEY "your_logs_token"
Use set, not setr or sets. Cfx.re's convar docs explain the difference: a set convar can only be read by server scripts, setr replicates it to every player's client, and sets publishes it in the server list and the server's public info. Keep server.cfg itself out of public Git repositories too.
You only need the keys for the features you use, with one catch. fmsdk/config.json ships with "enableCloudLogging": true, and with cloud logging on, the SDK checks the logs key at startup and prints an "Invalid FIVEMANAGE_LOGS_API_KEY" error if it is empty. Using the SDK only for screenshots? Set enableCloudLogging to false.
Step 3: Install fmsdk and screenshot-basic
- Download
fmsdk.zipfrom the SDK's latest release, which on 31 October was v3.2.0 from 6 August 2026. - Unzip it into your
resourcesfolder. The folder must be namedfmsdkand sit directly inresources, because the SDK does not support category folders such as[fivemanage]. - Add Cfx.re's screenshot-basic if your server lacks it; the SDK captures screens with it.
- Start screenshot-basic first in server.cfg:
ensure screenshot-basic
ensure fmsdk
The SDK is a JavaScript resource that asks for Node.js 22 in its manifest (node_version '22'), so keep FXServer on a current build; our server artifacts guide lists them. On our FiveM hosting you upload both folders in the control panel or over SFTP and edit server.cfg in the same panel, with txAdmin pre-installed for the restart.
Fivemanage Upload: Screenshots From Your Own Scripts
This staff command uses the SDK's server export to screenshot a player by server ID and upload the image; the true at the end limits it to players with the command.shot ace, as Cfx.re's RegisterCommand docs describe:
-- server.lua in your own resource
-- grant it in server.cfg: add_ace group.admin command.shot allow
RegisterCommand('shot', function(src, args)
local target = tonumber(args[1])
if not target or not DoesPlayerExist(target) then return end
local ok, result = pcall(function()
return exports.fmsdk:takeServerImage(target, {
name = 'Staff screenshot',
requestedBy = src
}, { path = 'screenshots/staff' }, 10000)
end)
if ok then
print(('[shot] %s'):format(result.data.url))
else
print(('[shot] failed: %s'):format(result))
end
end, true)
The arguments after the player, as the v3.2.0 source has them:
- Metadata (second): fields you can search in the dashboard.
- Options (third):
pathfor a folder,filenameandretentionExempt. - Timeout (fourth): in milliseconds. Fivemanage's SDK docs page shows it as the third argument, but in v3.2.0 it is the fourth, so pass
nilfor the options if you only want a timeout.
The export returns the API's reply, so the link is at result.data.url; the README's examples print imageData.url, which is nil in v3.2.0.
Behind the export, the SDK calls screenshot-basic's requestClientScreenshot, gets a WebP image at quality 0.8 and uploads it from the server with your Media key, so the key never reaches a player's PC. Client scripts can call exports.fmsdk:takeImage(metadata, options) for their own screenshot, and that upload also runs on the server.
Fivemanage's images page also shows a shortcut: screenshot-basic's requestScreenshotUpload posting straight to the API with your token. That code runs in a client script, and Fivemanage's own docs warn that a token used that way is exposed to every client. When a UI must upload by itself, such as a NUI phone camera, have the server fetch a short-lived presigned URL with exports.fmsdk:requestPresignedUrl('image') and send only that URL to the client.
Fivemanage Logs: Datasets, Levels and Player Identifiers
Create your datasets in the dashboard first (Dev has room for three), then log from any server script:
exports.fmsdk:Log('economy', 'info', 'Player bought an item', {
playerSource = source,
item = 'WEAPON_PISTOL',
price = 500
})
The arguments are the dataset name, the level, the message and a metadata table. Info, Warn and Error are shorthands without the level, and the older LogMessage(level, message, metadata) always writes to the dataset default. One example on Fivemanage's best practices page calls exports.fivemanage:log(level, message, metadata). The resource is fmsdk, so that call becomes exports.fmsdk:LogMessage, or exports.fmsdk:Log with the dataset name added in front.
With playerSource or targetSource in the metadata, the SDK attaches that player's identifiers, such as license, Discord and Steam. Logs leave in batches every 5 seconds, or sooner once 10 lines wait for one dataset.
In fmsdk/config.json, level is the lowest level kept (the default info drops debug), and console also prints every line in the server console. Five blocks log events for you, all off by default:
| Block | What it logs |
|---|---|
playerEvents | Players connecting, joining and dropping |
chatEvents | Every chat message |
baseEvents | Deaths and kills reported by the baseevents resource |
txAdminEvents | Kicks, warns, bans, direct messages, announcements, scheduled restarts, shutdowns and whitelist changes |
oxInventoryEvents | ox_inventory purchases and item moves |
Switch one on by editing its block and leaving the rest of the file as it is:
"playerEvents": { "enabled": true, "dataset": "connections" },
In v3.2.0 the txAdmin events go to default, whatever dataset you set for them.
ox_lib and oxmysql Logging
Both libraries can send logs to Fivemanage without fmsdk.
ox_lib. Its logger reads these convars:
set ox:logger "fivemanage"
set fivemanage:key "your_logs_token"
set fivemanage:dataset "oxlib"
The dataset line is optional. ox_lib's default service is Datadog, so without the first line nothing reaches Fivemanage. Any resource that loads @ox_lib/init.lua can then log from a server script:
lib.logger(source, 'garage', 'Vehicle stored', { plate = 'ABC 123' })
ox_lib adds the player's name and identifiers, skips the IP address and sends its batch every half second. Our ox_lib tutorial covers loading the library.
oxmysql. Two lines:
set mysql_logger_service "fivemanage"
set FIVEMANAGE_LOGS_API_KEY "your_logs_token"
oxmysql then sends each failed query to Fivemanage as an error, with the resource that ran it and the database error; successful queries are not sent. It reads the same FIVEMANAGE_LOGS_API_KEY convar as fmsdk, so if that line is already in server.cfg you only add the first. Our oxmysql guide covers its other settings.
Privacy Defaults and How Long Data Stays
Fivemanage's privacy policy (last updated 24 January 2024) covers your account and payments, not what your scripts send. The defaults are a sensible start:
- IP addresses stay out. fmsdk excludes
ipidentifiers by default, and so does ox_lib. License, Discord and Steam IDs do go in, and they tie a line to a person. - Chat logging is off. Turn on
chatEventsonly if your rules tell players their messages are stored. - Screenshot links are made for sharing. A link that loads in a Discord embed opens for anyone who has it, so post staff screenshots in staff channels only.
- Logs expire after 15 days on Dev and Hobby and 90 days on Pro.
- Files stay until deleted. Under Storage, Settings you can set retention per media type to 7, 30, 90, 180 or 365 days (a Hobby and Pro feature on the pricing table). Retention Exempt files skip it, and automatic deletion cannot be undone.
- Roles matter. The Developer role can view and copy API tokens. Give a moderator who only reads logs the Member role with the Logs permission switched on.
- Content rules apply. Fivemanage's terms ban sexual content and gore, among other things, and let it remove files that break them, which matters once players upload phone photos.
Want everything on your own machine? Fivemanage Lite is a self-hosted edition under the Functional Source License (FSL-1.1-ALv2). It runs in Docker with PostgreSQL, ClickHouse and S3-compatible storage such as MinIO, so it needs a server with root access, such as a KVM VPS. fmsdk, ox_lib and oxmysql are wired to Fivemanage's hosted API, though, so using them with Lite means changing their code.
Common Problems
"Invalid FIVEMANAGE_LOGS_API_KEY" at startup. Cloud logging is on in config.json and the logs key is empty or misspelled. Add it, or set enableCloudLogging to false.
"Failed to upload image to Fivemanage". The media key is missing (the message then includes "Invalid FIVEMANAGE_MEDIA_API_KEY") or the API refused it. Check that the token has the Media or Images scope.
"Screenshot request timed out". You passed a timeout and no image came back in time. Check that screenshot-basic starts before fmsdk and that the player is still connected.
"Invalid config settings" or "Error loading config". Your config.json lost a key or its JSON broke. Start again from the shipped file.
Logs never appear. The dataset name in your code must match the dashboard, lines below level are dropped, and batches leave every 5 seconds.
Old Fivemerr links are broken. Fivemerr's file host, files.fivemerr.com, answered with a Cloudflare 522 error on 31 October 2026. Files you moved with Fivemanage's migration tool (Storage, Migration, fed with the CSV export from Fivemerr's Media tab) kept their paths, so replace files.fivemerr.com with r2.fivemanage.com in your scripts. Files that were never migrated have to be uploaded again from your own copies.
FAQ
What is Fivemanage? A hosted service that stores media uploaded by game server scripts and collects server logs, with SDKs for FiveM, Hytale and Roblox. Fivemanage AS runs it, not Cfx.re.
Is Fivemanage free? The Dev plan is: 10 GB of files, 20 GB of bandwidth a month, 5 GB of logs kept for 15 days and three datasets, as listed on 31 October 2026. Hobby is $8 a month and Pro $24.
Do I need Fivemanage to run a FiveM server? No. It only matters when a script uploads media, or when you want logs in a searchable dashboard next to txAdmin's own server log.
Where do I put my Fivemanage API key?
In server.cfg with set: FIVEMANAGE_MEDIA_API_KEY and FIVEMANAGE_LOGS_API_KEY for fmsdk and oxmysql, fivemanage:key for ox_lib. Scripts such as LB Phone have their own server-side file for it. Never put it in a client script.
Can players see my Fivemanage token?
Not when it sits in a set convar and only server code uses it. They can when it is in a client script, a NUI page or a setr or sets convar.
What happened to Fivemerr? Fivemanage's February 2026 post says Fivemerr shut down, and fivemerr.com answered with a Cloudflare 522 error on 31 October 2026. Files moved with Fivemanage's migration tool kept their paths; see Common Problems for the links.
Sources
All opened on 31 October 2026:
- Fivemanage: pricing, home page, privacy policy, terms of service, blog posts on bandwidth limits and new tiers (16 February 2026), free logging (15 June 2025) and trials and refunds (15 July 2025)
- Fivemanage docs: quickstart, first steps, images, presigned URLs, logging best practices, API introduction, migrate from V2, migrate from Fivemerr, upload files, storage settings, deleting files, team roles, LB Phone, Lite introduction, Lite quickstart, docs index
- Fivemanage SDK for FiveM: installation, configuration, images, logs, presigned URLs, GitHub repository and README, v3.2.0 release, source files images/server/main.ts, images/common/misc.ts, logs/server/logger.ts, fivemanage-transport.ts, txadmin.ts, config.json and fxmanifest.lua
- Fivemanage Lite: repository and license
- ox_lib: logger and Fivemanage provider
- oxmysql: README, logger and Fivemanage module
- Cfx.re: screenshot-basic, convars, resource manifest, server commands, RegisterCommand, DoesPlayerExist
- fivemerr.com and
files.fivemerr.com(both Cloudflare error 522)