Skip to main content

Official Python SDK for the VeriSafe AML public REST API. Manage personas, operaciones, beneficial owners and ownership graphs, plus a webhook signature verifier — for sujetos obligados under Spain's Ley 10/2010 + EU AMLR.

Project description

verisafe-aml (Python SDK)

Official Python SDK for the VeriSafe AML public REST API. Companion to the Node SDK (@verisafe-aml/sdk).

PyPI version License: MIT

Status

0.1.0 — alpha. Core surface (people + operations) is shipped; nested resources (documents, addresses, beneficial owners, ownership graph, tickets, entities) land in 0.2.0+. The Node SDK has the full surface — use it if you need everything today.

Install

pip install verisafe-aml

Requires Python ≥3.9.

Quick start

import os
from verisafe_aml import VeriSafeAML

client = VeriSafeAML(api_key=os.environ["VERISAFE_API_KEY"])

# Create a person
created = client.people.create(
    external_id="crm-1234",
    type="individual",
    full_name="María García López",
    identification_type="dni",
    identification_number="12345678Z",
    identification_country="ES",
    nationality="ES",
    country_of_residence="ES",
)

# Ingest an operation
client.operations.create(
    external_id="op-2026-04-001",
    operation_date="2026-04-15",
    amount=12500,
    currency="EUR",
    payment_method="transferencia",
    parties=[
        {"person_external_id": "crm-1234", "role": "ordenante"},
        {"person_external_id": "vendor-5678", "role": "beneficiario"},
    ],
)

# Incremental sync
last = "2026-05-01T00:00:00Z"
while True:
    page = client.operations.list(modified_since=last, page_size=100)
    if not page["data"]:
        break
    for op in page["data"]:
        my_system.upsert_operation(op)
        last = op["updated_at"]

Webhook signature verification

from fastapi import FastAPI, Request, HTTPException
from verisafe_aml import verify_webhook_signature
import os

app = FastAPI()
SECRET = os.environ["VERISAFE_WEBHOOK_SECRET"]

@app.post("/webhooks/verisafe")
async def webhook(request: Request):
    body = await request.body()  # raw bytes — do NOT use await request.json()
    signature = request.headers.get("X-VeriSafe-Signature")
    if not verify_webhook_signature(body, signature, SECRET):
        raise HTTPException(401, "Invalid signature")
    event = request.headers.get("X-VeriSafe-Event")
    payload = await request.json()
    # dispatch on event ...
    return {"ok": True}

Idempotency, rate limits, errors

Same semantics as the Node SDK — see the API docs for details. The client retries automatically on 429 (respecting Retry-After) and on transient 5xx with exponential backoff.

from verisafe_aml import VeriSafeAMLApiError

try:
    client.people.create(...)
except VeriSafeAMLApiError as e:
    if e.code == "INSUFFICIENT_CREDITS":
        # ...
        pass
    raise

Development

pip install -e '.[dev]'
pytest

Roadmap

  • 0.2.0: nested document/address/SMO/BO resources
  • 0.3.0: ownership graph + tickets + entities (read-only screenings/alerts/cases)
  • 0.4.0: typed Pydantic models for all responses
  • 1.0.0: async variant via httpx.AsyncClient

Links

License

MIT © ARWEN VENTURES SL (VeriSafe AML)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

verisafe_aml-0.1.0.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

verisafe_aml-0.1.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file verisafe_aml-0.1.0.tar.gz.

File metadata

  • Download URL: verisafe_aml-0.1.0.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for verisafe_aml-0.1.0.tar.gz
Algorithm Hash digest
SHA256 dcaaaad2d8f3f09bbedea2f0fc0684691b3735fe7189b78428af40f01a1f0d50
MD5 1948fa983a85541f343d746b42d5eda9
BLAKE2b-256 12f001dce38851b4cbf295801813b0bd47b8b359a8bc5eca150a8a79d9176b4b

See more details on using hashes here.

File details

Details for the file verisafe_aml-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: verisafe_aml-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for verisafe_aml-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 87945d1baafa4004c3c91ddb199c4f071a3e780edbf91799918adcf2d18bd29d
MD5 26e0639d85b8b02e5e45b9bd24255992
BLAKE2b-256 3baa71b51eba0161a6752d42d200582863f05be398792bf6e03732e309837580

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page