Observed since 20 Oct, 16:34 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A2SPA payload helper library for AI-agent runtime authorization
Helper-only Python package for building, hashing, and signing A2SPA runtime authorization payloads.
The verifier remains server-side. This package does not authorize actions by itself.
pip install a2spa
For ML-DSA signing support where the optional wheel is available:
pip install "a2spa[pq]"
from pathlib import Path
from a2spa import build_payload_fields, build_signed_request, policy_input
private_key_text = Path("sender.priv.pem").read_text(encoding="utf-8")
payload = build_payload_fields(
agent_id="user-123_sender",
target_agent_id="user-123_receiver",
input_data=policy_input(action="deliver", workflow_scope="messages:deliver"),
)
request_body = build_signed_request(private_key_text, payload)
Send request_body to POST /api/verify_payload with your account API key in the x-api-key header.
build_payload_fields(...)policy_input(...)policy_template(...)state_continuity_claim(...)canonicalize_payload(...)compute_payload_hash(...)finalize_payload(...)sign_payload(...)build_signed_request(...)is_authorized_result(...)require_authorized_result(...)verify_execution_receipt(...)enforce_target_authorization(...)build_target_acknowledgement(...)execute_protected_action(...)build_debug_snapshot(...)Current helper compatibility signs the UTF-8 bytes of json.dumps(signable_payload, sort_keys=True) using the normalized signable fields. Do not reimplement canonicalization unless your bytes match canonicalize_payload(...) exactly.
Private keys must stay in a secret manager, server environment, or deployment secret. Do not paste private keys into chats, logs, client-side code, or source control.
A2SPA 2.1 adds a deployment profile for protected targets. The target, trusted gateway, service, or executor should fail closed unless the A2SPA authorization result is valid for the exact operation being committed.
from a2spa import build_target_acknowledgement, enforce_target_authorization
authorization = enforce_target_authorization(
result,
target_agent_id="user-123_email-target",
action="send_email",
workflow_scope="email:send",
trusted_receipt_public_key_pem=trusted_a2spa_receipt_public_key,
)
# Commit the protected side effect only after enforce_target_authorization returns.
provider_result = email_provider.send(message)
target_ack = build_target_acknowledgement(
authorization,
target_id="smtp-gateway",
operation_id=message["idempotency_key"],
result={"provider_message_id": provider_result.id},
)
If the agent can reach another route that commits the same protected consequence without this guard, the deployment fails the A2SPA 2.1 profile.
pypistats · 60 observations shown. Missing days are unknown. Source category: overall: without mirrors.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-19 – 2026-10-19 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-18 – 2026-10-18 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-17 – 2026-10-17 | 4 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-16 – 2026-10-16 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-15 – 2026-10-15 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-14 – 2026-10-14 | 11 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-13 – 2026-10-13 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-12 – 2026-10-12 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-11 – 2026-10-11 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-10 – 2026-10-10 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-09 – 2026-10-09 | 4 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-08 – 2026-10-08 | 10 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-07 – 2026-10-07 | 3 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-06 – 2026-10-06 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-05 – 2026-10-05 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-04 – 2026-10-04 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-03 – 2026-10-03 | 8 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-02 – 2026-10-02 | 3 | 2026-10-20T16:35:46.3825528Z |
| 2026-10-01 – 2026-10-01 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-30 – 2026-09-30 | 107 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-29 – 2026-09-29 | 8 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-28 – 2026-09-28 | 7 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-27 – 2026-09-27 | 6 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-26 – 2026-09-26 | 4 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-24 – 2026-09-24 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-23 – 2026-09-23 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-21 – 2026-09-21 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-20 – 2026-09-20 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-19 – 2026-09-19 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-18 – 2026-09-18 | 8 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-17 – 2026-09-17 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-16 – 2026-09-16 | 7 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-15 – 2026-09-15 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-14 – 2026-09-14 | 3 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-13 – 2026-09-13 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-12 – 2026-09-12 | 7 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-10 – 2026-09-10 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-09 – 2026-09-09 | 4 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-08 – 2026-09-08 | 1 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-07 – 2026-09-07 | 4 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-06 – 2026-09-06 | 6 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-05 – 2026-09-05 | 6 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-04 – 2026-09-04 | 12 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-03 – 2026-09-03 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-02 – 2026-09-02 | 3 | 2026-10-20T16:35:46.3825528Z |
| 2026-09-01 – 2026-09-01 | 6 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-31 – 2026-08-31 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-30 – 2026-08-30 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-29 – 2026-08-29 | 18 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-28 – 2026-08-28 | 97 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-26 – 2026-08-26 | 3 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-25 – 2026-08-25 | 4 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-24 – 2026-08-24 | 13 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-23 – 2026-08-23 | 7 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-22 – 2026-08-22 | 4 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-21 – 2026-08-21 | 2 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-20 – 2026-08-20 | 90 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-19 – 2026-08-19 | 7 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-18 – 2026-08-18 | 27 | 2026-10-20T16:35:46.3825528Z |
| 2026-08-17 – 2026-08-17 | 186 | 2026-10-20T16:35:46.3825528Z |
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.4 | 30 Sept 2026 | 2 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 16:34 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:15fb46583496fdb4685556c682bf16996d1802fc9dd4144c6e1da64d1cd859cf