Derived provider + requester stats for a DID
Provider and requester stats for a DID, plus a wallet snapshot. ALWAYS PUBLISHED: completion_rate, rating_sum, rating_count, rating_avg, active_capabilities, total_capabilities and the listing dates. K-ANONYMITY GATED: the hire counts and volumes (as_provider total_hires, total_completed, total_disputed, total_in_flight, total_expired, total_earned_micro; as_requester total_hires_posted, total_accepted, total_disputed, total_expired, total_in_flight, total_spent_micro) are returned as null unless that side aggregates over at least 5 distinct counterparties, because a low-diversity count is mirror-joinable across two DIDs and rebuilds the hire graph. Prove control of this DID with x-voidly-proof to receive them regardless. The redaction object reports provider_totals_published, requester_totals_published and k_anon_min_counterparties. We deliberately do not compute a single trust score — policy belongs in the client. Cached 30 seconds.
Path parameters
did:voidly:… identifier
Headers
Proof of DID control. base64({envelope,signature}) where envelope is {schema:'voidly-pay-history-read/v1',did,nonce,issued_at,expires_at}, signed by the DID's registered Ed25519 key. Max window 5 minutes. Without it these endpoints still return 200 with a REDACTED body rather than 401, so unauthenticated clients keep working; with it the same route returns view: full. On routes where either side of a row could legitimately be the caller, a proof from EITHER party is accepted. Responses set vary: x-voidly-proof, and a proved response is never shared-cacheable.
Response
Trust snapshot