POST /api/recognize
Envie uma imagem JPEG ou PNG e receba os dados de todas as placas detectadas. Cada chamada bem-sucedida consome 1 crédito.
Autenticação
Scope necessário: recognitions:write
Inclua o header Authorization: Bearer <api-key> ou use cookie de sessão.
Requisição
POST /api/recognize
Content-Type: application/octet-stream
Body: bytes da imagem
Headers
| Header | Obrigatório | Descrição |
|---|---|---|
Authorization | sim | Bearer pk_... (API key) ou cookie de sessão |
Content-Type | sim | application/octet-stream |
Body
O corpo da requisição deve conter os bytes brutos da imagem (JPEG ou PNG).
| Restrição | Valor |
|---|---|
| Tamanho máximo | 10 MB |
| Formatos aceitos | JPEG, PNG |
| Timeout | 30 segundos |
| Custo | 1 crédito por chamada |
Exemplos
curl
curl -X POST "https://api.placaflow.com.br/api/recognize" \
-H "Content-Type: application/octet-stream" \
-H "Authorization: Bearer pk_a1b2c3d4e5f6g7h8i9j0..." \
--data-binary @foto.jpg
Node.js
const fs = require('fs');
const image = fs.readFileSync('foto.jpg');
const res = await fetch('https://api.placaflow.com.br/api/recognize', {
method: 'POST',
headers: {
'Content-Type': 'application/octet-stream',
'Authorization': 'Bearer pk_a1b2c3d4e5f6g7h8i9j0...',
},
body: image,
});
const data = await res.json();
console.log(`Placas encontradas: ${data.plates.length}`);
console.log(`Tempo de processamento: ${data.processingTimeMs}ms`);
console.log(`Créditos restantes: ${data.creditsRemaining}`);
for (const plate of data.plates) {
console.log(`${plate.plate} — ${plate.conf.toFixed(1)}%`);
}
Python
import requests
with open('foto.jpg', 'rb') as f:
image = f.read()
res = requests.post(
'https://api.placaflow.com.br/api/recognize',
headers={
'Content-Type': 'application/octet-stream',
'Authorization': 'Bearer pk_a1b2c3d4e5f6g7h8i9j0...',
},
data=image,
)
data = res.json()
print(f"Placas encontradas: {len(data['plates'])}")
print(f"Tempo: {data['processingTimeMs']}ms")
print(f"Créditos restantes: {data['creditsRemaining']}")
for plate in data['plates']:
print(f"{plate['plate']} — {plate['conf']:.1f}%")
Resposta 200
{
"plates": [
{
"plate": "ABC1D23",
"conf": 95.2,
"charConfs": "0.98;0.95;0.92;0.96;0.94;0.97;0.93",
"coordinateLeft": 100,
"coordinateTop": 200,
"coordinateRight": 300,
"coordinateBottom": 250,
"plateType": "car",
"time": "2026-03-22T14:30:00.000-03:00",
"createdAt": "2026-03-22T14:30:00.000-03:00"
},
{
"plate": "XYZ9K87",
"conf": 88.7,
"charConfs": "0.91;0.87;0.90;0.85;0.92;0.88;0.86",
"coordinateLeft": 520,
"coordinateTop": 310,
"coordinateRight": 710,
"coordinateBottom": 365,
"plateType": "car",
"time": "2026-03-22T14:30:00.000-03:00",
"createdAt": "2026-03-22T14:30:00.000-03:00"
}
],
"processingTimeMs": 45,
"imageWidth": 1920,
"imageHeight": 1080,
"creditsRemaining": 499
}
Campos da resposta (raiz)
| Campo | Tipo | Descrição |
|---|---|---|
plates | array | Lista de placas detectadas (pode ser vazia) |
processingTimeMs | number | Tempo de processamento em milissegundos |
imageWidth | number | Largura da imagem em pixels |
imageHeight | number | Altura da imagem em pixels |
creditsRemaining | number | Créditos restantes após esta chamada |
Campos de cada placa (plates[n])
| Campo | Tipo | Descrição |
|---|---|---|
plate | string | Texto da placa (uppercase) |
conf | number | Confiança geral (0-100) |
charConfs | string | Confiança por caractere (0-1), separado por ; |
coordinateLeft | number | Bounding box: X esquerdo em pixels |
coordinateTop | number | Bounding box: Y superior em pixels |
coordinateRight | number | Bounding box: X direito em pixels |
coordinateBottom | number | Bounding box: Y inferior em pixels |
plateType | string | Tipo de veículo: car, motorcycle, etc. |
time | string | Timestamp do reconhecimento |
createdAt | string | Timestamp de criação do registro |
Dica
O campo charConfs contém valores entre 0 e 1, não 0 e 100. Para exibir como porcentagem, multiplique por 100. Ex: "0.98;0.95;0.92" significa 98%, 95%, 92%.
Erros
| Código | Descrição |
|---|---|
| 400 | Imagem vazia, formato inválido ou tamanho acima de 10 MB |
| 401 | Não autenticado ou API key inválida |
| 402 | Créditos insuficientes (saldo zerado) |
| 403 | API key não possui scope recognitions:write |
| 502 | Agente de processamento indisponível |
| 503 | Nenhum servidor de reconhecimento disponível |