Plenipo

Guide · Public sandbox

How the demo works

Plenipo lets a person give an AI agent a limited mandate from their EU Digital Identity Wallet, and lets a bank check every call the agent makes against that mandate. The public sandbox runs the whole chain with fictional people and money. This page shows who does what, what you see on each screen, and how to make the simulation more real, one step at a time.

Who is in the demo

Who is in the demoAgent platform to Person with EUDI Wallet: mandate request (OpenID4VP, QR or link). Person with EUDI Wallet to Agent platform: approval: PID bound to the mandate hash. AI agent (Claude or your own) to Bank: signed call + mandate chain. Bank to Agent platform: mandate status list. Bank to PID provider: PID status list.Person withEUDI WalletAI agent(Claude or your own)Agent platformRequests and revocationBankPlenipo verifierPID providerIdentity and statusmandate request(OpenID4VP, QR or link)approval: PID boundto the mandate hashsigned call + mandate chainmandate status listPID status list
Person with EUDI Wallet
The person reads the mandate limits in their wallet and decides whether to approve with their PID.
AI agent (Claude or your own)
The agent asks for permission and sends signed calls within the mandate to the bank.
Agent platform
The platform asks for the mandate and keeps the switch to stop it by revoking or suspending it.
Bank
The bank verifies every call with Plenipo before it executes anything.
PID provider
The PID provider issues the person's identity and publishes its status list.

In the public sandbox all five run at sandbox.plenipo.net; the people are Maria Rossi and Luca Bianchi, and the money is not real.

One mandate, step by step

One mandate, step by step1. Agent asks the platform for a mandate (actions, counterparties, limits, validity). 2. Platform sends an OpenID4VP request with the mandate as transaction data (type plenipo_mandate). 3. The person reads every limit and approves with their PID. 4. Wallet returns the PID presentation, whose key binding signs the hash of the exact mandate bytes. 5. Agent calls the bank with a signed invocation and the mandate chain. 6. Bank checks the PID issuer, the mandate hash, the limits, the counterparty and the revocation status, then answers ALLOW or DENY.AgentPlatformWalletBankAsk for a mandate1OpenID4VP requestplenipo_mandate2Read limitsand approve3PID presentationbound to mandate hash4Signed invocation + mandate chain5Verify, then ALLOW or DENY6
  1. 01Agent asks the platform for a mandate (actions, counterparties, limits, validity).
  2. 02Platform sends an OpenID4VP request with the mandate as transaction data (type plenipo_mandate).
  3. 03The person reads every limit and approves with their PID.
  4. 04Wallet returns the PID presentation, whose key binding signs the hash of the exact mandate bytes.
  5. 05Agent calls the bank with a signed invocation and the mandate chain.
  6. 06Bank checks the PID issuer, the mandate hash, the limits, the counterparty and the revocation status, then answers ALLOW or DENY.

The agent asks

Agent platform mandate request with a QR code, actions, counterparties, spending limits and validity.
The platform shows what the agent asks for and a QR code. An EUDI wallet scans it; in the sandbox you can also open the sandbox wallet in the browser.

The person decides

Sandbox EUDI Wallet consent screen showing all mandate limits and the Maria Rossi or Luca Bianchi approval options.
The wallet shows every limit of the mandate: actions, payees, amounts, validity, hand-over to other agents. Approving shares only given name, family name and birth date from the PID.

Every check, live

Plenipo demo timeline showing COUNTERPARTY_NOT_PERMITTED for a prompt-injected payee and the genuine payment allowed.
Each run has a six-character demo code. On plenipo.net/demo you follow the agent, the wallet and the bank as it happens. Here a bill tells the agent to pay someone else: the bank refuses with COUNTERPARTY_NOT_PERMITTED and the genuine payment still goes through.

What the bank sees

Sandbox bank account for Luca Bianchi with a payment, the payee register and the latest ALLOW and DENY decisions.
The bank keeps its own decisions and payments. Every mandate gets its own copy of the account in the public sandbox, so runs do not interfere.

Five ways to run it, from quick to real

  1. 01

    Watch a scripted scenario

    Needs
    A browser.
    Simulated
    Agent, person, wallet, bank.
    Real
    The Plenipo verifier deciding every call.
  2. 02

    Drive it with Claude

    You talk to the agent; you approve in the sandbox wallet as Maria or Luca.

    Needs
    Claude with a custom connector (the MCP URL on /demo).
    Simulated
    Person, wallet, bank.
    Real
    A real LLM agent choosing what to call, and the verifier.
  3. 03

    Bring your own agent or bank

    Your agent signs calls with its own key; your service verifies them with the library.

    Needs
    Node 22+, npm install plenipo, or the sandbox from the repository (sandbox folder, Docker Compose).
    Simulated
    The remaining sandbox actors.
    Real
    Your code.
  4. 04

    A real wallet implementation

    The walt.id Wallet API presents the PID and approves the mandate, end to end, both as plenipo_mandate and as a TS12 e-mandate (tested on 25 October 2026).

    Needs
    Docker.
    Simulated
    Agent, person, bank and test identity.
    Real
    The walt.id Wallet API and the verifier.
  5. 05In progress

    The EUDI reference wallet

    The EU reference wallet app, with a Plenipo build that shows the mandate on its consent screen and a test PID from the EU test issuer.

    Simulated
    Sandbox bank, fictional people and money.
    Real
    EU reference wallet integration with a test PID.

    Android test build in progress; iOS follows. The sandbox already trusts the EU list of test PID providers.

Each level replaces one simulated part with a real one; the bank's verifier is the same at every level.

Good to know

Nothing is paid
The sandbox money is fictional and the accounts reset every night.
Stop it any time
Revoke or suspend a mandate from the platform; the bank refuses the next call.
What the bank enforces
Actions, counterparties, per-operation and total limits, validity, delegation depth, and revocation, checked on every call.