Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

agentcredia (Python SDK)

Official Python SDK for AgentCredia - the non-custodial AI-agent wallet platform on Base.

Pre-release: 0.0.1a0 ships the operational essentials - HTTP transport, apiKeys resource, and webhooks.verify. The full surface (every resource + x402 client + async client) lands in the 21.3 Phase C follow-up rows.

Install

pip install agentcredia

Requires Python 3.9 or newer.

Quick start

from agentcredia import Client

client = Client(api_key="sk_test_...")
for key in client.api_keys.list()["data"]:
    print(key["id"], key["prefix"])

The client pins the network from the api-key prefix (sk_test_* → testnet, sk_live_* → mainnet). Override with Client(api_key=..., network="mainnet") when you need both modes in one process (mixed-mode tests).

Verify webhook signatures

This is the single most important utility this SDK ships - drop it into the top of your webhook handler BEFORE touching the body.

from agentcredia import webhooks

# In your Flask / FastAPI / Django handler:
def receive_webhook(req, raw_body, secret):
    result = webhooks.verify(headers=req.headers, raw_body=raw_body, secret=secret)
    if not result.ok:
        return {"code": result.code}, 400
    # result.event_type / result.event_id / result.delivery_id populated
    process_event(raw_body, result.event_type)

The verifier:

  • Reads X-AgentCredia-Signature in either t=<ts>,v1=<hex> or bare-hex form (some load balancers strip commas).
  • Falls back to X-AgentCredia-Timestamp when the signature is bare.
  • Rejects with webhook.timestamp_outside_window when drift exceeds 300s (5-minute replay window; matches the worker).
  • Constant-time compares via hmac.compare_digest.

For exception-based flows pass raise_on_fail=True:

try:
    webhooks.verify(headers=req.headers, raw_body=raw_body, secret=secret, raise_on_fail=True)
except WebhookSignatureError as e:
    return {"code": e.code}, 400

Errors

Two classes:

  • AgentCrediaError - base class; every SDK error inherits.
  • ApiKeyError - subclass for HTTP 401 / 403 envelopes whose error.code starts with apikey. (e.g. apikey.scope_insufficient, apikey.wallet_not_assigned).

Always branch on .code, never regex-match .message:

from agentcredia import ApiKeyError

try:
    client.api_keys.list()
except ApiKeyError as e:
    if e.code == "apikey.scope_insufficient":
        # mint a fresh key with more scope
        ...

Workspace keys (sub-plan 21.3)

Two key shapes exist (see the Authentication guide for the full decision tree):

  • Wallet-only: bound to ONE agent via agent_id. The right shape for an autonomous AI agent that IS one wallet.
  • Workspace: for human operators that can carry workspace-level scopes AND assignments to N specific wallets.

The Python SDK forwards both shapes through the same client.api_keys resource; the body shape decides the flavor on the server. Once the create surface lands beyond the C-2 scaffold:

key = client.api_keys.create(
    label="Treasury daily reconciliation",
    workspace_scopes=["read_workspace"],
    wallet_assignments=[
        {"agentId": "agt_trading", "scopes": ["read_wallet_metadata"]},
        {"agentId": "agt_settlement", "scopes": ["read_wallet_metadata"]},
    ],
    expires_in_days=30,
)
print(key["secret"])  # shown ONCE

Server-side RBAC: the minter cannot grant a scope they do not have themselves. Over-grants reject with apikey.role_insufficient_for_grants - catch ApiKeyError and branch on e.code.

Cascade behaviour: when an assigned wallet is soft-deleted, the assignment row is removed. If the key has zero workspace scopes AND no remaining assignments, it auto-revokes with apikey.no_grants_remaining. Mint a fresh key.

x402 (Phase C-7)

The sibling package agentcredia-x402 (Python port of @agentcredia/x402) will ship the x402 client + FastAPI / Starlette / Flask adapters in sub-plan 21.3 row C-7. The wire format is identical across languages so a Python service can accept payments from a Node client and vice-versa.

Retry behaviour

The transport retries on 429 and 5xx with exponential backoff (0.5s → 1s → 2s → ... → 30s cap). Retry-After is honoured when the server sends it. Network errors (timeout, connection drop) get the same retry budget.

POST / PATCH / DELETE requests carry an Idempotency-Key header

  • the SDK mints a uuid4 if you do not supply one. Pass idempotency_key="..." to thread a stable key across SDK retries OR across processes (e.g. cron jobs that hash their input deterministically).

Codegen

Type-only DTOs are generated from apps/backend/openapi/openapi.yaml via datamodel-code-generator. Transport, retry, error mapping, and the webhook verifier stay handwritten - see codegen/README.md for the decision rationale.

Source-of-truth + distribution

Source-of-truth: this directory in the private AgentCredia monorepo under packages/sdk-python/.

Public mirror: agentcredia/agentcredia-python (receives merges from this directory on each push to dev).

Distribution: pypi via Trusted Publisher OIDC.

License

Apache-2.0.

Metadata

Release files for agentcredia 0.0.1a1

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

Source distribution (sdist)

Source distribution for agentcredia 0.0.1a1
File Size Uploaded Provenance Actions
agentcredia-0.0.1a1.tar.gz 28.0 kB With provenance Details for agentcredia-0.0.1a1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for agentcredia 0.0.1a1
File Interpreter ABI Platform Actions
agentcredia-0.0.1a1-py3-none-any.whl Python 3 none any Details for agentcredia-0.0.1a1-py3-none-any.whl

Total release size: 51.7 kB

Release files / agentcredia-0.0.1a1.tar.gz

Download URL agentcredia-0.0.1a1.tar.gz
Size 28.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c3163ad3f309bfe6ebb865be707f179f0f7b5da447fcea977a39a352688dbe77
BLAKE2b-256 checksum
How to use checksums
13a15f5014796af0964cab83279982ecf21189382427dff2a2ab4f6342e26c98
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 10, 2026.

Transparency log

Release files / agentcredia-0.0.1a1-py3-none-any.whl

Download URL agentcredia-0.0.1a1-py3-none-any.whl
Size 23.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2294cd01fcfc3e2b2dfbc401d932f970d1a53c1f52ef96a0c217cdfc50a7e8cd
BLAKE2b-256 checksum
How to use checksums
e63f0040976a1b7ba223878a8c36de2222514531198228e9975178921ccb5663
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 10, 2026.

Transparency log

Security for agentcredia 0.0.1a1

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 agentcredia-0.0.1a1.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 10, 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
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