I've built and designed several things that come together to solve this. It's real and can be used now.
The first thing is a proof-of-person check and an attestation, like a stamp in your wallet. Zipwire Attest will do that and since we have key-values from the ID doc, we attest to a Merkle root, too, and link the attestations.
Next comes an attestation from your human-attested wallet to your bot's wallet. I've not gotten around to making a UI for it yet, but this is easily done from Ethereum Attestation Service using the IsDelegate schema (on Base).
Then you can make a special JWT. This is where ProofPack comes in. It's an open source data type and lib for reading and writing proofs/verifiable data exchange. The proof (JSON or JWT) has a Merkle tree of data and a 'pointer' to an attestation.
You can make a JWT via Zipwire's API and choose any key-values to reveal, like `nationality`.
You'd then present it in a header and then the API you're calling can be like, 'Wass iss dis?' because nobody supports it, yet. But if an API dev wanted to, the ProofPack lib can read and check the JWT, and walk up the delegation attestation chain, so one agent can delegate to a sub-agent, and check the human and the claims/Merkle hash.
https://docs.zipwire.io/tools-and-integrations/proofpack-age... https://github.com/zipwireapp/ProofPack