{"name":"AgentOath Registry","service":"agentoath-registry","version":"0.1.0","api_version":"v1","did_namespace":"did:agentoath","did_derivation":"did:agentoath:<sha256-hex of raw 32-byte Ed25519 public key>","signing":{"algorithm":"Ed25519","public_key_formats":["base64url(raw 32 bytes)","base64","hex","SPKI PEM"],"signature_formats":["base64url(raw 64 bytes)","base64","hex"],"canonicalization":"JSON with sorted keys, separators (\",\", \":\"), UTF-8, unicode unescaped — identical to Python json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(\",\", \":\"))","sign_base":"canonical JSON of receipt minus {from_signature, to_counter_signature}","counter_base":"canonical JSON of receipt minus {to_counter_signature} (includes from_signature)","rating_rule":"rating must be a JSON integer 0-10 (non-integer floats break cross-language canonical bytes)","field_rules":"metadata must always be present (use {} when empty); optional fields must be omitted entirely when empty — present-but-empty fields are rejected because they change the signed bytes"},"receipt_fields":["receipt_id","from_agent","to_agent","action","rating","description","timestamp","metadata","from_signature","to_counter_signature"],"auth":{"scheme":"X-API-Key header","required_for":["POST /agents/register","POST /receipts/publish","admin endpoints (Bearer)"],"public":["GET /health","GET /registry","GET /agents/{did}","GET /agents/{did}/card","GET /agents/{did}/status","GET /agents/{did}/receipts","GET /receipts/{receipt_id}","POST /receipts/verify"]}}