Skip to main content

pulr-sdk

Official Python SDK for pulr.ai — secure file exchange for AI agents. Zero runtime dependencies; downloads are SHA-256-verified client-side.

pip install pulr-sdk            # core (stdlib only)
pip install pulr-sdk[verify]    # + Ed25519 receipt verification
pip install pulr-sdk[langchain] # + LangChain tools
from pulr import PulrClient, verify_receipt

pulr = PulrClient()  # reads PULR_API_KEY

artifact = pulr.upload(
    file_path="q3-report.pdf",
    expires_in="48h",
    approval=True,  # link stays dormant until a human approves on the review page
    provenance={"workflow": "quarterly-report", "model": "claude-fable-5"},
    restrictions={"allow_countries": ["US"]},
)
print(artifact["review_url"])

# once approved — anyone with the link fetches, integrity-verified against the hash you expect
data, sha256 = pulr.fetch_capability(artifact["download_url"], expected_sha256=artifact["sha256"])

# Ed25519-signed proof of hash + provenance + scan + approval.
# Pin the signing key from /.well-known/pulr-receipt-key instead of trusting the receipt's own copy:
receipt = pulr.receipt(artifact["artifact_id"])
assert pulr.verify_receipt_with_server_key(receipt)  # needs [verify] extra; False on tampering, never raises

LangChain agents:

from pulr.langchain_tool import pulr_tools
tools = pulr_tools(PulrClient())  # pulr_upload / pulr_fetch_capability / pulr_share StructuredTools

Full API: upload, get, download, delete_artifact, fetch_capability, share, list, revoke, receipt / verify_receipt / fetch_receipt_key / verify_receipt_with_server_key, whoami, usage, audit / artifact_audit, create_key, set_webhook, register_agent, plus sealed handoff (send, offer, inbox, accept, reject, address, set_address, rotate_address) and workspaces (workspaces, create_workspace, update_workspace, delete_workspace). Errors are PulrError with .status, .code, .body. fetch_capability accepts only http(s) capability URLs on the client's own host unless allow_any_host=True (never file://), and refuses to return bytes it cannot verify. Get a workspace + key at pulr.ai/app.

0.5.0 change: inbox(), list() and workspaces() return the server's page dict ({"offers" | "artifacts" | "workspaces": [...], "total", "limit", "offset"}) instead of a bare list; set_address needs an explicit boolean paused (use rotate_address() to rotate); the LangChain fetch tool is named pulr_fetch_capability.

MIT © Tal Eilon

When the recipient has a pulr workspace, send straight to their address (pa_...):

pulr.send("pa_...", file_path="deck.pdf", message="final version")

# recipient side
offers = pulr.inbox()["offers"]       # sender, agent id, Ed25519 status, scan, sha256
pulr.accept(offers[0]["offer_id"])    # integrity-verified copy enters the workspace
# or: pulr.reject(offers[0]["offer_id"])

pulr.address()                        # your own workspace address (receive + sender identity)
pulr.rotate_address()                 # old address dies instantly

No capability URL is ever created; both sides' receipts carry a handoff block.

Metadata

Release files for pulr-sdk 0.5.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 pulr-sdk 0.5.0
File Size Uploaded Provenance Actions
pulr_sdk-0.5.0.tar.gz 10.4 kB Without provenance Details for pulr_sdk-0.5.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pulr-sdk 0.5.0
File Interpreter ABI Platform Actions
pulr_sdk-0.5.0-py3-none-any.whl Python 3 none any Details for pulr_sdk-0.5.0-py3-none-any.whl

Total release size: 21.8 kB

Release files / pulr_sdk-0.5.0.tar.gz

Download URL pulr_sdk-0.5.0.tar.gz
Size 10.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e72c26eb02c4e0531dde54943685cc31625b519e5b7eb1ab05ee1f45f875a06f
BLAKE2b-256 checksum
How to use checksums
065c2f673caf9d9dc6938c65f3781c54efaf6c0cfc59bea02bd7cde766cf492f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / pulr_sdk-0.5.0-py3-none-any.whl

Download URL pulr_sdk-0.5.0-py3-none-any.whl
Size 11.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3779450a7bed284fe500099a1baad86355ec3c9438d40dadbd08efc24e47f827
BLAKE2b-256 checksum
How to use checksums
1ebe3d3652a9e40e83c4b4684182ce0d6d75a3964460c0be77fe3df9193e65b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Security for pulr-sdk 0.5.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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.5.0 This release

2 release files No 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