{"components":{"schemas":{"ANTTRequest":{"additionalProperties":false,"properties":{"document":{"description":"CPF ou CNPJ. Pontuação é aceita e removida antes da consulta.","examples":["12345678000199"],"type":"string"},"plate":{"description":"Placa com sete caracteres.","examples":["ABC1D23"],"maxLength":7,"minLength":7,"type":"string"}},"required":["document","plate"],"type":"object"},"ANTTResponse":{"properties":{"credits_remaining":{"type":"integer"},"credits_used":{"type":"integer"},"data":{"$ref":"#/components/schemas/ANTTVehicle"},"processing_time_ms":{"type":"integer"},"request_id":{"type":"string"},"success":{"const":true,"type":"boolean"}},"required":["success","data","processing_time_ms","credits_used","credits_remaining","request_id"],"type":"object"},"ANTTVehicle":{"properties":{"apto_transporte_remunerado":{"type":"boolean"},"documento_transportador":{"type":"string"},"dt_cadastro":{"format":"date-time","type":"string"},"endereco_municipio":{"type":"string"},"endereco_uf":{"type":"string"},"mensagem":{"type":"string"},"placa":{"type":"string"},"rntrc":{"type":"string"},"situacao":{"type":"string"},"transportador":{"type":"string"},"veiculo_tipo":{"type":"string"}},"type":"object"},"ErrorResponse":{"properties":{"error":{"properties":{"code":{"examples":["INVALID_REQUEST"],"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"request_id":{"examples":["req_0123456789abcdef"],"type":"string"},"success":{"const":false,"type":"boolean"}},"required":["success","error","request_id"],"type":"object"},"VIODocumentIdentity":{"properties":{"issuer":{"type":"string"},"name":{"type":"string"},"recognized":{"type":"boolean"},"template_id":{"type":"integer"},"type":{"type":"string"}},"type":"object"},"VIODocumentSchema":{"properties":{"fields":{"items":{"properties":{"label":{"type":"string"},"name":{"type":"string"},"type":{"enum":["string","date","boolean"],"type":"string"}},"type":"object"},"type":"array"},"issuer":{"type":"string"},"name":{"type":"string"},"template_id":{"type":"integer"},"type":{"type":"string"}},"type":"object"},"VIOResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"},"document":{"$ref":"#/components/schemas/VIODocumentIdentity"},"media":{"additionalProperties":true,"type":"object"},"meta":{"properties":{"credits_remaining":{"type":"integer"},"credits_used":{"type":"integer"},"input_encoding":{"examples":["api-pdf","api-image","api-image-base64"],"type":"string"},"qr_version":{"type":"integer"},"request_id":{"type":"string"}},"type":"object"},"success":{"const":true,"type":"boolean"},"validation":{"properties":{"certificate_id":{"type":"string"},"qr_created_at":{"format":"date-time","type":"string"},"signature_algorithm":{"type":"string"},"signature_checked":{"type":"boolean"},"signature_valid":{"type":"boolean"}},"type":"object"}},"required":["success","document","validation","data","meta"],"type":"object"}},"securitySchemes":{"bearerAuth":{"bearerFormat":"RodoData API Key","scheme":"bearer","type":"http"}}},"info":{"contact":{"email":"contato@rododata.com","name":"RodoData"},"description":"APIs REST para leitura e validação de documentos VIO enviados preferencialmente em PDF e consultas ANTT/RNTRC. Endpoints comerciais usam autenticação Bearer e créditos pré-pagos.","title":"RodoData API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/v1/antt/rntrc/vehicle":{"post":{"description":"Consulta o vínculo e a situação do veículo para transporte remunerado. Consome créditos apenas quando a consulta é concluída; falhas na fonte externa são estornadas.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ANTTRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ANTTResponse"}}},"description":"Consulta concluída","headers":{"X-Credits-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"X-Request-ID":{"schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Requisição inválida"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"API Key ausente ou inválida"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Créditos insuficientes"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Escopo não autorizado"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit excedido"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Erro interno"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Consulta externa não pôde ser concluída"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Serviço temporariamente indisponível"}},"security":[{"bearerAuth":[]}],"summary":"Consultar RNTRC por documento e placa","tags":["ANTT"]}},"/v1/vio/decode":{"post":{"description":"Aceita PDF como formato recomendado, além de PNG, JPEG ou GIF via multipart/form-data no campo file. PDFs têm até as 20 primeiras páginas renderizadas sequencialmente para localizar o QR Code e o processamento é interrompido quando o código é encontrado. Também aceita image_base64 em JSON para imagens. Consome créditos apenas quando a consulta é concluída; falhas de processamento são estornadas.","requestBody":{"content":{"application/json":{"schema":{"properties":{"image_base64":{"description":"Imagem PNG, JPEG ou GIF codificada em Base64.","type":"string"}},"required":["image_base64"],"type":"object"}},"multipart/form-data":{"schema":{"properties":{"file":{"description":"PDF (recomendado), PNG, JPEG ou GIF contendo o documento VIO e seu QR Code.","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VIOResponse"}}},"description":"Documento processado","headers":{"X-Credits-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}},"X-Request-ID":{"schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Requisição inválida"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"API Key ausente ou inválida"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Créditos insuficientes"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Escopo não autorizado"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"QR Code não pôde ser processado"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit excedido"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Erro interno"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Serviço temporariamente indisponível"}},"security":[{"bearerAuth":[]}],"summary":"Decodificar e validar QR Code VIO","tags":["VIO"]}},"/v1/vio/documents":{"get":{"description":"Endpoint público de catálogo. Não consome créditos.","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"count":{"type":"integer"},"documents":{"items":{"$ref":"#/components/schemas/VIODocumentSchema"},"type":"array"},"request_id":{"type":"string"},"success":{"type":"boolean"}},"type":"object"}}},"description":"Catálogo carregado"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Erro ao carregar catálogo"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Catálogo indisponível"}},"summary":"Listar documentos VIO reconhecidos","tags":["VIO"]}},"/v1/vio/documents/{templateID}":{"get":{"description":"Endpoint público de catálogo. Não consome créditos.","parameters":[{"in":"path","name":"templateID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"document":{"$ref":"#/components/schemas/VIODocumentSchema"},"request_id":{"type":"string"},"success":{"type":"boolean"}},"type":"object"}}},"description":"Template encontrado"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"template_id inválido"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Documento VIO não encontrado"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Catálogo indisponível"}},"summary":"Consultar um template VIO","tags":["VIO"]}}},"servers":[{"description":"Produção","url":"https://rododata.com"}],"tags":[{"description":"Catálogo e leitura de QR Codes VIO em PDFs ou imagens de documentos.","name":"VIO"},{"description":"Consultas de transporte e RNTRC.","name":"ANTT"}]}
