Use a API comercial oficial da platenexus para reconhecer placas com autenticação por API Key.
O fluxo comercial continua simples: envie a imagem, autentique com sua API Key e receba um JSON estável para o seu produto.
Use multipart/form-data e envie o arquivo no campo image. A API foi pensada para integrar com backend, operadores, ERPs e automações.
Inclua o header X-API-Key em toda requisição. A chave é por cliente e o valor completo só é exibido no momento de criação ou rotação.
A resposta traz request_id, status, plate, confidence e processing_time_ms, pronta para UX operacional e trilha de auditoria.
Uma visão de contrato comercial para acelerar entendimento técnico, QA e documentação interna do cliente.
UX de integração ideal: capture o request_id na primeira resposta, exiba o status ao operador e use o histórico para auditoria, debugging e reconciliação.
Além dos snippets rápidos, a documentação agora expõe um schema OpenAPI público para facilitar geração de clientes, documentação interna, mocks e alinhamento entre backend, QA e parceiros.
Use essa URL para importar em Swagger Editor, Postman, Stoplight, ferramentas de QA ou pipelines internos.
openapi: 3.1.0
info:
title: platenexus Commercial Plate Recognition API
paths:
/api/v1/plates/recognize/:
post:
security:
- ApiKeyAuth: []
/api/v1/plates/requests/{request_id}/:
get:
security:
- ApiKeyAuth: []
Os snippets abaixo já estão no formato esperado pela API comercial. A ideia é minimizar tempo até a primeira chamada funcional.
curl -X POST "https://www.platenexus.com/api/v1/plates/recognize/" \ -H "X-API-Key: YOUR_API_KEY" \ -F "image=@/path/to/plate.jpg"
$headers = @{ "X-API-Key" = "YOUR_API_KEY" }
$form = @{ image = Get-Item "C:\\images\\plate.jpg" }
Invoke-RestMethod `
-Method Post `
-Uri "https://www.platenexus.com/api/v1/plates/recognize/" `
-Headers $headers `
-Form $form
import requests
with open("plate.jpg", "rb") as image_file:
response = requests.post(
"https://www.platenexus.com/api/v1/plates/recognize/",
headers={"X-API-Key": "YOUR_API_KEY"},
files={"image": image_file},
timeout=60,
)
print(response.status_code)
print(response.json())
const formData = new FormData();
formData.append("image", fileInput.files[0]);
const response = await fetch("https://www.platenexus.com/api/v1/plates/recognize/", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY"
},
body: formData,
});
const data = await response.json();
console.log(data);
const axios = require("axios");
const FormData = require("form-data");
const fs = require("fs");
async function recognizePlate() {
const form = new FormData();
form.append("image", fs.createReadStream("plate.jpg"));
const response = await axios.post(
"https://www.platenexus.com/api/v1/plates/recognize/",
form,
{
headers: {
"X-API-Key": "YOUR_API_KEY",
...form.getHeaders(),
},
timeout: 60000,
}
);
console.log(response.data);
}
recognizePlate();
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.UUID;
public class PlateRecognitionExample {
public static void main(String[] args) throws IOException, InterruptedException {
String boundary = "----platenexus-" + UUID.randomUUID();
Path imagePath = Path.of("plate.jpg");
byte[] fileBytes = Files.readAllBytes(imagePath);
byte[] body = (
"--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"image\"; filename=\"plate.jpg\"\r\n" +
"Content-Type: image/jpeg\r\n\r\n"
).getBytes();
byte[] closing = ("\r\n--" + boundary + "--\r\n").getBytes();
byte[] payload = new byte[body.length + fileBytes.length + closing.length];
System.arraycopy(body, 0, payload, 0, body.length);
System.arraycopy(fileBytes, 0, payload, body.length, fileBytes.length);
System.arraycopy(closing, 0, payload, body.length + fileBytes.length, closing.length);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.platenexus.com/api/v1/plates/recognize/"))
.header("X-API-Key", "YOUR_API_KEY")
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
.POST(HttpRequest.BodyPublishers.ofByteArray(payload))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MultipartBody
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.asRequestBody
import java.io.File
fun main() {
val file = File("plate.jpg")
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"image",
file.name,
file.asRequestBody("image/jpeg".toMediaType())
)
.build()
val request = Request.Builder()
.url("https://www.platenexus.com/api/v1/plates/recognize/")
.addHeader("X-API-Key", "YOUR_API_KEY")
.post(requestBody)
.build()
OkHttpClient().newCall(request).execute().use { response ->
println(response.body?.string())
}
}
using System.Net.Http;
using System.Net.Http.Headers;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");
using var form = new MultipartFormDataContent();
using var fileStream = File.OpenRead("plate.jpg");
using var fileContent = new StreamContent(fileStream);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
form.Add(fileContent, "image", "plate.jpg");
var response = await client.PostAsync("https://www.platenexus.com/api/v1/plates/recognize/", form);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
file, _ := os.Open("plate.jpg")
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("image", "plate.jpg")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://www.platenexus.com/api/v1/plates/recognize/", body)
req.Header.Set("X-API-Key", "YOUR_API_KEY")
req.Header.Set("Content-Type", writer.FormDataContentType())
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
payload, _ := io.ReadAll(resp.Body)
println(string(payload))
}
require "net/http"
require "json"
uri = URI("https://www.platenexus.com/api/v1/plates/recognize/")
request = Net::HTTP::Post.new(uri)
request["X-API-Key"] = "YOUR_API_KEY"
request.set_form([["image", File.open("plate.jpg")]], "multipart/form-data")
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts response.body
<?php
$ch = curl_init('https://www.platenexus.com/api/v1/plates/recognize/');
$data = [
'image' => new CURLFile(__DIR__ . '/plate.jpg'),
];
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_API_KEY'],
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Além do snippet técnico, estes exemplos ajudam a visualizar como a UX do produto pode ficar em cada contexto de uso.
O usuário sobe uma imagem, o backend chama o POST, persiste request_id e mostra placa, confiança e status no painel. Ideal para CRMs, ERPs e software vertical.
A câmera ou operador envia a imagem, a interface recebe success ou not_found, e a UX orienta liberar entrada, pedir nova captura ou registrar exceção.
O sistema usa o resultado imediato no atendimento e depois consulta o histórico por request_id para auditoria, disputa operacional e suporte.
Esse endpoint é útil para auditoria, reconciliação, suporte e telas operacionais que precisam rastrear uma leitura específica.
Além de 200 success, a API também usa estados funcionais úteis para a UX do operador e para trilhas de suporte.
Use este caminho para liberar entrada, registrar evento ou seguir a regra principal do produto.
{
"request_id": "8c29cf32-2cae-4f79-8f2e-28a9b71ce1de",
"status": "success",
"plate": "ABC1D23",
"confidence": 0.94,
"confidence_is_estimated": false,
"country": "BR",
"timestamp": "2026-05-18T12:00:00+00:00",
"processing_time_ms": 1234
}
Bom para UX honesta: processamento concluído, mas sem leitura utilizável. Isso ajuda a orientar reenvio, câmera ou posição.
{
"request_id": "8c29cf32-2cae-4f79-8f2e-28a9b71ce1de",
"status": "not_found",
"plate": null,
"confidence": null,
"confidence_is_estimated": false,
"timestamp": "2026-05-18T12:00:00+00:00",
"message": "No plate detected",
"processing_time_ms": 980
}
Ideal para desenhar fallback visual, mensagens de suporte e telemetria do cliente sem ambiguidade.
{
"request_id": "8c29cf32-2cae-4f79-8f2e-28a9b71ce1de",
"status": "limit_exceeded",
"message": "Monthly request limit exceeded"
}
Esse resumo ajuda times a desenhar mensagens, dashboards, logs e regras de cobrança sem precisar interpretar tudo no código.
| HTTP | status | Cobra quota? | O que significa | UX recomendada |
|---|---|---|---|---|
| 200 | success |
Sim | Placa reconhecida com sucesso. | Mostre a placa, confiança e siga o fluxo principal do produto. |
| 200 | not_found |
Sim | Imagem processada, mas sem leitura útil. | Explique ao operador que a imagem foi processada e ofereça reenvio. |
| 400 | error |
Não | Imagem ausente ou inválida. | Valide tipo e arquivo antes do POST e exiba mensagem de correção. |
| 401 | error |
Não | API key ausente, inválida ou revogada. | Interrompa a automação e acione rotação ou checagem da chave. |
| 403 | error |
Não | Cliente inativo. | Escalone para gestão da conta ou suporte comercial. |
| 404 | error |
Não | Histórico não encontrado para o cliente dono da chave. | Verifique request_id e escopo da conta autenticada. |
| 429 | limit_exceeded |
Não | Limite mensal esgotado. | Mostre plano ou upgrade, pause automação ou entre em contato com vendas. |
| 500 | error |
Não | Falha interna de reconhecimento. | Registre o request_id, tente novamente e abra suporte se persistir. |
Pensado para melhorar UX técnica, estabilidade do cliente e clareza de suporte desde o primeiro deploy.
Ele é a peça-chave para troubleshooting, auditoria, histórico e conversa entre produto, suporte e cliente.
Nem toda leitura vazia é falha. Essa distinção melhora muito a UX do operador e os analytics do produto.
A arquitetura recomendada é backend-to-backend ou backend intermediando o upload do cliente final.
Checar tamanho, extensão e tipo MIME reduz erros de UX, ruído operacional e chamadas desnecessárias.
Guardar status, request_id e processing_time_ms melhora suporte, SLO e observabilidade.
Mensagens específicas para autenticação, limite, imagem inválida e not_found deixam o sistema mais profissional.
Conteúdo pensado para buscas como API ANPR, OCR de placas, reconhecimento de placas via REST e integração LPR para software.
Fluxo simples para enviar imagem, autenticar a requisição e receber a leitura da placa com dados de apoio para o seu sistema.
Ideal para empresas que querem embutir leitura de placas no próprio produto sem construir um motor do zero.
Aplicável a condomínio, portaria remota, estacionamento, logística e segurança veicular com jornada comercial e técnica clara.
Respostas diretas para as dúvidas mais comuns antes de iniciar uma integração comercial.
Estas páginas ficam no mesmo site, entram no sitemap e ajudam o Google a relacionar a platenexus com integrações, condomínios, estacionamentos, SaaS, IA local e logística.