Skip to main content
The MDT uploads gallery images, profile pictures, evidence photos, and CCTV, bodycam, and dashcam recordings to an outside service. It saves the link it gets back. You need two things: the provider in config/config.lua, and its key in config/credentials.lua.

Choose a provider

config/config.lua
There is no auto-detection. Always set Config.Upload yourself.

Where keys go

Every key goes in config/credentials.lua, in the Config.ApiKeys table. Fill in only the provider you use.
config/credentials.lua
Never put keys in config/config.lua. It’s a shared script, so every player’s client can read it. credentials.lua only loads on the server. Never share or publish it.

Fivemanage

Fivemanage is a media and logging platform made for FiveM. It’s the provider we recommend: one key covers images, video recordings, and your MDT logs.

Get 20% off Fivemanage for 3 months

Sign up with our referral link. We earn a small commission, which helps us keep building new features.

Built for FiveM

Made for game servers, with a dashboard to browse and manage every file.

Images and video

Stores CCTV, bodycam, and dashcam recordings, not only screenshots.

Logs included

The same key sends MDT logs to Fivemanage, searchable from the dashboard.
1

Create an account

Sign up at Fivemanage and open your dashboard.
2

Create an API key

Create an API key and copy it.
Creating an API key in the Fivemanage dashboard
3

Add the key

config/credentials.lua
4

Select Fivemanage

config/config.lua
5

Restart and test

Restart the server, then upload an image in the MDT.
Already running the fmsdk resource? The MDT uses it for images automatically. Videos still use Config.ApiKeys.Fivemanage, so keep the key set.

Qbox CDN

The Qbox CDN is a hosted file service from the Qbox team. Files go from the player’s client straight to the CDN, so they don’t pass through your server.
1

Get your key

Follow the Qbox CDN guide to create an API key. Copy it.
2

Add the key

config/credentials.lua
3

Select Qbox

config/config.lua
4

Restart and test

Restart the server, then upload an image in the MDT.

Discord

Discord stores files posted to a channel through a webhook. It’s a quick way to try the MDT without an account.
1

Create a webhook

In Discord, open the settings of a private channel and go to Integrations. Click Webhooks, then New Webhook, then Copy Webhook URL.
2

Add the webhook

config/credentials.lua
3

Select Discord

config/config.lua
4

Restart and test

Restart the server, then upload an image in the MDT.
Discord attachment links expire after a while, so old images and recordings stop loading. Discord also limits file sizes. Use Fivemanage or Qbox for anything you want to keep, such as evidence.

Custom

Use 'custom' to send files to your own storage or API. Fill in the two functions in server/custom/upload/custom.lua. Store your key in Config.ApiKeys.Custom and read it inside Upload.
server/custom/upload/custom.lua
For a multipart/form-data API, use Utils.Http.uploadBinary like the example. Don’t build the body yourself: FiveM cuts request bodies at the first null byte, which breaks real images. server/custom/upload/discord.lua is a complete working example.

Upload speed

Uploads relayed through your server are capped by Config.UploadBandwidth, in bytes per second.
config/config.lua
Lower it if players with weak connections time out on large recordings. Raise it for faster uploads. To keep recordings small, set the size and length limits in Config.Cameras.Recording:
config/config.lua
Officers can also paste image links. To only accept links from your provider, list its hostnames in Config.Images.AllowedHosts. Subdomains are included.
config/config.lua
An empty list accepts any link.

Troubleshooting

If an upload fails, check the server console. The MDT prints which provider failed and why.