POSTUpload de arquivo
Envia um arquivo (imagem, PDF) do app do seller e o liga a um produto ou a outro dono.
Recebe um arquivo por multipart/form-data, guarda-o no armazenamento da loja e devolve a URL. O app usa para as fotos do produto: primeiro cria o produto (Produto: escrita), depois envia cada arquivo apontando para o product_id.
/api/v1.0/vendor_uploadSellerEnviar um arquivo
Corpo da requisição (multipart/form-data)
filefileobrigatórioContent-Type da parte) são guardados.owner_idstringpadrão: tempproduct_id. Sem ele, o arquivo fica em uma área temporária (temp) e não se liga a nenhum produto.owner_typestringpadrão: productproduct).Cabeçalhos
AuthorizationstringobrigatórioBasic base64(e-mail:chave_de_api) ou Bearer $TOKEN do usuário de um seller ativo.Content-Typestringobrigatóriomultipart/form-data, com o boundary. A maioria dos clientes HTTP monta sozinha./api/vendor_uploadSellerAlias de POST /api/v1.0/vendor_upload
Mesmo corpo, mesma resposta e mesmo comportamento de POST /api/v1.0/vendor_upload. Nesta URL (sem /v1.0), os ids de entidades usam o formato numérico legado.
/api/v1.0/vn_upload_fileSellerAlias de POST /api/v1.0/vendor_upload
Mesmo corpo, mesma resposta e mesmo comportamento de POST /api/v1.0/vendor_upload.
/api/vn_upload_fileSellerAlias de POST /api/v1.0/vendor_upload
Mesmo corpo, mesma resposta e mesmo comportamento de POST /api/v1.0/vendor_upload. Nesta URL (sem /v1.0), os ids de entidades usam o formato numérico legado.
Exemplo de requisição
curl -u "$EMAIL:$API_KEY" -X POST "$BASE_URL/api/v1.0/vendor_upload" \
-F "file=@camisa.png;type=image/png" \
-F "owner_type=product" \
-F "owner_id=3a2e6c1d-8f4b-4e55-9d0a-7b1c2e3f4a5b"Resposta
{
"status": 200,
"data": {
"success": true,
"message": "File uploaded successfully",
"file": {
"id": "7c0f2b9e-1d44-4c0a-b6a4-2b3c4d5e6f70",
"url": "/uploads/dfe2555e/product/3a2e6c1d/9f1c_camisa.png",
"filename": "camisa.png"
}
}
}Campos da resposta
data.file.iduuiddata.file.urlstringBASE_URL quando começar por /.data.file.filenamestringErros
| Status | Quando | Corpo |
|---|---|---|
| 200 | Corpo que não é multipart válido | {"status": 200, "data": {"success": false, "message": "Invalid file upload"}} |
| 200 | Parte file ausente | {"status": 200, "data": {"success": false, "message": "No file provided"}} |
| 200 | Falha ao ler o arquivo | {"status": 200, "data": {"success": false, "message": "Failed to read file"}} |
| 200 | Armazenamento recusou | {"status": 200, "data": {"success": false, "message": "Upload failed: <motivo>"}} |
| 200 | Serviço de upload fora do ar | {"status": 200, "data": {"success": false, "message": "Upload service not available"}} |
| 200 | Conta que não é de seller ativo | {"status": 200, "data": {"success": false, "message": "User is not a vendor", "action": "logout"}} |
| 401 | Sem credencial ou credencial inválida | {"message": "Authentication required. Use HTTP Basic with email:api_key or Bearer <jwt>.", "status": 401} |
| 403 | Usuário cliente (não seller nem administrador) | {"message": "Forbidden: vendor scope required", "status": 403} |