Detalhes do Anúncio
Consulte, atualize ou remova um anúncio específico através do seu ID.
Endpoint
GET /inventory/item/{ad_id}
PUT /inventory/item/{ad_id}
PATCH /inventory/item/{ad_id}
DELETE /inventory/item/{ad_id}
Métodos
GET: Retorna os detalhes completos de um anúncio específicoPUT: Atualiza completamente um anúncioPATCH: Atualiza parcialmente um anúncioDELETE: Remove um anúncio (marca como vendido ou remove completamente)
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
ad_id | integer | ID do anúncio |
Autenticação
Este endpoint requer autenticação via JWT. Inclua o token no header:
Authorization: Bearer {access_token}
GET - Obter Detalhes do Anúncio
Requisição
Método: GET
Endpoint: /inventory/item/{ad_id}
Exemplo de Resposta
Status Code: 200 OK
{
"id": 12345,
"status": 1,
"category": 1,
"year": {
"make": 2023,
"model": 2024
},
"price": 85000,
"km": 15000,
"license_plate": "ABC1234",
"make": {
"id": 1,
"name": "Toyota"
},
"model": {
"id": 10,
"name": "Corolla"
},
"fuel": {
"id": 1,
"name": "Flex"
},
"status_ad_site": true,
"version_site": "XEi 2.0",
"youtube_url": "https://www.youtube.com/watch?v=example",
"accept_exchange": true,
"alienated": false,
"extended_warranty": false,
"factory_warranty": true,
"inspection": false,
"is_imported": false,
"is_new": false,
"licensed": true,
"only_owner": true,
"pwd": false,
"reviews_at_the_dealership": false,
"tax_payed": true,
"text_price_site": "Preço",
"show_price_site": true,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-20T14:45:00Z",
"created_by": "João Silva",
"updated_by": "Maria Santos",
"first_photo": "https://media.integradordeanuncios.com.br/thumb/10/foto1.jpg",
"total_photo": 5,
"version_detail_id": 100,
"color": {
"id": 5,
"name": "Branco"
},
"integration": [
{
"id": 1,
"portal": {
"id": 5,
"name": "Webmotors",
"logo": "https://media.integradordeanuncios.com.br/media/logo/webmotors.webp"
},
"status": {
"id": 1,
"name": "Ativo"
},
"listing_type": {
"id": 1,
"name": "Plano Básico"
},
"ad_url": "https://www.webmotors.com.br/anuncio/12345",
"ad_title": "Toyota Corolla XEi 2.0 2024",
"created_at": "2024-01-15T10:35:00Z",
"updated_at": "2024-01-20T14:50:00Z",
"is_synced": true,
"sync_error": null
}
],
"features": [
{
"id": 1,
"name": "Ar Condicionado"
},
{
"id": 2,
"name": "Direção Hidráulica"
}
],
"address": {
"id": 1,
"dealer": 10,
"address": "Rua das Flores",
"number": "123",
"complement": "Sala 45",
"neighborhood": "Centro",
"city": {
"id": 1,
"name": "São Paulo",
"capital": true,
"state": {
"id": 1,
"name": "São Paulo",
"initials": "SP"
}
},
"zip_code": "01310-100",
"order": 1,
"map_url": "https://maps.google.com/?q=Rua+das+Flores,+123",
"dealer_name": "LOJA TESTE - MATRIZ",
"landmark": "Próximo ao metrô"
},
"photos": [
{
"id": 1,
"ad_id": 12345,
"order": 1,
"thumb": "https://media.integradordeanuncios.com.br/thumb/10/foto1.jpg",
"url": "https://media.integradordeanuncios.com.br/foto/10/foto1.jpg"
},
{
"id": 2,
"ad_id": 12345,
"order": 2,
"thumb": "https://media.integradordeanuncios.com.br/thumb/10/foto2.jpg",
"url": "https://media.integradordeanuncios.com.br/foto/10/foto2.jpg"
}
],
"chassi": "9BW12345678901234",
"description": "Veículo em excelente estado, único dono, revisões em dia.",
"note": "Observação adicional",
"ad_score": 85,
"url_site": "https://www.lojatest.com.br/anuncio/12345",
"origin": {
"id": 1,
"name": "Manual"
},
"version": {
"id": 100,
"name": "XEi 2.0"
},
"doors": {
"id": 1,
"name": "4 portas"
},
"transmission": {
"id": 1,
"name": "Automática"
}
}
Observações
- Retorna todos os detalhes do anúncio, incluindo integrações ativas, fotos, opcionais e endereço
- Campos específicos como
version,doorsetransmissionaparecem apenas para carros (category= 1) - O campo
integrationretorna apenas integrações com status ativo - O campo
photosretorna apenas fotos não deletadas, ordenadas por ordem de exibição
PUT - Atualizar Completamente o Anúncio
Requisição
Método: PUT
Endpoint: /inventory/item/{ad_id}
Campos Obrigatórios
Todos os campos obrigatórios devem ser fornecidos em uma atualização completa. Consulte a documentação de criação de anúncios para a lista completa de campos obrigatórios.
Exemplos por Categoria
Carro (category = 1)
{
"category": 1,
"version_detail_id": 100,
"color": 5,
"make_year": 2023,
"model_year": 2024,
"km": 15000,
"price": 85000,
"description": "Veículo em excelente estado, único dono, revisões em dia",
"license_plate": "ABC1234",
"is_new": false,
"accept_exchange": true,
"alienated": false,
"licensed": true,
"only_owner": true,
"tax_payed": true,
"factory_warranty": true,
"extended_warranty": false,
"inspection": false,
"pwd": false,
"reviews_at_the_dealership": false,
"is_armored": false,
"armored_level": null,
"armored": null,
"version_site": "XEi 2.0",
"youtube_url": "https://www.youtube.com/watch?v=example",
"chassi": "9BW12345678901234",
"note": "Observação adicional",
"address_id": 1,
"features": [1, 2, 3],
"photos": [
{
"order": 1,
"photo_name": "foto1.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
},
{
"order": 2,
"photo_name": "foto2.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
}
],
"text_price_site": "Preço",
"show_price_site": true
}
Campos específicos para carros:
| Campo | Tipo | Descrição |
|---|---|---|
is_armored | boolean | Indica se o veículo é blindado |
armored_level | integer | Nível de blindagem (pode ser null) |
armored | integer | Tipo de blindagem (pode ser null) |
Motocicleta (category = 2)
{
"category": 2,
"version_detail_id": 200,
"color": 3,
"make_year": 2022,
"model_year": 2023,
"km": 5000,
"price": 35000,
"description": "Motocicleta seminova, única dona, revisões em dia",
"license_plate": "XYZ5678",
"is_new": false,
"accept_exchange": false,
"alienated": false,
"licensed": true,
"only_owner": true,
"tax_payed": true,
"factory_warranty": true,
"extended_warranty": false,
"inspection": false,
"pwd": false,
"reviews_at_the_dealership": false,
"gear": 1,
"refrigeration": 2,
"power_supply": 1,
"engine": 1,
"breaks": 1,
"start": 1,
"engine_capacity": 600,
"version_site": "CB 600F",
"youtube_url": null,
"chassi": "9BW98765432109876",
"note": null,
"address_id": 1,
"features": [10, 11],
"photos": [
{
"order": 1,
"photo_name": "moto_foto1.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
}
],
"text_price_site": "Preço",
"show_price_site": true
}
Campos específicos para motocicletas:
| Campo | Tipo | Descrição |
|---|---|---|
gear | integer | Tipo de câmbio (1=Manual, 2=Automático, etc.) |
refrigeration | integer | Tipo de refrigeração (1=Ar, 2=Líquido, etc.) |
power_supply | integer | Tipo de alimentação (1=Injeção, 2=Carburador, etc.) |
engine | integer | Tipo de motor (1=Monocilíndrico, 2=Bicilíndrico, etc.) |
breaks | integer | Tipo de freio (1=Disco, 2=Tambor, etc.) |
start | integer | Tipo de partida (1=Elétrica, 2=Pedal, etc.) |
engine_capacity | integer | Capacidade do motor em cc |
Caminhão (category = 3)
{
"category": 3,
"version_detail_id": 300,
"color": 2,
"make_year": 2021,
"model_year": 2022,
"km": 80000,
"price": 250000,
"description": "Caminhão em ótimo estado, usado para transporte de carga",
"license_plate": "DEF9012",
"is_new": false,
"accept_exchange": true,
"alienated": false,
"licensed": true,
"only_owner": false,
"tax_payed": true,
"factory_warranty": false,
"extended_warranty": true,
"inspection": true,
"pwd": true,
"reviews_at_the_dealership": true,
"is_armored": false,
"armored_level": null,
"armored": null,
"power": 400,
"load_capacity": 15000,
"pulling_capacity": 30000,
"implement": 1,
"type": 2,
"cabin": 1,
"traction": 2,
"breaks": 1,
"suspension": 1,
"version_site": "FH 440",
"youtube_url": null,
"chassi": "9BW11111111111111",
"note": "Documentação completa",
"address_id": 1,
"features": [20, 21, 22],
"photos": [
{
"order": 1,
"photo_name": "caminhao_foto1.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
},
{
"order": 2,
"photo_name": "caminhao_foto2.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
}
],
"text_price_site": "Consulte",
"show_price_site": false
}
Campos específicos para caminhões:
| Campo | Tipo | Descrição |
|---|---|---|
is_armored | boolean | Indica se o veículo é blindado |
armored_level | integer | Nível de blindagem (pode ser null) |
armored | integer | Tipo de blindagem (pode ser null) |
power | integer | Potência do motor em CV |
load_capacity | integer | Capacidade de carga em kg |
pulling_capacity | integer | Capacidade de tração em kg |
implement | integer | ID do tipo de implemento |
type | integer | Tipo de caminhão (1=Rodoviário, 2=Fora de estrada, etc.) |
cabin | integer | Tipo de cabine (1=Simples, 2=Sleeper, etc.) |
traction | integer | Tipo de tração (1=4x2, 2=4x4, 3=6x2, etc.) |
breaks | integer | Tipo de freio (1=Ar, 2=Disco, etc.) |
suspension | integer | Tipo de suspensão (1=Mola, 2=Ar, etc.) |
Implemento (category = 4)
{
"category": 4,
"version_detail_id": 400,
"color": 1,
"make_year": 2020,
"model_year": 2021,
"km": 0,
"price": 80000,
"description": "Implemento agrícola em excelente estado",
"license_plate": null,
"is_new": false,
"accept_exchange": false,
"alienated": false,
"licensed": false,
"only_owner": true,
"tax_payed": false,
"factory_warranty": false,
"extended_warranty": false,
"inspection": false,
"pwd": false,
"reviews_at_the_dealership": false,
"number_of_axles": 2,
"version_site": "Arado 5 Discos",
"youtube_url": null,
"chassi": null,
"note": null,
"address_id": 1,
"features": [30],
"photos": [
{
"order": 1,
"photo_name": "implemento_foto1.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
}
],
"text_price_site": "Preço",
"show_price_site": true
}
Campos específicos para implementos:
| Campo | Tipo | Descrição |
|---|---|---|
number_of_axles | integer | Número de eixos (1, 2, 3, etc.) |
Observações para implementos:
- O campo
kmpode ser 0 ou null para implementos - O campo
license_platepode ser null para implementos - O campo
chassipode ser null para implementos
Resposta de Sucesso
Status Code: 200 OK
Retorna o objeto completo do anúncio atualizado (mesma estrutura do GET).
Observações
- Todos os campos devem ser fornecidos, mesmo que não sejam alterados
- Campos não fornecidos serão definidos com valores padrão ou null
- O processamento depende da categoria do veículo, e cada categoria aceita campos específicos:
- Carros (category = 1) aceitam campos de blindagem
- Motocicletas (category = 2) aceitam campos específicos de motocicleta (câmbio, refrigeração, etc.)
- Caminhões (category = 3) aceitam campos específicos de caminhão (potência, capacidade, tipo, etc.)
- Implementos (category = 4) aceitam campos específicos de implemento (número de eixos)
- Ao atualizar, o sistema automaticamente:
- Sincroniza com o site da loja
- Recalcula o QA Score
- Processa fotos e opcionais se fornecidos
PATCH - Atualizar Parcialmente o Anúncio
Requisição
Método: PATCH
Endpoint: /inventory/item/{ad_id}
Payload:
{
"price": 82000,
"description": "Preço reduzido! Veículo em excelente estado"
}
Campos Opcionais
Apenas os campos que deseja atualizar precisam ser fornecidos. Todos os campos são opcionais em uma atualização parcial.
Exemplo de Atualização Parcial
Atualizar apenas o preço:
{
"price": 82000
}
Atualizar descrição e adicionar fotos:
{
"description": "Nova descrição atualizada",
"photos": [
{
"order": 3,
"photo_name": "nova_foto.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
}
]
}
Atualizar ordem de fotos existentes:
{
"photos": [
{
"id": 1,
"order": 1
},
{
"id": 2,
"order": 2
},
{
"id": 3,
"order": 3
}
]
}
Deletar fotos:
{
"photos": [
{
"id": 5,
"delete": true
},
{
"id": 6,
"delete": true
}
]
}
Atualizar opcionais:
{
"features": [1, 2, 3, 5]
}
Estrutura do Campo photos
O campo photos é um array de objetos que pode conter diferentes operações:
Para Adicionar Nova Foto
| Campo | Tipo | Descrição |
|---|---|---|
photo_name | string | Nome original do arquivo (ex: "foto.jpg") |
order | integer | Ordem de exibição da foto |
base64 | string | Imagem codificada em base64. Pode ser uma data URL (data:image/jpeg;base64,...) ou base64 puro |
Exemplo de base64 como data URL:
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
Exemplo de base64 puro:
"base64": "/9j/4AAQSkZJRg..."
Para Atualizar Ordem de Foto Existente
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | ID da foto existente |
order | integer | Nova ordem de exibição (deve ser >= 0) |
Para Deletar Foto Existente
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | ID da foto existente |
delete | boolean | Deve ser true para deletar a foto |
Observações sobre Fotos
- Para adicionar novas fotos, não inclua o campo
id - Para atualizar a ordem de fotos existentes, inclua o campo
ideorder(semdelete) - Para deletar fotos, inclua o campo
idedelete: true - O campo
base64é obrigatório apenas para novas fotos - O campo
photo_nameé obrigatório apenas para novas fotos - O campo
orderé obrigatório para novas fotos e para atualizar ordem - Você pode combinar operações diferentes em um único array
photos(adicionar, atualizar ordem e deletar)
Resposta de Sucesso
Status Code: 200 OK
Retorna o objeto completo do anúncio atualizado (mesma estrutura do GET).
Observações
- Apenas os campos fornecidos serão atualizados
- Campos não fornecidos permanecem inalterados
- O processamento é determinado pela categoria do anúncio existente, e cada categoria aceita campos específicos
- Validações são aplicadas apenas aos campos fornecidos
- Ao atualizar, o sistema automaticamente:
- Sincroniza com o site da loja
- Recalcula o QA Score
- Processa fotos e opcionais se fornecidos
DELETE - Remover Anúncio
Requisição
Método: DELETE
Endpoint: /inventory/item/{ad_id}
Body:
{
"reason": 1,
"keep_in_integrator": false
}
Campos do Body
| Campo | Tipo | Descrição |
|---|---|---|
reason | integer | ID do motivo da venda (obrigatório) |
keep_in_integrator | boolean | Se true, mantém o anúncio nos portais de integração (padrão: false) |
Resposta de Sucesso
Status Code: 204 No Content (quando bem-sucedido)
ou
Status Code: 200 OK (quando há erros parciais)
{
"status": true,
"message": "Anúncio removido com sucesso",
"error": []
}
Resposta com Erros Parciais
Status Code: 400 Bad Request
{
"status": false,
"message": "Erro ao remover anúncio",
"error": [
"Erro ao remover do portal X",
"Erro ao atualizar cache"
]
}
Observações
- O anúncio é removido de forma assíncrona
- Se
keep_in_integratorfortrue, o anúncio será removido apenas do sistema interno, mas permanecerá nos portais de integração - Se
keep_in_integratorforfalse, o anúncio será removido tanto do sistema quanto dos portais de integração - O campo
reasondeve ser um ID válido de motivo de venda (consulte o endpoint/inventory/reason-for-sale/{dealer_id}) - A remoção pode falhar parcialmente (ex: erro em um portal específico), mas o anúncio ainda será removido do sistema principal
- O campo
errorcontém uma lista de erros que ocorreram durante a remoção, se houver
Estrutura de Dados
A estrutura de dados retornada é a mesma do endpoint de listagem (/inventory/{dealer_id}). Consulte a documentação desse endpoint para detalhes completos sobre todos os campos.
Campos Específicos por Categoria
Para Carros (category = 1)
Campos adicionais retornados:
version: Objeto com informações da versãodoors: Objeto com número de portastransmission: Objeto com tipo de transmissãois_armored: boolean - Veículo blindadoarmored_level: integer - Nível de blindagemarmored: integer - Tipo de blindagem
Para Motocicletas (category = 2)
Campos adicionais retornados:
gear: integer - Tipo de câmbiorefrigeration: integer - Tipo de refrigeraçãopower_supply: integer - Tipo de alimentaçãoengine: integer - Tipo de motorbreaks: integer - Tipo de freiostart: integer - Tipo de partida
Para Caminhões (category = 3)
Campos adicionais retornados:
truck_type: integer - Tipo de caminhãotruck_cabin: integer - Tipo de cabinetruck_traction: integer - Tipo de traçãotruck_suspension: integer - Tipo de suspensãotruck_break: integer - Tipo de freiotruck_implement: integer - Tipo de implemento
Para Implementos (category = 4)
Campos adicionais retornados:
truck_implement: integer - Tipo de implementonumber_of_axles: integer - Número de eixos
Observações Gerais
- O usuário deve ter permissão para acessar o anúncio específico (o anúncio deve pertencer a uma loja à qual o usuário tem acesso)
- Todos os métodos retornam ou atualizam o mesmo formato de dados
- As atualizações (PUT/PATCH) processam fotos e opcionais de forma assíncrona
- O sistema sincroniza automaticamente com o site da loja após atualizações
- O QA Score é recalculado automaticamente após atualizações
- Campos de somente leitura (
id,created_at,updated_at,created_by,updated_by) não podem ser alterados
Possíveis Retornos de Erro
400 Bad Request
Retornado quando há erros de validação nos dados enviados.
{
"license_plate": ["License plate cannot be blank for used vehicles"],
"km": ["KM must be greater than 0 for used vehicles"],
"price": ["Preço deve ser maior que 0"]
}
401 Unauthorized
Retornado quando o token de autenticação não foi fornecido ou é inválido.
{
"detail": "As credenciais de autenticação não foram fornecidas."
}
ou
{
"detail": "Token inválido ou expirado."
}
403 Forbidden
Retornado quando o usuário autenticado não tem permissão para acessar o anúncio especificado.
{
"detail": "Você não tem permissão para executar essa ação."
}
404 Not Found
Retornado quando o anúncio especificado não é encontrado.
{
"detail": "Não encontrado."
}
405 Method Not Allowed
Retornado quando um método HTTP não suportado é utilizado.
{
"detail": "Método \"POST\" não permitido."
}