Skip to main content

Alpr.sh SDK para Python

SDK oficial da API da Alpr.sh para Python 3.11+, sem dependências. É gerado a partir do contrato da API (openapi.json, na raiz de alpr-sh/sdk) por generator/. Não edite os arquivos desta pasta: regenere.

pip install alpr-sdk

Começando

A chave de API (alpr_live_…) é a do espaço de trabalho: ela diz de quem são as leituras e quais escopos a chamada pode usar. Não há ambiente de teste.

import os
from alpr import Alpr

alpr = Alpr(os.environ["ALPR_API_KEY"])

# Lê as placas de uma foto.
with open("portaria.jpg", "rb") as file:
    result = alpr.photos.recognize({"image": file.read(), "lpr_confidence": 0.5})
for plate in result.plates:
    print(plate.plate, plate.conf, plate.plate_type)

# Percorre as leituras, da mais nova para a mais antiga, com filtros.
for reading in alpr.recognitions.list_iter(plate="BRA", source="camera"):
    print(reading.id, reading.plate, reading.captured_at)

# Lista as câmeras.
for camera in alpr.cameras.list():
    print(camera.id, camera.name, camera.enabled)

# O link temporário da imagem de uma leitura.
image = alpr.recognitions.image("det_123")
print(image.image_url, image.expires_in)

Alpr(api_key, base_url=…, timeout=30, transport=…): o endereço-base é https://alpr.sh; http só é aceito para localhost, 127.0.0.0/8 e ::1, e qualquer outro endereço levanta ValueError antes de qualquer envio, para a chave nunca cruzar a rede em texto claro. A chamada que precisa de outra chave aceita api_key=. Redirecionamentos nunca são seguidos (a chave não viaja): um 3xx é um AlprError. O SDK não repete chamadas sozinho.

A foto

Passe os bytes da foto (bytes). O SDK envia multipart/form-data no campo image, com o nome e o tipo definidos pelos primeiros bytes: JPEG (FF D8 FF) vira photo.jpg (image/jpeg), PNG vira photo.png (image/png) e qualquer outra coisa vai como photo (application/octet-stream), para a API recusar. As opções lpr_confidence e min_ocr_confidence (de 0 a 1) são opcionais e só são enviadas quando você as passa; ocr aceita apenas image.

Páginas

alpr.recognitions.list(before=…, plate=…, camera=…, source=…) busca uma página e devolve Page com items e next, o cursor da página seguinte (None na última). list_iter(...) é um gerador que percorre todas as páginas, começando do cursor before que você passar (sem ele, da mais nova), e termina no primeiro erro ou quando o cursor deixa de andar.

Recursos

Serviço Métodos
alpr.cameras list
alpr.photos detect, ocr, recognize
alpr.recognitions image, list, list_iter

Erros

Uma recusa da API levanta AlprError, com status, code, message, fields (vazio, a menos que a resposta traga o problema de cada campo) e, num 429, retry_after em segundos (do cabeçalho Retry-After). Uma resposta de erro que não é JSON continua sendo um erro, só com o status. Os códigos:

Status code
400 missing image, invalid_image, invalid_option
401 invalid_api_key
402 insufficient_credits
403 insufficient_scope
404 not_found, image_unavailable
413 image_too_large
422 no_plate
429 rate_limited
503 engine_unavailable, storage_unavailable
from alpr import AlprError

try:
    alpr.photos.recognize({"image": photo})
except AlprError as error:
    if error.code == "rate_limited":
        time.sleep(error.retry_after or 1)

Webhooks

A Alpr.sh envia os eventos para o endereço que você cadastrou, assinados. Os cabeçalhos:

  • X-Alprsh-Delivery-Id: o id da entrega. Deduplique as entregas por ele: o id do corpo é o da leitura ou do alerta, não o da entrega.
  • X-Alprsh-Timestamp: segundos desde 1970 (só dígitos ASCII).
  • X-Alprsh-Signature: sha256= e os 64 caracteres hexadecimais do HMAC-SHA256 de timestamp + "." + delivery-id + "." + corpo, com o segredo do endpoint (whsec_…) usado como está, em UTF-8, sem decodificar.
from alpr import (
    AlertTriggeredWebhookEvent,
    RecognitionCreatedWebhookEvent,
    UnknownWebhookEvent,
    WebhookVerificationError,
    verify_webhook,
)

try:
    event = verify_webhook(os.environ["ALPR_WEBHOOK_SECRET"], request.headers, request.get_data())
except WebhookVerificationError:
    return "assinatura inválida", 400

match event:
    case RecognitionCreatedWebhookEvent(plate=plate, camera_id=camera_id):
        print(event.event, plate, camera_id, event.captured_at)
    case AlertTriggeredWebhookEvent(rule_name=rule_name):
        print(rule_name, event.recognition_id)
    case UnknownWebhookEvent():
        pass  # um evento que esta versão do SDK ainda não conhece: event.body é o JSON

Passe o corpo cru, exatamente como chegou, e verifique antes de interpretar. Os cabeçalhos podem ser um dicionário (a busca ignora maiúsculas) ou uma lista de pares (nome, valor), para os frameworks que repetem um cabeçalho. A tolerância do relógio é de WEBHOOK_TOLERANCE_SECONDS (300 segundos, para os dois lados; exatamente 300 passa, 301 não).

Durante a rotação do segredo o cabeçalho de assinatura traz mais de uma, numa linha separada por vírgulas ou em linhas repetidas (até 6); basta uma conferir, mas uma assinatura malformada recusa a requisição inteira. verify_webhook_signature só confere a assinatura. Uma assinatura que não confere levanta WebhookVerificationError; um segredo vazio é um erro de configuração (ValueError), não de assinatura.

O evento é tipado: um tipo por carga (RecognitionCreatedWebhookEvent, AlertTriggeredWebhookEvent, TestWebhookEvent), com os campos da carga na raiz (event, id, tenant_id, plate…), sem data nem type. Um nome de evento que esta versão do SDK não conhece chega como UnknownWebhookEvent (event, id e o body inteiro), e não é um erro. Um corpo que não é um objeto com event levanta ValueError.

Versão do SDK: 0.1.0 · contrato da API: 1.0.0

Metadata

Release files for alpr-sdk 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for alpr-sdk 0.1.0
File Size Uploaded Provenance Actions
alpr_sdk-0.1.0.tar.gz 19.0 kB With provenance Details for alpr_sdk-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for alpr-sdk 0.1.0
File Interpreter ABI Platform Actions
alpr_sdk-0.1.0-py3-none-any.whl Python 3 none any Details for alpr_sdk-0.1.0-py3-none-any.whl

Total release size: 35.5 kB

Release files / alpr_sdk-0.1.0.tar.gz

Download URL alpr_sdk-0.1.0.tar.gz
Size 19.0 kB
Tags Source
SHA-256 checksum
How to use checksums
6e89d8f15d41d91736f57b1b20c165ab7a8e4a3de501db93b89c02054c3fbe98
BLAKE2b-256 checksum
How to use checksums
145d1e1caecf4433864488b41186739ab82a0b45423672b44b43924e37e6c816
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / alpr_sdk-0.1.0-py3-none-any.whl

Download URL alpr_sdk-0.1.0-py3-none-any.whl
Size 16.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cb3e13b0f8d2233ff4e7ed30f4703d09a5d25f465a296f2fd2ba2b4b812ac034
BLAKE2b-256 checksum
How to use checksums
b2002b741983d8ded255e651340555ac2eddaf87c03a168b2e4f1504f1b103ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Security for alpr-sdk 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for alpr_sdk-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page