A new proposal brings fraud prevention and rate limiting primitives to the Universal Commerce Protocol — essential infrastructure for enterprise adoption.
When AI agents start making purchases on behalf of humans, how do merchants know they're not dealing with fraud? How do they rate-limit abusive bots? How do they decide when to require additional verification?
These questions are table stakes for any real commerce system. Without answers, enterprise merchants won't adopt agentic commerce — the risk is too high.
The core insight: There's a difference between completeness (is this checkout structurally valid?) and confidence (can I authorize without friction?). UCP already handles completeness. This proposal adds confidence.
signals ObjectA transport-agnostic container for environment signals that help merchants assess risk:
{
"checkout": {
"id": "chk_123",
"signals": {
"buyer_ip": "203.0.113.42",
"user_agent": "Mozilla/5.0...",
"device_id": "fp_abc123",
"ja4": "t13d1516h2_8daaf6152771_b186095e22b6"
}
}
}
The spec defines four well-known signals:
| Signal | Purpose |
|---|---|
buyer_ip |
Geolocation, reputation scoring, rate limiting |
device_id |
Device fingerprinting for fraud detection |
user_agent |
Client identification, bot detection |
ja4 |
TLS fingerprint for advanced bot detection |
Additional signals can be defined via extensions and negotiated during the platform-business handshake.
hintA non-blocking message type for expressing what signals affect merchant confidence:
{
"type": "hint",
"path": "$.signals.device_id",
"code": "risk",
"content": "Device fingerprint may reduce verification friction"
}
Two hint codes are defined:
risk — Affects fraud prevention and authorization decisionsabuse — Affects rate limiting and bot detectionUnlike error messages that block checkout progression, hint messages are advisory. A checkout can be ready_for_complete while still having hints — the platform can attempt completion, but should expect higher friction (step-up verification, 3DS challenges, etc.) without the requested signals.
| Concern | Question | Mechanism | Blocks Status? |
|---|---|---|---|
| Completeness | Is checkout structurally valid? | error message |
Yes |
| Confidence | Can I authorize without friction? | hint message |
No |
This separation is elegant: validation failures are deterministic (no email = can't complete), while confidence is probabilistic (no device_id = higher probability of step-up, not certainty).
If you're building a platform that integrates with UCP (like Copilot Checkout), this proposal means: