# Integrações

Use a CDN com o screenshot-basic, o ox_inventory, a NUI e a loading screen, e envie arquivos de qualquer script pela API HTTP.

Source: https://fivedash.fivex.gg/docs/pt/cdn/integrations

A CDN serve de depósito para tudo o que a cidade mostra: os ícones do inventário, a loading screen, a NUI dos scripts e os prints que o jogo tira. Esta página mostra as integrações que o painel do FiveDash já traz prontas e, para o resto, como enviar arquivos pela API HTTP. É para quem configura os scripts do servidor.

## Antes de começar

* **CDN criada:** veja [CDN](https://fivedash.fivex.gg/docs/pt/cdn/overview).
* **Para enviar de scripts:** uma [chave de envio](https://fivedash.fivex.gg/docs/pt/cdn/upload-keys), criada com **Configurações** (CDN) em **Configurar**.
* **Para copiar links:** **Arquivos** em **Ver**.

## screenshot-basic (prints do jogo)

O painel gera o código pronto do screenshot-basic quando você cria uma chave.

### Crie a pasta dos prints

Em **CDN → Arquivos**, crie (ou use) a pasta `screenshots`.

### Crie a chave

Em **CDN → Configurações → Chaves de envio**, clique em **Nova chave**, escolha a pasta `screenshots` em **Envia para** e clique em **Criar chave**.

### Copie o código

Na janela **Chave criada**, abra a aba **screenshot-basic (Lua)** e clique em **Copiar código**. O código já vem com o endereço de envio e a chave.

### Cole no script

Cole o código no lado do cliente do script que tira o print e reinicie o script.

O código que o painel gera tem este formato:

```lua
exports['screenshot-basic']:requestScreenshotUpload('https://cdn.fivex.sh/api/v1/upload', 'file', {
  headers = { ['Authorization'] = 'Bearer fdm_xxxxxxxx' },
  encoding = 'webp'
}, function(data)
  local res = json.decode(data)
  print(res.url) -- cdn.fivex.sh/cidade-exemplo/screenshots/print-….webp
end)
```

`res.url` é o link público do print, pronto para mandar num log ou num webhook.

> No screenshot-basic a chave vai junto do script no cliente, e o jogador consegue ver. Por isso a chave só envia para a pasta dela. Use uma pasta só para prints e não marque **Também pode apagar** nessa chave.

## ox_inventory (ícones dos itens)

### Envie os ícones

Envie os ícones para uma pasta, como `itens`. Cada item usa um arquivo com o nome dele, como `nome-do-item.png`.

### Copie a linha

Em **CDN → Arquivos**, selecione a pasta para ver os detalhes dela. Em **Imagens do inventário**, copie a linha pronta.

### Cole no server.cfg

Cole a linha no `server.cfg` e reinicie o servidor.

A linha tem este formato:

```bash
setr inventory:imagepath "https://cdn.fivex.sh/cidade-exemplo/itens"
```

## NUI, loading screen e Discord

Para usar um arquivo em HTML, CSS, Lua ou no Discord, abra o menu do arquivo e use **Copiar como**:

| Opção             | Onde usar                         | O que copia                                                                    |
| ----------------- | --------------------------------- | ------------------------------------------------------------------------------ |
| **Lua**           | `config.lua` e scripts            | `"https://cdn.fivex.sh/cidade-exemplo/itens/agua.png"`                         |
| **HTML** (imagem) | A NUI e a loading screen          | `<img src="https://cdn.fivex.sh/…" alt="agua">`                                |
| **HTML** (vídeo)  | Fundo em vídeo da loading screen  | `<video src="https://cdn.fivex.sh/…" autoplay muted loop playsinline></video>` |
| **HTML** (áudio)  | Música da loading screen          | `<audio src="https://cdn.fivex.sh/…" preload="auto"></audio>`                  |
| **CSS**           | Fundo da NUI ou da loading screen | `background-image: url("https://cdn.fivex.sh/…");`                             |
| **Markdown**      | Mensagens no Discord              | `![agua](https://cdn.fivex.sh/…)`                                              |

> O jogo, a NUI e a loading screen sempre podem usar os arquivos, mesmo com **Só a cidade usa os arquivos** ligado em **CDN → Configurações → Proteção**. Para outros sites (como a loja e o site de regras), adicione o domínio em **Sites liberados**.

## Enviar de qualquer script (API HTTP)

Scripts de celular, câmeras, anexos de denúncia e qualquer outra ferramenta que faça uma requisição HTTP podem enviar arquivos com uma chave de envio.

### Enviar um arquivo

```bash
curl -X POST https://cdn.fivex.sh/api/v1/upload \
  -H "Authorization: Bearer fdm_xxxxxxxx" \
  -F "file=@print.png"
```

| Parte                        | Valor                                                                                                                                   |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Método e endereço            | `POST https://cdn.fivex.sh/api/v1/upload`                                                                                               |
| `Authorization`              | `Bearer` seguido da chave (`fdm_…`)                                                                                                     |
| Corpo                        | `multipart/form-data` com **um** arquivo no campo `file` (ou `files[]`)                                                                 |
| Tamanho                      | Até 20 MiB por arquivo                                                                                                                  |
| Formatos                     | PNG, JPEG, WebP, GIF, SVG, MP4, WebM, MOV, MP3, OGG, WAV, M4A                                                                           |
| Pasta                        | Sempre a pasta da chave. Não dá para escolher outra no formulário.                                                                      |
| `Idempotency-Key` (opcional) | De 8 a 128 caracteres (letras, números, `_`, `.`, `-`). Repetir o mesmo envio com a mesma chave por até 24 horas não duplica o arquivo. |

O nome do arquivo vem do arquivo enviado. Se já existir um com o mesmo nome na pasta, o novo ganha um número (`print-1.png`). As configurações de **Imagens** da CDN (otimização, largura máxima, metadados) também valem para os envios pela API.

A resposta traz o link público em `url`:

```json
{
  "ok": true,
  "id": "a1b2c3d4-…",
  "url": "https://cdn.fivex.sh/cidade-exemplo/screenshots/print.png",
  "file": {
    "id": "a1b2c3d4-…",
    "name": "print.png",
    "kind": "image",
    "mime": "image/webp",
    "size": 482133,
    "width": 1920,
    "height": 1080,
    "uploadedBy": "Chave: Câmera do jogo",
    "createdAt": "2026-11-09T14:28:00.000Z"
  }
}
```

### Apagar um arquivo

Só com uma chave que tem **Também pode apagar**, e só arquivos que essa mesma chave enviou:

```bash
curl -X DELETE https://cdn.fivex.sh/api/v1/files/a1b2c3d4-… \
  -H "Authorization: Bearer fdm_xxxxxxxx"
```

A resposta é `{"ok":true}`.

### Erros

Os erros vêm como `{"ok": false, "code": "…", "message": "…"}`, com a mensagem em português.

| Status | Quando                                                                                               |
| ------ | ---------------------------------------------------------------------------------------------------- |
| `400`  | Formulário inválido, sem arquivo no campo `file`, mais de um arquivo, ou `Idempotency-Key` inválida. |
| `401`  | Chave ausente, inválida ou revogada.                                                                 |
| `403`  | A chave não pode apagar arquivos.                                                                    |
| `404`  | A pasta da chave não está disponível, ou o arquivo a apagar não existe (ou não é dessa chave).       |
| `409`  | Mesma `Idempotency-Key` com outro arquivo.                                                           |
| `413`  | Arquivo maior que o permitido.                                                                       |
| `429`  | Uma franquia do plano foi atingida ou muitas tentativas.                                             |
| `503`  | A CDN está indisponível. Tente de novo.                                                              |

Detalhes técnicos completos em [API da CDN](https://fivedash.fivex.gg/docs/pt/developers/cdn-api).

## Perguntas frequentes

**Dá para usar o ShareX ou outro programa de print?**
O FiveDash não traz uma configuração pronta para eles. Qualquer programa que consiga fazer um `POST` com `multipart/form-data` no campo `file` e o cabeçalho `Authorization: Bearer fdm_…` funciona com a API acima. A resposta traz o link em `url`.

**O print enviado aparece no painel?**
Sim. Ele cai na pasta da chave, com **Enviado por** "Chave: …", e conta no espaço e nas franquias.

**Posso mandar o link do print num log do FiveDash?**
Sim. No export, use a opção `image` com o link. Veja [Recurso FiveM](https://fivedash.fivex.gg/docs/pt/developers/fivem-resource).

## Próximos passos

[Chaves de envio](https://fivedash.fivex.gg/docs/pt/cdn/upload-keys)Crie e revogue chaves.
[API da CDN](https://fivedash.fivex.gg/docs/pt/developers/cdn-api)Referência completa para desenvolvedores.
[Enviar arquivos](https://fivedash.fivex.gg/docs/pt/cdn/upload-files)Organize as pastas e copie links.
[Uso e limites](https://fivedash.fivex.gg/docs/pt/cdn/usage-and-limits)Franquias de envio e tráfego.
