API de importação
Mantenha seu inventário Driv.one alinhado com seu DMS ou sistema de estoque. Crie e atualize veículos, envie inventários completos, gerencie fotos — por meio de uma API REST versionada e limitada à sua oficina.
A API é destinada a vendedores profissionais, grupos de concessionárias, fornecedores de DMS e parceiros de integração. Os registros que você criar aparecem em driv.one na sua oficina, assim como os carros adicionados manualmente.
Início rápido
1. Crie uma chave de API
Faça login em driv.one/garage-owner/api-keys, escolha a oficina, dê um nome à chave e copie-a. A chave é mostrada uma única vez; se você a perder, revogue-a e crie outra.
2. Teste a autenticação
curl https://api.driv.one/v1/me \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
3. Crie um veículo
curl -X POST https://api.driv.one/v1/vehicles \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "STOCK-4821",
"external_updated_at": "2026-09-05T08:30:00Z",
"make": "Volkswagen",
"model": "Golf",
"year": 2022,
"vin": "WVWZZZAUZNW123456",
"license_plate": "1-ABC-123",
"mileage": 41200,
"first_registration": "2022-03-15",
"fuel_type": "petrol",
"gearbox_type": "dct",
"body_type": "hatchback",
"power_hp": 150,
"num_doors": 5,
"num_seats": 5,
"color": "gray",
"interior_material": "fabric",
"vehicle_condition": "used",
"asking_price": 24950,
"is_tax_vehicle": true,
"short_description": "Golf 1.5 TSI Life, first owner, full history",
"seller_description": "Serviced at the dealership, two keys, winter tyres included.",
"features": [
"appleCarplay",
"androidAuto",
"adaptiveCruiseControl",
"ledHeadlights",
"alloyWheels"
],
"parking_assist": [
"sens_front",
"sens_rear",
"cam_rear"
],
"image_urls": [
"https://cdn.example-dealer.be/stock/4821/front.jpg",
"https://cdn.example-dealer.be/stock/4821/interior.jpg"
]
}'
A resposta é o veículo salvo com seu uuid, public_url, currency e fotos, mais uma lista warnings quando algo não fatal aconteceu (uma foto que não pôde ser obtida, um modelo que foi criado).
URL base e versões
https://api.driv.one/v1
A versão principal faz parte do caminho. Alterações incompatíveis recebem uma nova versão principal; /v1 mantém seu comportamento. Acréscimos (novos campos opcionais, novos valores de enumeração) podem surgir dentro da v1 — leia GET /v1/options em vez de fixar listas no código.
Os caminhos são mostrados sem barra final; com barra também são aceitos.
Autenticação
Autenticação por token Bearer com uma chave de API da oficina. As chaves começam com wsk_.
Authorization: Bearer wsk_…
X-API-Key: wsk_… é aceito como cabeçalho alternativo. Uma chave é de leitura e escrita ou somente leitura; uma chave somente leitura recebe 403 read_only_key em qualquer escrita.
Cabeçalhos da requisição
| Cabeçalho | Valor | Finalidade |
|---|---|---|
Authorization | Bearer wsk_… | Autentica a oficina. |
Content-Type | application/json | Para corpos JSON. O envio de arquivos de foto usa multipart/form-data. |
Accept | application/json | As respostas são sempre JSON. |
Modelo de dados do veículo
Campos aceitos em POST, PUT e PATCH. As respostas retornam os mesmos nomes, mais os campos somente leitura uuid, status (published / unlisted), public_url, currency, images, for_sale_since e created_at.
GET /v1/options; nada mais é aceito.| Campo | Tipo | Ao criar | Descrição |
|---|---|---|---|
| Identidade | |||
external_id | string ≤120 | recomendado | Seu próprio id estável do veículo (número de estoque, id do DMS). Permite referenciar o carro por ele e habilita o upsert e a sincronização. |
external_updated_at | datetime | não | Quando seu sistema alterou o veículo pela última vez. Uma data mais antiga do que a salva é recusada com 409 stale_update. |
license_plate | string ≤20 | não | Deve ser única em toda a plataforma. |
vin | string (17) | não | Número do chassi, único em toda a plataforma. Salvo em maiúsculas. |
| Marca, modelo e emplacamento | |||
make / make_id | string / integer | sim | Marca, por nome (sem distinguir maiúsculas) ou id. GET /v1/makes. |
model / model_id | string / integer | sim | Modelo dentro da marca. Nomes desconhecidos são recusados, salvo se create_missing_model for true. |
create_missing_model | boolean | não | Adiciona um nome de modelo desconhecido sob a marca em vez de falhar. Padrão: false. |
vehicle_type / vehicle_type_id | string / integer | não | Car, Motorcycle, SUV, Truck, Van. Padrão: Car. |
year | integer | sim | Ano do modelo, 1990–2027. |
first_registration | date | não | AAAA-MM-DD. |
color | string ≤50 | não | Use um valor da enumeração de cores para que seja traduzido; outras palavras são mostradas como enviadas. |
mileage | integer | não | Quilometragem, em mileage_unit. |
mileage_unit | enum | não | km (padrão) ou mi. Use mi para veículos dos EUA/Reino Unido vendidos no exterior; o site mostra a unidade como enviada. |
| Motor e transmissão | |||
motor_type | string ≤100 | não | Designação do motor, p. ex. "2.0 TDI 150hp". |
fuel_type | enum | não | Ver enumerações.petroldieselelectrichybrid_petrolhybrid_dieselphev_petrolphev_diesellpgcnghydrogenmild_hybridotheretiquetas ↓ |
power_hp / power_kw | integer | não | Envie um dos dois; o outro é derivado. |
cylinder_capacity | integer cc | não | Cilindrada em cm³, p. ex. 1998. |
gearbox_type | enum | não | Manual, automático, semiautomático, CVT ou marcha única (elétrico). |
drivetrain | enum | não | front, rear ou 4wd. |
emission_standard | enum | não | Norma Euro. |
co2_gkm | integer | não | CO₂ em g/km. |
battery_capacity_kwh | decimal kWh | não | Veículos elétricos: capacidade útil da bateria, p. ex. 77.4. Mostrada em vez da norma Euro quando fuel_type é electric. |
battery_soh_pct | integer 0–100 | não | Estado de saúde da bateria (SOH) em %. |
battery_certificate_url | url | não | Link para o certificado da bateria; mostrado como link clicável no anúncio. |
| Carroceria, dimensões e rodas | |||
body_type | enum | não | Tipo de carroceria, como nos filtros do site. |
num_doors / num_seats | integer | não | Portas 1–9, assentos 1–99. |
weight | integer kg | não | Peso vazio. |
steering_position | enum | não | lhd ou rhd. |
tyre_size / bolt_pattern / et_offset | string | não | p. ex. "225/45R17", "5x112", "+35". |
| Interior e conforto | |||
interior_color | string ≤50 | não | Texto livre, p. ex. "preto". |
interior_material | enum | não | Estofamento. |
air_conditioning | enum | não | Sem, manual ou ar-condicionado automático (1–4 zonas). |
airbags | enum | não | Quantos airbags tem. |
| Equipamento | |||
features | array[string] | não | Slugs de equipamento do catálogo abaixo. Slugs desconhecidos são recusados. Enviar [] limpa a lista. |
parking_assist | array[string] | não | Slugs de ajudas de estacionamento do catálogo abaixo. |
| Venda e estado | |||
is_for_sale | boolean | não | Padrão: true ao criar. false retira o carro do marketplace, mas o mantém. |
asking_price | decimal | não | Na moeda da oficina (retornada como `currency`). Número simples, não centavos. |
is_margin_vehicle / is_tax_vehicle | boolean | não | Tratamento do IVA: regime da margem ou IVA dedutível. |
vehicle_condition | enum | não | Novo, demonstração, usado, danificado… |
num_owners | integer | não | Proprietários anteriores, 0–99. |
maintenance_history | enum | não | Situação do histórico de manutenção. |
carpass_url | url | não | Link para o documento Car-Pass (Bélgica). |
short_description | string ≤120 | não | Uma linha nos cartões da listagem. |
seller_description | text | não | Descrição completa. |
sold | boolean | não | true = o carro foi vendido: sai da venda e aparece com status "sold" e sold_at. |
sold_via | enum | não | platform ou elsewhere (padrão: elsewhere). Só com sold: true. |
queue_if_full | boolean | não | Padrão: true. Com todas as vagas ocupadas, um carro a ser colocado à venda espera na fila (status "queued") em vez de falhar com 403. |
| Fotos | |||
image_urls | array[url] ≤30 | não | Fotos a baixar dos seus servidores, na ordem de exibição. Se presente, substitui todo o conjunto de fotos; omita para não mexer nas fotos. |
external_id — nunca uma posição de estoque nem uma ordem de exibição. É o que faz funcionar o upsert, GET /v1/vehicles/{ref} pelo seu id e a sincronização do inventário.Endpoints
Conta
Referência (sem chave)
Veículos
Vagas
Webhooks
Fotos
Esquemas completos de requisição e resposta, com todas as enumerações: Swagger UI · ReDoc · openapi.json.
Resposta de listagem
{
"count": 37, "limit": 50, "offset": 0, "next_offset": null,
"results": [ { "uuid": "…", "external_id": "STOCK-4821", "status": "published", … } ]
}
Upsert e atualizações obsoletas
POST /v1/vehicles com um external_id que sua oficina já usa atualiza esse veículo (HTTP 200) em vez de criar outro (HTTP 201). Assim, uma integração simples de "enviar tudo todas as noites" é idempotente.
Se você também enviar external_updated_at, uma atualização com uma data mais antiga do que a salva é recusada com 409 stale_update, para que um evento atrasado nunca substitua um mais recente. Em uma sincronização, esse veículo é reportado como skipped_stale e o resto prossegue.
PATCH altera apenas os campos que você enviar. PUT é uma substituição completa: os campos opcionais omitidos são limpos. Ambos aceitam o mesmo corpo da criação.
Sincronização do inventário
POST /v1/vehicles/sync faz upsert de um inventário inteiro em uma só chamada (≤200 veículos; repita para mais). Cada veículo precisa de um external_id.
{
"complete": true,
"vehicles": [
{
"external_id": "STOCK-4821",
"make": "Volkswagen",
"model": "Golf",
"year": 2022,
"asking_price": 24950,
"fuel_type": "petrol",
"mileage": 41200
},
{
"external_id": "STOCK-4835",
"make": "Audi",
"model": "A4",
"year": 2021,
"asking_price": 28900,
"fuel_type": "diesel",
"body_type": "estate"
}
]
}
- Validação tudo ou nada. Todo o conteúdo é validado primeiro. Um veículo inválido rejeita a chamada com
422e um mapavehiclespor veículo; nada é gravado. complete: truedeclara que o conteúdo é todo o seu estoque. Os veículos gerenciados pela API (com um dos seus ids externos) que faltarem são retirados da venda, nunca excluídos — ficam no seu painel e voltam se você os enviar de novo.- Proteção contra vazio. Uma sincronização completa sem veículos precisa de
allow_empty: true; caso contrário,409 empty_snapshot. dry_run: trueretornawould_create,would_update,would_unliste não grava nada.- Vagas. Os veículos além das suas vagas de venda são salvos não publicados com um aviso
sale_limit_reached, em vez de fazer a sincronização falhar.
Os veículos adicionados manualmente no site nunca são alterados por uma sincronização.
Vagas de venda
Cada conta de oficina tem um número de veículos que podem estar à venda ao mesmo tempo (nível gratuito, assinaturas, ou um número atribuído por Driv.one). GET /v1/me retorna slots.used, slots.limit e slots.available.
Quando todas as vagas estão ocupadas, um carro colocado à venda não é recusado: ele espera em uma fila (status queued, aviso queued_for_slot) e fica à venda sozinho, o mais antigo primeiro, assim que uma vaga é liberada - um carro retirado, vendido ou excluído, ou mais vagas compradas em driv.one/garage-owner/slots/purchase. Envie queue_if_full: false para obter o antigo 403 sale_limit_reached.
Colocar muitos veículos à venda
POST /v1/vehicles/publish recebe uma lista dos seus veículos na ordem em que você quer publicá-los. As vagas livres são preenchidas primeiro; o resto fica na fila nessa ordem. A resposta indica quais carros ficaram à venda, quais esperam (com seu lugar na fila) e quantas vagas faltam. GET /v1/slots mostra o mesmo a qualquer momento: os carros à venda, a fila e slots_needed.
curl -X POST https://api.driv.one/v1/vehicles/publish \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"vehicles": ["STOCK-4821", "STOCK-4822", "STOCK-4823"]}'
{
"published": [{"uuid": "…", "external_id": "STOCK-4821"}],
"queued": [{"uuid": "…", "external_id": "STOCK-4822", "position": 1},
{"uuid": "…", "external_id": "STOCK-4823", "position": 2}],
"already_published": [], "not_found": [],
"slots": {"limit": 10, "used": 10, "available": 0, "queued": 2, "slots_needed": 2},
"notice": {"code": "slots_needed", "slots_needed": 2, "buy_url": "https://driv.one/garage-owner/slots/purchase", "message": "…"}
}
Enquanto houver carros esperando, o titular da conta é informado de quantas vagas extras são necessárias - na plataforma, por e-mail e com o webhook slots.needed - de novo apenas quando esse número aumenta. POST /v1/vehicles/unpublish retira carros da venda ou da fila; as vagas liberadas passam imediatamente para os próximos carros em espera (promoted_from_queue).
Sincronização bidirecional
A API também informa o que acontece com seus veículos na plataforma: vendas, carros adicionados ou alterados no site ou nos apps, e exclusões. Obtenha as alterações com o feed de alterações, receba-as por webhooks, ou ambos.
Feed de alterações
GET /v1/vehicles?updated_since= retorna todos os seus veículos alterados depois desse momento, da alteração mais antiga para a mais recente, incluindo vendidos e retirados. Salve o server_time da resposta e envie-o como updated_since da próxima vez. As exclusões estão em GET /v1/vehicles/deleted?since=.
curl "https://api.driv.one/v1/vehicles?updated_since=2026-09-28T08:00:00Z" \
-H "Authorization: Bearer YOUR_API_KEY"
curl "https://api.driv.one/v1/vehicles/deleted?since=2026-09-28T08:00:00Z" \
-H "Authorization: Bearer YOUR_API_KEY"
Status vendido
Um carro vendido pela plataforma aparece com status: "sold", sold_via: "platform" e sold_at - também quando o vendedor o marcou no site. Informe uma venda do seu lado com {"sold": true}; colocar o carro à venda de novo limpa a venda. status=sold lista esses carros.
curl -X PATCH https://api.driv.one/v1/vehicles/STOCK-4821 \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"sold": true, "sold_via": "elsewhere"}'
Webhooks
Registre uma URL https e enviaremos a ela (POST) um evento JSON a cada alteração nos seus veículos. A resposta ao registro traz o secret que assina cada chamada - ele só é mostrado uma vez. As alterações feitas com sua própria chave de API não são reenviadas, a menos que você defina include_own_changes: true. events limita os eventos recebidos.
curl -X POST https://api.driv.one/v1/webhooks \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"url": "https://dms.example.com/hooks/marketplace"}'
| Evento | Significado |
|---|---|
vehicle.created | Um veículo foi adicionado ao seu estoque na plataforma (site, app ou outra chave). |
vehicle.updated | Dados ou fotos alterados. |
vehicle.listed | O veículo foi colocado à venda - pode ser a primeira vez que você o vê. |
vehicle.unlisted | Retirado da venda sem venda. |
vehicle.sold | Vendido - sold_via indica platform ou elsewhere. |
vehicle.deleted | Excluído; data traz apenas uuid e external_id. |
vehicle.queued | Sem vaga livre: o veículo espera na fila. |
slots.needed | Há veículos esperando; data traz queued, slots_needed e buy_url. |
Conteúdo
{
"id": "4127",
"event": "vehicle.sold",
"occurred_at": "2026-09-28T09:14:03.512Z",
"source": "platform",
"workshop": {
"id": 90,
"name": "Example Motors"
},
"data": {
"vehicle": {
"uuid": "…",
"external_id": "STOCK-4821",
"status": "sold",
"sold_via": "platform",
"sold_at": "2026-09-28T09:14:03Z",
"make": "Volkswagen",
"model": "Golf",
"…": "…"
}
}
}
Verificar a assinatura
Cada chamada traz X-Webhook-Event, X-Webhook-Id e X-Webhook-Signature: t=<hora unix>,v1=<hex>, em que v1 é o HMAC-SHA256 de t + "." + corpo bruto com o seu secret. Recuse chamadas cujo t tenha mais de 5 minutos.
import hashlib, hmac
def verify(secret, header, raw_body):
parts = dict(p.split("=", 1) for p in header.split(","))
mac = hmac.new(secret.encode(), (parts["t"] + ".").encode() + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(mac, parts["v1"])
Responda com um 2xx em menos de 10 segundos. Caso contrário, há nova tentativa após 1 min, 5 min, 30 min, 2 h, 6 h e 12 h; após 50 falhas seguidas o webhook é desativado (PATCH {"is_active": true} o reativa). As entregas podem chegar repetidas ou fora de ordem: use id para ignorar duplicados e o updated_at do veículo para manter o mais recente. Os eventos vehicle.updated são agrupados durante 20 segundos.
Fotos
As fotos são ordenadas; a ordem 0 é a foto principal mostrada nos cartões. As imagens grandes são redimensionadas para 2560 px no lado maior e recodificadas; o que exceder 15 MB depois disso é recusado.
Com o veículo
Envie image_urls ao criar ou atualizar. As fotos são baixadas dos seus servidores na ordem indicada e substituem todo o conjunto de fotos. Omita o campo para deixar as fotos como estão. Se nenhuma URL puder ser obtida, as fotos existentes são mantidas e um aviso é retornado.
Uma de cada vez
curl -X POST https://api.driv.one/v1/vehicles/STOCK-4821/images \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://cdn.example-dealer.be/stock/4821/rear.jpg", "order": 1}'
curl -X POST https://api.driv.one/v1/vehicles/STOCK-4821/images \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "image=@rear.jpg" -F "order=1"
Reordenar
curl -X PUT https://api.driv.one/v1/vehicles/STOCK-4821/images/order \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"ids": [912, 910, 911]}'
http(s) públicos. Destinos locais, privados e reservados são recusados em cada redirecionamento. O conteúdo é verificado como imagem real, independentemente do Content-Type declarado.Equipamento (106 valores)
Envie o equipamento como slugs em features e as ajudas de estacionamento em parking_assist. Só os valores abaixo são aceitos; slugs desconhecidos retornam 422 indicando quais são. Omitir o campo em PATCH mantém o equipamento; enviar [] esvazia a lista. Etiquetas em todos os idiomas: GET /v1/options.
Ajudas de estacionamento parking_assist
6cam_360Câmara 360° · 360° Cameracam_frontCâmara frontal · Front cameracam_rearCâmara traseira · Rear cameraself_steeringSistemas de auto-direção · Self-steering systemssens_frontSensores dianteiros · Front parking sensorssens_rearSensores traseiros · Rear parking sensorsExterior features 78
Eletrônica
10absABS · ABSespESP · ESPimmobiliserImobilizador eletrónico · Electronic immobilisercentralLockingFecho centralizado · Central lockingkeylessFecho centralizado sem chave · Keyless central lockingrainSensorSensor de chuva · Rain sensorlightSensorSensor de luz · Light sensortyrePressureMonitorControlo da pressão dos pneus · Tyre pressure monitoringstartStopSistema Start/Stop · Start/stop systemelectricTailgateMala elétrica · Electric tailgateIluminação
6fogLightsFaróis de nevoeiro · Fog lightsledDrlLuzes diurnas LED · LED daytime running lightsdrlLuzes diurnas · Daytime running lightscorneringLightLuz de curva · Cornering lightheadlightWasherLimpa-faróis · Headlight washerdynamicIndicatorsIndicadores dinâmicos / sequenciais / deslizantes · Dynamic / sweeping / sliding indicatorsFaróis
7biXenonHeadlightsFaróis bi-xénon · Bi-xenon headlightsxenonHeadlightsFaróis de xénon · Xenon headlightsledHeadlightsFaróis LED · LED headlightslaserLightLuzes laser · Laser lighthighBeamAssistAssistente de luzes altas · High beam assistnightVisionAssistente de visão noturna · Night vision assistantmatrixLightsLuzes inteligentes / matriciais · Intelligent / matrix lightsAssistentes de condução
12distanceWarnerAviso de distância · Distance warninghillStartAssistAssistente de arranque em declive · Hill start assistspeedLimiterLimitador de velocidade · Speed limiteremergencyBrakeAssistAssistente de travagem de emergência · Emergency brake assistlaneAssistAssistente de manutenção de faixa · Lane assistblindSpotMonitorAssistente de ângulo morto · Blind spot monitortractionControlControlo de tração · Traction controltrafficSignRecognitionReconhecimento de sinais · Traffic sign recognitionadaptiveCorneringLuz de curva adaptativa · Adaptive cornering lightcruiseControlCruise control · Cruise controladaptiveCruiseControlCruise control adaptativo · Adaptive cruise controlfatigueWarnerAssistente de fadiga · Fatigue warning systemConforto & outros
43tintedWindowsJanelas fumadas · Tinted windowsadaptiveSuspensionSuspensão adaptativa · Adaptive suspensionallWeatherTyresPneus para todas as estações · All-weather tyresheatedWindscreenPara-brisas aquecido · Heated windscreendisabledAccessAcesso para deficientes · Disabled accessroofRailsBarras de tejadilho · Roof railsairSuspensionSuspensão pneumática · Air suspensionspareWheelRoda sobressalente · Spare wheeltyreSealantKit antipontura · Tyre sealant kitfullSizeSpareRoda sobressalente completa · Full-size spare wheelpowerSteeringDireção assistida · Power steeringsummerTyresPneus de verão · Summer tyressportSuspensionSuspensão desportiva · Sport suspensionsportPackagePacote desportivo · Sport packagesteelWheelsJantes de aço · Steel wheelsalloyWheelsJantes em liga leve · Alloy wheelswinterPackagePacote de inverno · Winter packagewinterTyresPneus de inverno · Winter tyrespanoramicRoofTejadilho panorâmico · Panoramic roofslidingRoofTejadilho deslizante · Sliding rooffoldingRoofTeto dobrável · Folding rooftowHitchGancho de reboque · Tow hitchalarmSystemSistema de alarme · Alarm systemambientLightingIluminação ambiente · Ambient lightingelectricWindowsVidros elétricos · Electric windowshandsFreeSistema mãos-livres · Hands-free systemcargoPartitionSeparador da bagageira · Cargo area partitionisofixIsofix · IsofixisofixPassengerIsofix banco do passageiro · Isofix passenger seatemergencyCallSystemSistema de chamada de emergência · Emergency call systemsmokersPackagePacote de fumador · Smoker's packagerightHandDriveCondução pela direita · Right-hand driveskiStorageSaco para skis · Ski storageauxiliaryHeatingAquecimento auxiliar · Auxiliary heatingusbUSB · USBheatedSteeringWheelVolante aquecido · Heated steering wheelleatherSteeringWheelVolante em couro · Leather steering wheelmultifunctionSteeringWheelVolante multifunções · Multifunction steering wheelpaddleShiftersPaletas de mudança · Paddle shifterselectricMirrorsEspelhos elétricos · Electric mirrorselectricFoldingMirrorsEspelhos elétricos dobráveis · Electric folding mirrorsautoGlareFreeMirrorEspelho interior antiofuscante · Auto-dimming interior mirrorvirtualMirrorsEspelhos laterais virtuais · Virtual side mirrorsInterior features 28
Infoentretenimento
17androidAutoAndroid Auto · Android AutoappleCarplayApple CarPlay · Apple CarPlaybluetoothBluetooth · BluetoothboardComputerComputador de bordo · On-board computercdPlayerLeitor de CD · CD playerheadUpDisplayHead-up display · Head-up displayinductiveChargingCarregamento indutivo para smartphones · Inductive charging for smartphonesmusicStreamingStreaming de música integrado · Integrated music streamingnavigationSistema de navegação · Navigation systemradioDabRádio DAB · DAB radiosoundSystemSistema de som · Sound systemtouchscreenEcrã tátil · TouchscreentunerRadioSintonizador/Rádio · Tuner/RadiotvTV · TVvoiceControlControlo por voz · Voice controlwifiHotspotHotspot Wi-Fi · Wi-Fi hotspotdigitalInstrumentClusterPainel de instrumentos totalmente digital · Fully digital instrument clusterAssentos
11armrestApoio de braço · ArmrestelectricSeatAdjustAjuste elétrico dos assentos · Electric seat adjustmentelectricSeatAdjustMemoryAjuste elétrico com memória · Electric seat adjustment with memoryelectricSeatAdjustRearAjuste elétrico dos assentos traseiros · Electric rear seat adjustmentlumbarSupportSuporte lombar · Lumbar supportmassageSeatsAssentos com massagem · Massage seatsseatVentilationVentilação dos assentos · Seat ventilationseatHeatingAquecimento dos assentos · Seat heatingseatHeatingRearAquecimento dos assentos traseiros · Rear seat heatingsportSeatsAssentos desportivos · Sport seatsfoldablePassengerSeatBanco do passageiro rebatível · Foldable passenger seatEnumerações
Etiquetas no idioma selecionado; todos os idiomas estão em GET /v1/options. Valores desconhecidos são recusados, não adivinhados.
vehicle_type
year
1990 – 2027
fuel_type
12| Valor | Etiqueta | English |
|---|---|---|
petrol | Gasolina | Petrol / Gasoline |
diesel | Gasóleo | Diesel |
electric | Elétrico | Electric |
hybrid_petrol | Híbrido (Gasolina) | Hybrid (Petrol) |
hybrid_diesel | Híbrido (Gasóleo) | Hybrid (Diesel) |
phev_petrol | PHEV (Gasolina) | PHEV (Petrol) |
phev_diesel | PHEV (Gasóleo) | PHEV (Diesel) |
lpg | GPL | LPG |
cng | GNC | CNG |
hydrogen | Hidrogénio | Hydrogen |
mild_hybrid | Híbrido suave | Mild Hybrid |
other | Outro | Other |
gearbox_type
5| Valor | Etiqueta | English |
|---|---|---|
manual | Manual | Manual |
automatic | Automático | Automatic |
cvt | CVT | CVT |
dct | Dupla embraiagem (DCT) | Dual-Clutch (DCT) |
semi_auto | Semi-automático | Semi-automatic |
body_type
11| Valor | Etiqueta | English |
|---|---|---|
sedan | Sedã | Sedan |
hatchback | Hatchback | Hatchback |
estate | Familiar / Break | Estate / Break |
coupe | Coupé | Coupé |
convertible | Descapotável | Cabriolet / Convertible |
suv | SUV | SUV |
crossover | Crossover | Crossover |
mpv | MPV / Monovolume | MPV / Minivan |
pickup | Pickup | Pickup |
van | Carrinha | Van |
other | Outro | Other |
drivetrain
3| Valor | Etiqueta | English |
|---|---|---|
4wd | Tração nas 4 rodas | 4 wheel drive |
front | Tração dianteira | Front drive |
rear | Tração traseira | Rear drive |
steering_position
2| Valor | Etiqueta | English |
|---|---|---|
lhd | Volante à esquerda | Left-hand drive |
rhd | Volante à direita | Right-hand drive |
emission_standard
12| Valor | Etiqueta | English |
|---|---|---|
euro0 | Euro 0 | Euro 0 |
euro1 | Euro 1 | Euro 1 |
euro2 | Euro 2 | Euro 2 |
euro3 | Euro 3 | Euro 3 |
euro4 | Euro 4 | Euro 4 |
euro5 | Euro 5 | Euro 5 |
euro6 | Euro 6 | Euro 6 |
euro6b | Euro 6b | Euro 6b |
euro6c | Euro 6c | Euro 6c |
euro6d | Euro 6d | Euro 6d |
euro6d_temp | Euro 6d-temp | Euro 6d-temp |
other | Outro | Other |
color
15color é texto livre; estes valores são os que o site traduz.
| Valor | Etiqueta | English |
|---|---|---|
white | Branco | White |
black | Preto | Black |
silver | Prata | Silver |
gray | Cinza | Gray |
blue | Azul | Blue |
red | Vermelho | Red |
green | Verde | Green |
yellow | Amarelo | Yellow |
orange | Laranja | Orange |
brown | Marrom | Brown |
beige | Bege | Beige |
gold | Dourado | Gold |
purple | Roxo | Purple |
pink | Rosa | Pink |
other | Outro | Other |
interior_material
6| Valor | Etiqueta | English |
|---|---|---|
alcantara | Alcântara | Alcantara |
fabric | Tecido | Fabric |
artificial_leather | Couro artificial | Artificial leather |
partial_leather | Couro parcial | Partial leather |
full_leather | Couro integral | Full leather |
velour | Veludo | Velour |
vehicle_condition
6| Valor | Etiqueta | English |
|---|---|---|
factory_new | Novo de fábrica | Factory New |
new_condition | Estado novo | New Condition |
new_with_damage | Estado novo com danos | New Condition with Damage |
used | Usado | Used |
used_with_damage | Usado com danos | Used with Damage |
parts | Para peças | Used for Parts |
maintenance_history
4| Valor | Etiqueta | English |
|---|---|---|
none | Não | No |
dealership | Sim, com concessionária | Yes, with dealership |
platform | Sim, com the platform | Yes, with the platform |
both | Sim, com concessionária e the platform | Yes, with dealership and the platform |
airbags
4| Valor | Etiqueta | English |
|---|---|---|
airbagDriver | Airbag do condutor | Driver airbag |
airbagFront | Airbags frontais | Front airbags |
airbagFrontSide | Airbags frontais e laterais | Front & side airbags |
airbagFull | Airbags frontais, laterais e traseiros | Front, side & rear airbags |
air_conditioning
5| Valor | Etiqueta | English |
|---|---|---|
acNone | Sem ar condicionado | None |
acManual | Manual | Manual |
ac2Zone | Automático 2 zonas | 2-zone automatic |
ac3Zone | Automático 3 zonas | 3-zone automatic |
ac4Zone | Automático 4 zonas | 4-zone automatic |
Erros
Os erros são JSON com um código error estável e um message legível; alguns trazem chaves extras.
{
"error": "validation_error",
"message": "One or more fields are invalid.",
"fields": {
"fuel_type": [
"\"gasoline\" is not a valid choice."
],
"features": [
"Unknown features: sunroof. GET /v1/options lists the accepted values."
]
}
}
| HTTP | error | Significado |
|---|---|---|
| 401 | invalid_api_key | Chave ausente, desconhecida ou revogada. |
| 403 | read_only_key | A chave só pode ler. |
| 403 | workshop_blocked / workshop_inactive | A oficina não pode publicar no momento. |
| 403 | sale_limit_reached | Todas as vagas de venda estão em uso. O corpo inclui used, limit, available. |
| 404 | vehicle_not_found / image_not_found / make_not_found | Não encontrado nesta oficina. |
| 409 | duplicate_vin / duplicate_license_plate | Outro veículo já tem esse identificador. |
| 409 | stale_update | O external_updated_at salvo é mais recente do que o enviado. |
| 409 | empty_snapshot | Uma sincronização completa sem veículos precisa de allow_empty: true. |
| 422 | validation_error | Erros por campo em `fields` (ou `vehicles` em uma sincronização). Nada foi gravado. |
| 422 | image_url_* / image_too_large / image_unreadable | Não foi possível obter uma foto. Ao criar ou atualizar são avisos, não falhas. |
| 404 | webhook_not_found | Nenhum webhook com esse id para esta oficina. |
| 409 | webhook_limit | No máximo 5 webhooks por oficina. |
| 422 | invalid_webhook_url | A URL deve ser https e apontar para um endereço público. |
| 429 | — | Limite de uso. Tente de novo após o cabeçalho `Retry-After`. |
Respostas bem-sucedidas: 200 leitura ou atualização, 201 criado, 204 excluído.
Limites de uso
Cada chave pode fazer 3 000 requisições por hora. Acima disso, a API responde 429 com um cabeçalho Retry-After. Uma sincronização noturna completa de algumas centenas de carros usa poucas chamadas; se precisar de mais, entre em contato com Driv.one.
Os downloads de fotos contam no mesmo orçamento por meio das chamadas que os originam, não por imagem.