Privacy-firstsecure communication
Enable communication between people, business and AI agents without exposing identities. End-to-end encrypted channels built on DIDComm and open standards: privacy by default, trust by cryptography.
Enable communication between people, business and AI agents without exposing identities. End-to-end encrypted channels built on DIDComm and open standards: privacy by default, trust by cryptography.
The hidden costs of centralised messaging platforms
Identity Exposure at First Contact
Email, phone, messaging platforms
Sharing your email or phone number to connect means giving away your identity before trust is established.
Metadata Harvesting
EU enforcement data 2024
Who you talk to, when, and how often: metadata reveals your network, patterns, and relationships even when messages are encrypted.
Platform Dependency
Enterprise messaging survey 2025
We built our AI agent network on Vendor X. Now switching would mean re-implementing every integration.
No Identity Verification
Standard messaging protocols
Email says it's from your bank. Is it? Phone number looks right. Is it? No way to verify identity without centralised trust.
Centralised Message Routing
WhatsApp, Slack, Teams architecture
Every message flows through vendor servers. They can read metadata, throttle access, or shut you down entirely.
Fragmented AI Communication
AI agent ecosystem 2026
Your AI assistant can't securely talk to other agents. No standard protocol, no interoperability, no trust layer.
Everything you need to build secure, private communication
Establish secure connections using passphrases or QR codes, no emails, phone numbers, or personal identifiers required.
Customers and partners connect without sharing sensitive identifiers. Reduce compliance risk from the first touchpoint.
Built on the DIDComm v2.1 protocol, it ensures messages are end-to-end encrypted between the sender and recipient.
With zero‑knowledge message routing, your conversations remain fully private, no third‑party access, no hidden data extraction.
Support group and broadcast messaging patterns with encrypted group channels. Orchestrate workflows across people, systems, and AI agents without centralized control.
Ideal for supply chains, healthcare networks, partner ecosystems, and multi‑agent systems where trust and confidentiality are critical.
Run your own DIDComm Mediator on your infrastructure using our open‑source implementation. Deploy via AWS Marketplace with one click, or choose a fully managed option.
Move seamlessly between self‑hosted and managed deployments without changing your application code.
Exchange W3C Verifiable Credentials over encrypted channels. Request proof of identity, authorisation, or attestations before establishing trust.
Verify who you're communicating with using cryptographic proofs, without relying on a central authority needed; trust is mathematical.
Enable secure discovery and communication between AI agents, assistants, and autonomous systems.
Build AI agent marketplaces, autonomous supply chain networks, or intelligent customer service ecosystems with built-in trust.
Built on DIDComm v2.1 protocol. Fully interoperable with any standards-compliant system.
Future‑proof your communication stack with open standards that evolve with the ecosystem, not a single vendor.
GDPR, CCPA, HIPAA compliance built into the architecture. Minimise PII collection, enable data portability, and provide cryptographic audit trails.
Enable autonomous agents to discover, connect, and transact securely. Build marketplaces, supply chain networks, or service ecosystems without centralised control.
Own your infrastructure or switch providers without rewriting code. Open standards mean you control costs, data residency, and vendor relationships.
Initialise Meeting Place SDK, deploy a Mediator, and establish an encrypted channel in minutes. No cryptography expertise required.
One-click AWS Marketplace deploy or self-host open-source Mediator. Run on your infrastructure without vendor dependencies.
Meeting Place SDK in Dart (Flutter), with TypeScript and Rust coming soon. Build for mobile, web, backend, or embedded systems.
| Category | Traditional Messaging | Affinidi Messaging |
|---|---|---|
| Connection Discovery | Share email or phone number to connect | Passphrase or QR code discovery, with no PII |
| Identity Exposure | Personal identifiers required by default | Privacy‑first connections without revealing identity |
| Message Encryption | TLS in transit; provider can access content | End-to-end DIDComm encryption |
| Metadata Privacy | Provider can observe communication patterns | Mediator cannot decrypt or correlate messages |
| Identity Verification | Trust centralized directories and accounts | Cryptographic proof using Verifiable Credentials (VCs) |
| Infrastructure Control | Vendor-hosted only | Self-host or fully managed, your choice |
| AI Agent Support | No standard protocol | Built for agent-to-agent communication |
| Vendor Lock-In | Proprietary APIs and data formats | Open standards (DIDComm, W3C DIDs) |
| Compliance Posture | PII storage, consent and audits required | GDPR/HIPAA by design, minimal PII |
| Interoperability | Restricted to a single ecosystem | Works with any DIDComm compliant system |
From SDK setup to encrypted DIDComm messaging in minutes
# pubspec.yaml
dependencies:
didcomm: ^2.3.3
ssi: ^3.6.0 import 'package:didcomm/didcomm.dart';
import 'package:ssi/ssi.dart';
// Initialize DID manager with key store
final didManager = DidKeyManager(
wallet: PersistentWallet(InMemoryKeyStore()),
store: InMemoryDidStore(),
);
// Generate key and create DID
await wallet.generateKey(keyId: keyId, keyType: KeyType.p256);
await didManager.addVerificationMethod(keyId);
final didDoc = await didManager.getDidDocument(); // Create and encrypt message
final message = PlainTextMessage(
id: Uuid().v4(),
type: Uri.parse('https://example.com/protocols/1.0'),
from: clientDid, to: [recipientDid],
body: {'msg': 'Hello, secure world!'},
);
final signer = await didManager.getSigner(clientDid);
final encrypted = await DidcommMessage.packIntoSignedAndEncryptedMessages(
message, keyType: keyType,
recipientDidDocuments: [recipientDidDoc], signer: signer,
);
// Send via mediator
await mediatorClient.sendMessage(encrypted);