Authentication errors
401 Unauthorized
Cause: Missing or invalid API key.- Check your key is set:
zam config show - Verify the key works:
zam api-keys list - If expired, create a new one:
zam api-keys create - If you lost all keys, recover your account:
zam wallet recover
403 Forbidden — insufficient scope
Cause: Your API key doesn’t have the scope required for this operation.| Operation | Required scope |
|---|---|
| Activate a listing | order:create |
| View orders | order:read |
| Create a provider | provider:create |
| Manage listings | listing:create, listing:update, etc. |
| Manage API keys | api_key:create, api_key:read, etc. |
Order errors
400 — input validation failed
Cause: YourrequestBody doesn’t match the listing’s inputSchema.
422 — no run contract
Cause: The listing exists but has no endpoint configured. Fix: This listing can’t be activated. Choose a different listing, or contact the seller.429 — rate limit exceeded
Cause: The seller has set invocation limits on their provider and the limit has been reached. Fix: Wait and try again later. The seller controls these limits.Provider creation errors
Review rejection — endpoint unreachable
/run endpoint during review. ZAM sends a HEAD request (falling back to GET) to verify reachability.
Fix: Your /run endpoint must respond to HEAD and GET with a 200 status:
Review rejection — HTTPS required
Cause: Your endpoint URL useshttp:// instead of https://.
Fix: Deploy to a platform that provides HTTPS (Cloudflare Workers, Vercel, etc.), or add an SSL certificate.
Review rejection — content flagged
Cause: Automated content screening flagged your provider’s title or description. Fix: CheckreviewRejectionReason for details:
Invalid contract format
/contract endpoint returns the wrong price format.
Fix: Use the correct format:
{"amount": 100, "unit": "cents"}— wrong fields- Missing
currency: "USD"— required
Signing secret errors
Missing ZAM headers (401)
Cause: A request reached your service withoutX-ZAM-Signature and X-ZAM-Payload headers.
Possible reasons:
- Someone is calling your endpoint directly (not through ZAM)
- The provider doesn’t have a signing secret yet
Invalid signature (401)
Cause: The HMAC signature doesn’t match. Possible reasons:- Wrong signing secret in your environment
- Secret was rotated but your service still has the old one
Request timestamp expired
Cause: The request is older than 5 minutes (defaultmaxAgeSeconds in zam-verify).
Possible reasons: Your server’s clock is significantly out of sync, or a request was replayed.
Fix: Sync your server’s clock. If you need a longer window, configure maxAgeSeconds:
CLI errors
”No API key configured”
Fix:“Challenge not found or already used”
Cause: The proof-of-work challenge expired (60-second TTL) or was already used. Fix: Runzam wallet create again — it fetches a fresh challenge.