Upload de mídia
Envia uma imagem, PDF ou vídeo do seller e devolve a URL pública para usar em produtos, logo e banner.
Guarda o arquivo no armazenamento da loja e devolve o registro com a url pública. O arquivo fica ligado a um dono (owner_type + owner_id), por exemplo um produto seu ou o seu seller. O servidor ignora o tipo declarado pelo cliente e identifica o formato pelo conteúdo do arquivo.
/api/v1/vendor/mediaSellerEnviar uma imagem, PDF ou vídeo
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário do painel do seller (lojista), obtido no login (veja Tokens).Content-Typestringobrigatóriomultipart/form-data.Corpo da requisição
filefileobrigatórioO arquivo. Até 10 MB. Formatos aceitos: JPEG, PNG, GIF, WebP, AVIF, SVG, PDF e MP4.
owner_typestringobrigatórioA que o arquivo pertence:
product (um produto seu), vendor (o seu seller: logo e banner) ou outro rótulo livre usado pelo painel.owner_idstringobrigatórioId do dono. Para
product, o id do produto; para vendor, o id do seu seller.Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/vendor/media" \
-H "Authorization: Bearer $TOKEN" \
-F "owner_type=vendor" \
-F "owner_id=$VENDOR_ID" \
-F "file=@logo.png;type=image/png"Resposta
201Arquivo guardado
json
{
"id": "9b1d6e22-0c3f-4f0a-8d51-6a7c4e3d2b10",
"tenant_id": "dfe2555e-bfd0-41a8-9fa1-9586999f3798",
"owner_id": "7c1f0b52-3a64-4d1e-9a40-5f0c2b6a91d3",
"owner_type": "vendor",
"filename": "logo.png",
"content_type": "image/png",
"size": 48213,
"url": "https://cdn.example.com/dfe2555e/vendor/7c1f0b52/9b1d6e22_logo.png",
"position": 1,
"created_at": "2026-10-11T18:20:00Z"
}Campos da resposta
iduuidId do arquivo.
tenant_iduuidId interno da loja.
owner_idstringDono informado.
owner_typestringTipo do dono informado.
filenamestringNome original do arquivo.
content_typestringFormato identificado pelo conteúdo.
sizeintegerTamanho em bytes.
urlstringURL pública do arquivo. Guarde esta URL no campo que a usa (
logo_url, imagem de produto...).altstringTexto alternativo. Ausente quando não definido.
positionintegerOrdem entre os arquivos do mesmo dono, a partir de 1.
created_atstringRFC 3339.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} / {"error":"invalid or expired token"} |
| 403 | O token não é de um usuário seller (por exemplo, é de um administrador da loja). | {"error":"insufficient permissions"} |
| 403 | O cadastro do seller ainda está em análise (só a tela de cadastro funciona até a aprovação). | {"error":"vendor_pending_review","message":"..."} |
| 403 | O usuário tem papel de seller, mas não está ligado a nenhum seller. | {"error":"no vendor account associated with this user"} |
| 400 | Falta file, owner_id ou owner_type, ou o corpo não é um formulário multipart válido ou passa de 10 MB. | {"error":"file is required"} / {"error":"owner_id is required"} / {"error":"owner_type is required"} / {"error":"failed to parse multipart form"} |
| 400 | Formato não permitido (o detalhe diz o formato detectado). | {"error":"unsupported file type","detail":"Allowed types: JPEG, PNG, GIF, WebP, AVIF, SVG, PDF, MP4. Detected: text/plain; charset=utf-8"} |
| 403 | owner_type é product ou vendor e o dono não é seu (produto de outro seller ou outro seller). | {"error":"owner_not_allowed","code":"owner_not_allowed"} |
| 500 | Falha ao guardar o arquivo. | {"error":"failed to upload file","detail":"..."} |