The fundamental architectural difference between API keys (shared secrets) and ACIs (cryptographic identity).
An API key is a shared secret. You generate a random string, give it to a client, and the client sends it with every request. If the key matches, the request is authenticated.
This model was designed in 2000 when machines talked to centralized servers. It breaks down when machines talk to each other at scale.
API keys were never designed for M2M at scale. They worked when you had 5 microservices. They break when you have 500.
With ACIs, each machine gets a DID (cryptographic identity). No shared secrets. No rotation schedule. No "which key belongs to which service?" spreadsheet. When you revoke a DID, exactly one agent stops working. Everything else keeps running.
The rate limiting advantage: 1,000 workers with API keys = 1 shared quota. 1,000 workers with DIDs = 1,000 separate quotas. Your throughput scales linearly.
const conn = await connect('payments') await conn.value.agent.send({ to, payload })
How identity-based M2M authentication works under the hood. Benchmarks, comparisons, and migration guides.
Read White Paper →