Listar Anúncios
Consulte, crie ou remova anúncios cadastrados para uma loja específica.
Endpoint
GET /inventory/{dealer_id}
POST /inventory/{dealer_id}
DELETE /inventory/{dealer_id}
Métodos
GET: Lista todos os anúncios ativos da lojaPOST: Cria um novo anúncioDELETE: Remove um anúncio específico
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
dealer_id | integer | ID da loja |
Autenticação
Este endpoint requer autenticação via JWT. Inclua o token no header:
Authorization: Bearer {access_token}
Exemplo de Resposta
Lista de Anúncios
Status Code: 200 OK
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"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"
}
}
]
}
Estrutura de Dados
A resposta é um objeto paginado com os seguintes campos:
| Campo | Tipo | Descrição |
|---|---|---|
count | integer | Total de anúncios encontrados |
next | string | URL da próxima página (null se não houver) |
previous | string | URL da página anterior (null se não houver) |
results | array | Array com os resultados da página atual |
Estrutura de um Item de Anúncio
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único do anúncio |
status | integer | ID do status do anúncio |
category | integer | ID da categoria (1=Automóvel, 2=Motocicleta, 3=Caminhão, 4=Implemento) |
year | object | Objeto com ano de fabricação e modelo (ver abaixo) |
price | integer | Preço do veículo |
km | integer | Quilometragem |
license_plate | string | Placa do veículo (pode ser vazio para veículos novos) |
make | object | Objeto com informações da marca (ver abaixo) |
model | object | Objeto com informações do modelo (ver abaixo) |
fuel | object | Objeto com informações do combustível (ver abaixo) |
status_ad_site | boolean | Indica se o anúncio está ativo no site |
version_site | string | Versão do veículo para exibição no site |
youtube_url | string | URL do vídeo do YouTube (pode ser null) |
accept_exchange | boolean | Aceita troca |
alienated | boolean | Veículo alienado |
extended_warranty | boolean | Possui garantia estendida |
factory_warranty | boolean | Possui garantia de fábrica |
inspection | boolean | Possui laudo cautelar |
is_imported | boolean | Veículo importado |
is_new | boolean | Veículo novo (zero KM) |
licensed | boolean | Veículo licenciado |
only_owner | boolean | Único dono |
pwd | boolean | Possui PDF |
reviews_at_the_dealership | boolean | Revisões na concessionária |
tax_payed | boolean | IPVA pago |
text_price_site | string | Texto personalizado para preço no site |
show_price_site | boolean | Exibir preço no site |
created_at | string | Data e hora de criação |
updated_at | string | Data e hora de última atualização (pode ser null) |
created_by | string | Nome do usuário que criou o anúncio |
updated_by | string | Nome do usuário que atualizou o anúncio (pode ser null) |
first_photo | string | URL da primeira foto (thumbnail) |
total_photo | integer | Total de fotos do anúncio |
version_detail_id | integer | ID do detalhe da versão do veículo |
color | object | Objeto com informações da cor (ver abaixo) |
integration | array | Array de objetos com integrações ativas (ver abaixo) |
features | array | Array de objetos com opcionais/equipamentos (ver abaixo) |
address | object | Objeto com informações do endereço (ver abaixo) |
photos | array | Array de objetos com fotos do anúncio (ver abaixo) |
chassi | string | Número do chassi (pode ser null) |
description | string | Descrição do anúncio |
note | string | Observação adicional (pode ser null) |
ad_score | integer | Pontuação de qualidade do anúncio (pode ser null) |
url_site | string | URL do anúncio no site da loja |
origin | object | Objeto com origem do anúncio (ver abaixo) |
version | object | Objeto com versão do veículo (apenas para carros, ver abaixo) |
doors | object | Objeto com número de portas (apenas para carros, ver abaixo) |
transmission | object | Objeto com tipo de transmissão (apenas para carros, ver abaixo) |
Estrutura do Objeto year
| Campo | Tipo | Descrição |
|---|---|---|
make | integer | Ano de fabricação |
model | integer | Ano do modelo |
Estrutura do Objeto make
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da marca |
name | string | Nome da marca |
Estrutura do Objeto model
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único do modelo |
name | string | Nome do modelo |
Estrutura do Objeto fuel
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único do combustível |
name | string | Nome do combustível |
Estrutura do Objeto color
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da cor |
name | string | Nome da cor |
Estrutura de um Item em integration
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da integração |
portal | object | Objeto com informações do portal |
status | object | Objeto com status da integração |
listing_type | object | Objeto com tipo de anúncio/plano |
ad_url | string | URL do anúncio no portal |
ad_title | string | Título do anúncio no portal |
created_at | string | Data e hora de criação da integração |
updated_at | string | Data e hora de última atualização |
is_synced | boolean | Indica se está sincronizado |
sync_error | string | Mensagem de erro de sincronização (pode ser null) |
Estrutura de um Item em features
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único do opcional/equipamento |
name | string | Nome do opcional/equipamento |
Estrutura de um Item em photos
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da foto |
ad_id | integer | ID do anúncio |
order | integer | Ordem de exibição da foto |
thumb | string | URL da miniatura da foto |
url | string | URL completa da foto |
Estrutura do Objeto address
Ver documentação do endpoint /dealer/{dealer_id}/addresses para detalhes completos.
Estrutura do Objeto origin
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da origem |
name | string | Nome da origem (ex: "Manual", "ERP", "Importado de outra loja") |
Estrutura do Objeto version (apenas para carros)
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único da versão |
name | string | Nome da versão |
Estrutura do Objeto doors (apenas para carros)
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único |
name | string | Nome (ex: "4 portas", "2 portas") |
Estrutura do Objeto transmission (apenas para carros)
| Campo | Tipo | Descrição |
|---|---|---|
id | integer | Identificador único |
name | string | Nome (ex: "Automática", "Manual") |
Filtros
Este endpoint suporta os seguintes filtros através de query parameters:
| Parâmetro | Tipo | Descrição |
|---|---|---|
status | integer | Filtra por ID do status |
category | integer | Filtra por categoria (1=Automóvel, 2=Motocicleta, 3=Caminhão, 4=Implemento) |
is_new | integer | Filtra por veículos novos (1) ou usados (0) |
q | string | Busca por ID do anúncio, placa, marca, modelo, cor, versão ou chassi |
is_not_integrated_in | integer | Retorna apenas anúncios NÃO integrados com status ativo no portal especificado |
order_by | integer | Ordenação dos resultados (ver abaixo) |
Opções de Ordenação (order_by)
| Valor | Descrição |
|---|---|
0 | Preço - Mais Barato |
1 | Preço - Mais Caro |
2 | Ano modelo (mais recente) |
3 | Marca (alfabética) |
4 | Modelo (alfabético) |
5 | Marca + Modelo (alfabético) |
6 | KM - Menor para maior |
7 | KM - Maior para menor |
Padrão: Ordenação por ID decrescente (mais recentes primeiro)
Exemplos de Uso de Filtros
Filtrar por status:
GET /inventory/{dealer_id}?status=1
Filtrar por categoria:
GET /inventory/{dealer_id}?category=1
Filtrar apenas veículos novos:
GET /inventory/{dealer_id}?is_new=1
Buscar por texto (placa, marca, modelo, etc.):
GET /inventory/{dealer_id}?q=ABC1234
GET /inventory/{dealer_id}?q=Toyota
GET /inventory/{dealer_id}?q=Corolla
Filtrar anúncios não integrados em um portal específico:
GET /inventory/{dealer_id}?is_not_integrated_in=5
Ordenar por preço (mais barato primeiro):
GET /inventory/{dealer_id}?order_by=0
Combinar múltiplos filtros:
GET /inventory/{dealer_id}?category=1&is_new=0&status=1&order_by=0
Query Parameters de Paginação
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | integer | Número da página |
pageSize | integer | Quantidade de itens por página (padrão: definido nas configurações, máximo: 100) |
Criar um Novo Anúncio
Requisição
Método: POST
Endpoint: /inventory/{dealer_id}
Payload:
{
"category": 1,
"version_detail_id": 100,
"color": 5,
"make_year": 2023,
"model_year": 2024,
"km": 15000,
"price": 85000,
"description": "Veículo em excelente estado",
"license_plate": "ABC1234",
"is_new": false,
"accept_exchange": true,
"factory_warranty": true,
"features": [1, 2],
"photos": [
{
"order": 1,
"photo_name": "foto1.jpg",
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k="
}
]
}
Campos Obrigatórios
| Campo | Tipo | Descrição |
|---|---|---|
category | integer | Categoria do veículo (1=Automóvel, 2=Motocicleta, 3=Caminhão, 4=Implemento) |
version_detail_id | integer | ID do detalhe da versão do veículo |
color | integer | ID da cor |
make_year | integer | Ano de fabricação |
model_year | integer | Ano do modelo |
km | integer | Quilometragem (deve ser > 0 para veículos usados) |
price | integer | Preço (deve ser > 0) |
description | string | Descrição do anúncio |
Campos Opcionais
| Campo | Tipo | Descrição |
|---|---|---|
license_plate | string | Placa do veículo (obrigatório se is_new = false) |
is_new | boolean | Veículo novo (padrão: false) |
note | string | Observação adicional |
version_site | string | Versão para exibição no site |
youtube_url | string | URL do vídeo do YouTube |
chassi | string | Número do chassi |
alienated | boolean | Veículo alienado (padrão: false) |
licensed | boolean | Veículo licenciado (padrão: false) |
only_owner | boolean | Único dono (padrão: false) |
tax_payed | boolean | IPVA pago (padrão: false) |
accept_exchange | boolean | Aceita troca (padrão: false) |
factory_warranty | boolean | Garantia de fábrica (padrão: false) |
extended_warranty | boolean | Garantia estendida (padrão: false) |
inspection | boolean | Possui laudo cautelar (padrão: false) |
pwd | boolean | Possui PDF (padrão: false) |
reviews_at_the_dealership | boolean | Revisões na concessionária (padrão: false) |
address_id | integer | ID do endereço (usa primeiro endereço da loja se não informado) |
features | array | Array de IDs de opcionais/equipamentos |
photos | array | Array de objetos com fotos (ver estrutura abaixo) |
Estrutura do Campo photos (Criação)
Para criar um novo anúncio, o campo photos deve conter um array de objetos com a seguinte estrutura:
| 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..."
Observação: O campo base64 é obrigatório para novas fotos. O sistema processa a imagem automaticamente e cria versões em thumbnail e WebP.
Campos Específicos por Categoria
Para Carros (category = 1)
| Campo | Tipo | Descrição |
|---|---|---|
is_armored | boolean | Veículo blindado (padrão: false) |
armored_level | integer | Nível de blindagem (pode ser null) |
armored | integer | Tipo de blindagem (pode ser null) |
Resposta de Sucesso
Status Code: 201 Created
Retorna o objeto do anúncio criado com todos os campos populados.
Remover um Anúncio
Requisição
Método: DELETE
Endpoint: /inventory/{dealer_id}
Query Parameters:
| Parâmetro | Tipo | Descrição |
|---|---|---|
id | integer | ID do anúncio a ser removido |
Exemplo:
DELETE /inventory/{dealer_id}?id=12345
Resposta de Sucesso
Status Code: 204 No Content
Observações
- Apenas anúncios ativos são retornados na listagem
- O campo
license_plateé obrigatório para veículos usados (is_new= false), exceto para implementos - O campo
kmdeve ser maior que 0 para veículos usados - O campo
make_yearnão pode ser maior quemodel_year - A diferença entre
make_yearemodel_yearnão pode ser maior que 1 ano - O campo
qpode buscar por ID numérico (busca exata) ou por texto (busca parcial em placa, marca, modelo, cor, versão ou chassi) - O filtro
is_not_integrated_inretorna apenas anúncios que não possuem integração ativa no portal especificado - Os anúncios são ordenados por ID decrescente por padrão (mais recentes primeiro)
- O campo
integrationretorna apenas integrações com status ativo - O campo
photosretorna apenas fotos não deletadas (apagar=0), ordenadas por ordem de exibição - Campos específicos como
version,doorsetransmissionaparecem apenas para anúncios de carros (category= 1) - Ao criar um anúncio, o sistema automaticamente calcula o QA Score e sincroniza com o site da loja após 30 segundos
Possíveis Retornos de Erro
400 Bad Request
Retornado quando há erros de validação nos dados enviados ou quando o parâmetro dealer_id não é fornecido.
{
"detail": "Parâmetro ID da Loja não encontrado"
}
ou
{
"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"],
"make_year": ["make_year cannot be greater than model_year"]
}
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 este recurso.
{
"detail": "Você não tem permissão para executar essa ação."
}
404 Not Found
Retornado quando a loja especificada não é encontrada ou quando tenta remover um anúncio que não existe.
{
"detail": "Não encontrado."
}