> For the complete documentation index, see [llms.txt](https://developers.ethos.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.ethos.network/api-documentation/api-v2/vouches.md).

# Vouches

## Query vouches with optional filters

> \> ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"paths":{"/vouches":{"post":{"operationId":"vouches-query","summary":"Query vouches with optional filters","description":"> ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"number"}},"subjectUserkeys":{"type":"array","items":{"type":"string"}},"authorProfileIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647}},"subjectProfileIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647}},"subjectAddresses":{"type":"array","items":{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"}},"subjectAttestationHashes":{"type":"array","items":{"type":"string","description":"0x-prefixed 32-byte hex string (bytes32)"}},"archived":{"type":"boolean"},"afterDate":{"type":"string"},"orderBy":{"type":"object","properties":{"balance":{"type":"string","enum":["asc","desc"]},"vouchedAt":{"type":"string","enum":["asc","desc"]},"updatedAt":{"type":"string","enum":["asc","desc"]}},"additionalProperties":false},"duration":{"type":"string"},"limit":{"default":50,"type":"integer","minimum":0,"maximum":100},"offset":{"default":0,"type":"integer","minimum":0,"maximum":2147483647}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"values":{"type":"array","items":{"type":"object","properties":{"authorProfileId":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"subjectProfileId":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"authorUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"profileId":{"anyOf":[{"type":"number"},{"type":"null"}]},"displayName":{"type":"string"},"username":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatarUrl":{"type":"string","format":"uri"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"status":{"type":"string","enum":["ACTIVE","INACTIVE","MERGED"]},"userkeys":{"type":"array","items":{"type":"string"}},"xpTotal":{"type":"number"},"xpStreakDays":{"type":"number"},"xpRemovedDueToAbuse":{"type":"boolean"},"influenceFactor":{"type":"number"},"influenceFactorPercentile":{"type":"number"},"humanVerificationStatus":{"anyOf":[{"type":"string","enum":["REQUESTED","VERIFIED","REVOKED","PENDING"]},{"type":"null"}]},"validatorNftCount":{"type":"number"},"links":{"type":"object","properties":{"profile":{"type":"string","format":"uri"},"scoreBreakdown":{"type":"string","format":"uri"}},"required":["profile","scoreBreakdown"],"additionalProperties":false},"stats":{"type":"object","properties":{"holdingsWei":{"anyOf":[{"type":"integer","format":"int64"},{"type":"null"}],"description":"Total WHUF held across the user’s addresses, in wei. Null: never computed, or last recomputed while the user held no addresses — distinct from a computed balance of 0."},"review":{"type":"object","properties":{"received":{"type":"object","properties":{"negative":{"type":"number"},"neutral":{"type":"number"},"positive":{"type":"number"}},"required":["negative","neutral","positive"],"additionalProperties":false}},"required":["received"],"additionalProperties":false},"vouch":{"type":"object","properties":{"given":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false},"received":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false}},"required":["given","received"],"additionalProperties":false,"description":"@deprecated Native-currency lifetime totals only. Use stats.vouchTotals (per-token). Removed after 2026-10-20."},"vouchTotals":{"minItems":1,"type":"array","items":{"type":"object","properties":{"balance":{"type":"object","properties":{"given":{"type":"integer","format":"int64"},"received":{"type":"integer","format":"int64"}},"required":["given","received"],"additionalProperties":false},"count":{"type":"object","properties":{"given":{"type":"integer","minimum":0,"maximum":9007199254740991},"received":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["given","received"],"additionalProperties":false},"token":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"},{"type":"null"}]},"decimals":{"type":"integer","minimum":0,"maximum":9007199254740991},"id":{"type":"string","enum":["eth","whuf"],"description":"Lowercase token identifier"}},"required":["address","decimals","id"],"additionalProperties":false}},"required":["balance","count","token"],"additionalProperties":false}},"whufGuarantee":{"anyOf":[{"type":"object","properties":{"asOf":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"guaranteedWei":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["active","enrolling","expired"]}},"required":["asOf","expiresAt","guaranteedWei","status"],"additionalProperties":false},{"type":"null"}],"description":"The profile’s WHUF price guarantee, summed across its wallets. Null when the profile holds no guarantee account, whether because the accounting has not reached it yet or because it was not eligible; the price-guarantee endpoint tells those apart. Enrolling coverage is provisional until the token unlocks and fixes it. asOf is when the accounting last changed this profile’s coverage or enrollment — not when it last ran."}},"required":["holdingsWei","review","vouch","vouchTotals","whufGuarantee"],"additionalProperties":false}},"required":["id","profileId","displayName","username","avatarUrl","description","score","status","userkeys","xpTotal","xpStreakDays","xpRemovedDueToAbuse","influenceFactor","influenceFactorPercentile","validatorNftCount","links","stats"],"additionalProperties":false},{"type":"null"}]},"subjectUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"profileId":{"anyOf":[{"type":"number"},{"type":"null"}]},"displayName":{"type":"string"},"username":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatarUrl":{"type":"string","format":"uri"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"status":{"type":"string","enum":["ACTIVE","INACTIVE","MERGED"]},"userkeys":{"type":"array","items":{"type":"string"}},"xpTotal":{"type":"number"},"xpStreakDays":{"type":"number"},"xpRemovedDueToAbuse":{"type":"boolean"},"influenceFactor":{"type":"number"},"influenceFactorPercentile":{"type":"number"},"humanVerificationStatus":{"anyOf":[{"type":"string","enum":["REQUESTED","VERIFIED","REVOKED","PENDING"]},{"type":"null"}]},"validatorNftCount":{"type":"number"},"links":{"type":"object","properties":{"profile":{"type":"string","format":"uri"},"scoreBreakdown":{"type":"string","format":"uri"}},"required":["profile","scoreBreakdown"],"additionalProperties":false},"stats":{"type":"object","properties":{"holdingsWei":{"anyOf":[{"type":"integer","format":"int64"},{"type":"null"}],"description":"Total WHUF held across the user’s addresses, in wei. Null: never computed, or last recomputed while the user held no addresses — distinct from a computed balance of 0."},"review":{"type":"object","properties":{"received":{"type":"object","properties":{"negative":{"type":"number"},"neutral":{"type":"number"},"positive":{"type":"number"}},"required":["negative","neutral","positive"],"additionalProperties":false}},"required":["received"],"additionalProperties":false},"vouch":{"type":"object","properties":{"given":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false},"received":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false}},"required":["given","received"],"additionalProperties":false,"description":"@deprecated Native-currency lifetime totals only. Use stats.vouchTotals (per-token). Removed after 2026-10-20."},"vouchTotals":{"minItems":1,"type":"array","items":{"type":"object","properties":{"balance":{"type":"object","properties":{"given":{"type":"integer","format":"int64"},"received":{"type":"integer","format":"int64"}},"required":["given","received"],"additionalProperties":false},"count":{"type":"object","properties":{"given":{"type":"integer","minimum":0,"maximum":9007199254740991},"received":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["given","received"],"additionalProperties":false},"token":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"},{"type":"null"}]},"decimals":{"type":"integer","minimum":0,"maximum":9007199254740991},"id":{"type":"string","enum":["eth","whuf"],"description":"Lowercase token identifier"}},"required":["address","decimals","id"],"additionalProperties":false}},"required":["balance","count","token"],"additionalProperties":false}},"whufGuarantee":{"anyOf":[{"type":"object","properties":{"asOf":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"guaranteedWei":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["active","enrolling","expired"]}},"required":["asOf","expiresAt","guaranteedWei","status"],"additionalProperties":false},{"type":"null"}],"description":"The profile’s WHUF price guarantee, summed across its wallets. Null when the profile holds no guarantee account, whether because the accounting has not reached it yet or because it was not eligible; the price-guarantee endpoint tells those apart. Enrolling coverage is provisional until the token unlocks and fixes it. asOf is when the accounting last changed this profile’s coverage or enrollment — not when it last ran."}},"required":["holdingsWei","review","vouch","vouchTotals","whufGuarantee"],"additionalProperties":false}},"required":["id","profileId","displayName","username","avatarUrl","description","score","status","userkeys","xpTotal","xpStreakDays","xpRemovedDueToAbuse","influenceFactor","influenceFactorPercentile","validatorNftCount","links","stats"],"additionalProperties":false},{"type":"null"}]}},"required":["authorProfileId","subjectProfileId"],"additionalProperties":{}}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["values","total","limit","offset"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}}}
```

## Get every subject userkey a profile actively vouches for

> Unpaginated, and version-erased — one set, never one per version — bounded by how many vouches one person has authored. Each subject is expanded to all of its userkeys, so a caller can test membership against a user’s full key list. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"paths":{"/vouches/authored-subject-userkeys":{"get":{"operationId":"vouches-authoredSubjectUserkeys","summary":"Get every subject userkey a profile actively vouches for","description":"Unpaginated, and version-erased — one set, never one per version — bounded by how many vouches one person has authored. Each subject is expanded to all of its userkeys, so a caller can test membership against a user’s full key list. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[{"in":"query","name":"profileId","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"userkeys":{"type":"array","items":{}}},"required":["userkeys"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}}}
```

## Get a profile’s active WHUF vouches with their manage-time details

> Unpaginated, and WHUF vouches only — never ETH-staked vouches. Carries the staked amount, author, and the review each vouch was composed with, plus every userkey of each subject so a caller can look a vouch up by whichever identity it holds. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"paths":{"/vouches/authored-details":{"get":{"operationId":"vouches-authoredVouchDetails","summary":"Get a profile’s active WHUF vouches with their manage-time details","description":"Unpaginated, and WHUF vouches only — never ETH-staked vouches. Carries the staked amount, author, and the review each vouch was composed with, plus every userkey of each subject so a caller can look a vouch up by whichever identity it holds. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[{"in":"query","name":"profileId","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"vouches":{"type":"array","items":{"type":"object","properties":{"authorAddress":{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"},"balanceWei":{"type":"string"},"pairedReview":{"oneOf":[{"type":"object","properties":{"linkedReviewId":{"type":"number"},"status":{"type":"string","const":"linked"}},"required":["linkedReviewId","status"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"none"}},"required":["status"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"notIndexed"}},"required":["status"],"additionalProperties":false}],"type":"object"},"subjectUserkey":{},"subjectUserkeys":{"type":"array","items":{}},"vouchId":{"type":"number"}},"required":["authorAddress","balanceWei","pairedReview","subjectUserkey","subjectUserkeys","vouchId"],"additionalProperties":false}}},"required":["vouches"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}}}
```

## Get the profiles holding an active vouch toward a profile

> Unpaginated, and version-erased — one set of authors, never one per version. Authors without an Ethos profile are omitted. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"paths":{"/vouches/incoming-author-profile-ids":{"get":{"operationId":"vouches-incomingVouchAuthorProfileIds","summary":"Get the profiles holding an active vouch toward a profile","description":"Unpaginated, and version-erased — one set of authors, never one per version. Authors without an Ethos profile are omitted. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[{"in":"query","name":"profileId","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"authorProfileIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647}}},"required":["authorProfileIds"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}}}
```

## Get the active vouch the caller already holds on a subject

> Answers for the pair, not for one encoding: every wallet the caller holds is checked against every userkey of the subject, across both vouch versions. The author is always the authenticated caller, so the answer only ever describes the caller’s own vouch. Use it before offering to vouch — a non-\`none\` answer means the V2 write paths that run the pair rule would refuse a new vouch, and the existing vouch is the one to increase or convert. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer"}},"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.UNAUTHORIZED":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Authorization not provided error (401)","description":"The error information"},"error.FORBIDDEN":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Insufficient access error (403)","description":"The error information"},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}},"paths":{"/vouches/pair-state":{"get":{"operationId":"vouches-pairState","summary":"Get the active vouch the caller already holds on a subject","description":"Answers for the pair, not for one encoding: every wallet the caller holds is checked against every userkey of the subject, across both vouch versions. The author is always the authenticated caller, so the answer only ever describes the caller’s own vouch. Use it before offering to vouch — a non-`none` answer means the V2 write paths that run the pair rule would refuse a new vouch, and the existing vouch is the one to increase or convert. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[{"in":"query","name":"subjectUserkey","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"vouchId":{"type":"integer","minimum":0,"maximum":9007199254740991},"kind":{"type":"string","const":"v1"}},"required":["vouchId","kind"],"additionalProperties":false},{"type":"object","properties":{"vouchId":{"type":"integer","minimum":0,"maximum":9007199254740991},"kind":{"type":"string","const":"v2"}},"required":["vouchId","kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"none"}},"required":["kind"],"additionalProperties":false}],"type":"object"}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}}}
```

## Check whether the caller has any protected vouches

> Whether any of your vouches were frozen when WHUF started. Cheaper than listing them: answers from the snapshot alone, without resolving each vouch. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer"}},"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.UNAUTHORIZED":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Authorization not provided error (401)","description":"The error information"},"error.FORBIDDEN":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Insufficient access error (403)","description":"The error information"},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}},"paths":{"/vouches/protected/exists":{"get":{"operationId":"vouches-hasProtectedVouches","summary":"Check whether the caller has any protected vouches","description":"Whether any of your vouches were frozen when WHUF started. Cheaper than listing them: answers from the snapshot alone, without resolving each vouch. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[{"in":"query","name":"profileId","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"hasProtectedVouches":{"type":"boolean"}},"required":["hasProtectedVouches"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}}}
```

## Get the caller’s protected vouches

> List the vouches that you made before WHUF started. You have not converted these vouches to WHUF yet. Cursor-paginated, newest vouch id first. Each item carries two amounts: \`stakedWei\` is the amount frozen at the snapshot, and \`liveBalanceWei\` is the current V1 balance. You can convert the vouch to WHUF, or vouch again if you already removed it. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer"}},"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.UNAUTHORIZED":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Authorization not provided error (401)","description":"The error information"},"error.FORBIDDEN":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Insufficient access error (403)","description":"The error information"},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}},"paths":{"/vouches/protected":{"get":{"operationId":"vouches-protectedVouches","summary":"Get the caller’s protected vouches","description":"List the vouches that you made before WHUF started. You have not converted these vouches to WHUF yet. Cursor-paginated, newest vouch id first. Each item carries two amounts: `stakedWei` is the amount frozen at the snapshot, and `liveBalanceWei` is the current V1 balance. You can convert the vouch to WHUF, or vouch again if you already removed it. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[{"in":"query","name":"profileId","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"required":true},{"in":"query","name":"limit","schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"cursor","schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"values":{"type":"array","items":{"type":"object","properties":{"authorAddress":{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"},"liveBalanceWei":{"type":"string"},"state":{"type":"string","enum":["live","archived"]},"stakedWei":{"type":"string"},"subjectUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"profileId":{"anyOf":[{"type":"number"},{"type":"null"}]},"displayName":{"type":"string"},"username":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatarUrl":{"type":"string","format":"uri"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"status":{"type":"string","enum":["ACTIVE","INACTIVE","MERGED"]},"userkeys":{"type":"array","items":{"type":"string"}},"xpTotal":{"type":"number"},"xpStreakDays":{"type":"number"},"xpRemovedDueToAbuse":{"type":"boolean"},"influenceFactor":{"type":"number"},"influenceFactorPercentile":{"type":"number"},"humanVerificationStatus":{"anyOf":[{"type":"string","enum":["REQUESTED","VERIFIED","REVOKED","PENDING"]},{"type":"null"}]},"validatorNftCount":{"type":"number"},"links":{"type":"object","properties":{"profile":{"type":"string","format":"uri"},"scoreBreakdown":{"type":"string","format":"uri"}},"required":["profile","scoreBreakdown"],"additionalProperties":false},"stats":{"type":"object","properties":{"holdingsWei":{"anyOf":[{"type":"integer","format":"int64"},{"type":"null"}],"description":"Total WHUF held across the user’s addresses, in wei. Null: never computed, or last recomputed while the user held no addresses — distinct from a computed balance of 0."},"review":{"type":"object","properties":{"received":{"type":"object","properties":{"negative":{"type":"number"},"neutral":{"type":"number"},"positive":{"type":"number"}},"required":["negative","neutral","positive"],"additionalProperties":false}},"required":["received"],"additionalProperties":false},"vouch":{"type":"object","properties":{"given":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false},"received":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false}},"required":["given","received"],"additionalProperties":false,"description":"@deprecated Native-currency lifetime totals only. Use stats.vouchTotals (per-token). Removed after 2026-10-20."},"vouchTotals":{"minItems":1,"type":"array","items":{"type":"object","properties":{"balance":{"type":"object","properties":{"given":{"type":"integer","format":"int64"},"received":{"type":"integer","format":"int64"}},"required":["given","received"],"additionalProperties":false},"count":{"type":"object","properties":{"given":{"type":"integer","minimum":0,"maximum":9007199254740991},"received":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["given","received"],"additionalProperties":false},"token":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"},{"type":"null"}]},"decimals":{"type":"integer","minimum":0,"maximum":9007199254740991},"id":{"type":"string","enum":["eth","whuf"],"description":"Lowercase token identifier"}},"required":["address","decimals","id"],"additionalProperties":false}},"required":["balance","count","token"],"additionalProperties":false}},"whufGuarantee":{"anyOf":[{"type":"object","properties":{"asOf":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"guaranteedWei":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["active","enrolling","expired"]}},"required":["asOf","expiresAt","guaranteedWei","status"],"additionalProperties":false},{"type":"null"}],"description":"The profile’s WHUF price guarantee, summed across its wallets. Null when the profile holds no guarantee account, whether because the accounting has not reached it yet or because it was not eligible; the price-guarantee endpoint tells those apart. Enrolling coverage is provisional until the token unlocks and fixes it. asOf is when the accounting last changed this profile’s coverage or enrollment — not when it last ran."}},"required":["holdingsWei","review","vouch","vouchTotals","whufGuarantee"],"additionalProperties":false}},"required":["id","profileId","displayName","username","avatarUrl","description","score","status","userkeys","xpTotal","xpStreakDays","xpRemovedDueToAbuse","influenceFactor","influenceFactorPercentile","validatorNftCount","links","stats"],"additionalProperties":false},{"type":"null"}]},"subjectUserkey":{},"vouchId":{"type":"number"},"vouchedAt":{"type":"number"}},"required":["authorAddress","liveBalanceWei","state","stakedWei","subjectUser","subjectUserkey","vouchId","vouchedAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"number"},{"type":"null"}]},"total":{"type":"number"}},"required":["values","nextCursor","total"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}}}
```

## Get mutual vouchers for a viewer and target profile

> Users the viewer vouches for who also vouch for the target. Scoped to WHUF vouches. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"paths":{"/vouches/mutual-vouchers":{"get":{"operationId":"vouches-mutualVouchers","summary":"Get mutual vouchers for a viewer and target profile","description":"Users the viewer vouches for who also vouch for the target. Scoped to WHUF vouches. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"parameters":[{"in":"query","name":"viewerProfileId","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"required":true},{"in":"query","name":"targetProfileId","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"required":true},{"in":"query","name":"limit","schema":{"default":50,"type":"integer","minimum":0,"maximum":50}},{"in":"query","name":"offset","schema":{"default":0,"type":"integer","minimum":0,"maximum":2147483647}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"values":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"profileId":{"anyOf":[{"type":"number"},{"type":"null"}]},"displayName":{"type":"string"},"username":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatarUrl":{"type":"string","format":"uri"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"score":{"type":"number"},"status":{"type":"string","enum":["ACTIVE","INACTIVE","MERGED"]},"userkeys":{"type":"array","items":{"type":"string"}},"xpTotal":{"type":"number"},"xpStreakDays":{"type":"number"},"xpRemovedDueToAbuse":{"type":"boolean"},"influenceFactor":{"type":"number"},"influenceFactorPercentile":{"type":"number"},"humanVerificationStatus":{"anyOf":[{"type":"string","enum":["REQUESTED","VERIFIED","REVOKED","PENDING"]},{"type":"null"}]},"validatorNftCount":{"type":"number"},"links":{"type":"object","properties":{"profile":{"type":"string","format":"uri"},"scoreBreakdown":{"type":"string","format":"uri"}},"required":["profile","scoreBreakdown"],"additionalProperties":false},"stats":{"type":"object","properties":{"holdingsWei":{"anyOf":[{"type":"integer","format":"int64"},{"type":"null"}],"description":"Total WHUF held across the user’s addresses, in wei. Null: never computed, or last recomputed while the user held no addresses — distinct from a computed balance of 0."},"review":{"type":"object","properties":{"received":{"type":"object","properties":{"negative":{"type":"number"},"neutral":{"type":"number"},"positive":{"type":"number"}},"required":["negative","neutral","positive"],"additionalProperties":false}},"required":["received"],"additionalProperties":false},"vouch":{"type":"object","properties":{"given":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false},"received":{"type":"object","properties":{"amountWeiTotal":{"type":"integer","format":"int64"},"count":{"type":"number"}},"required":["amountWeiTotal","count"],"additionalProperties":false}},"required":["given","received"],"additionalProperties":false,"description":"@deprecated Native-currency lifetime totals only. Use stats.vouchTotals (per-token). Removed after 2026-10-20."},"vouchTotals":{"minItems":1,"type":"array","items":{"type":"object","properties":{"balance":{"type":"object","properties":{"given":{"type":"integer","format":"int64"},"received":{"type":"integer","format":"int64"}},"required":["given","received"],"additionalProperties":false},"count":{"type":"object","properties":{"given":{"type":"integer","minimum":0,"maximum":9007199254740991},"received":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["given","received"],"additionalProperties":false},"token":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"},{"type":"null"}]},"decimals":{"type":"integer","minimum":0,"maximum":9007199254740991},"id":{"type":"string","enum":["eth","whuf"],"description":"Lowercase token identifier"}},"required":["address","decimals","id"],"additionalProperties":false}},"required":["balance","count","token"],"additionalProperties":false}},"whufGuarantee":{"anyOf":[{"type":"object","properties":{"asOf":{"type":"string"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"guaranteedWei":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["active","enrolling","expired"]}},"required":["asOf","expiresAt","guaranteedWei","status"],"additionalProperties":false},{"type":"null"}],"description":"The profile’s WHUF price guarantee, summed across its wallets. Null when the profile holds no guarantee account, whether because the accounting has not reached it yet or because it was not eligible; the price-guarantee endpoint tells those apart. Enrolling coverage is provisional until the token unlocks and fixes it. asOf is when the accounting last changed this profile’s coverage or enrollment — not when it last ran."}},"required":["holdingsWei","review","vouch","vouchTotals","whufGuarantee"],"additionalProperties":false}},"required":["id","profileId","displayName","username","avatarUrl","description","score","status","userkeys","xpTotal","xpStreakDays","xpRemovedDueToAbuse","influenceFactor","influenceFactorPercentile","validatorNftCount","links","stats"],"additionalProperties":false}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"}},"required":["values","total","limit","offset"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information"},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information"},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}}}
```

## GET /vouches/fees

> Get vouch creation fees

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"paths":{"/vouches/fees":{"get":{"operationId":"vouches-fees","summary":"Get vouch creation fees","tags":["vouches"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"entryDonationFeeBasisPoints":{"type":"integer","format":"int64"},"entryProtocolFeeBasisPoints":{"type":"integer","format":"int64"},"entryVouchersPoolFeeBasisPoints":{"type":"integer","format":"int64"},"exitFeeBasisPoints":{"type":"integer","format":"int64"}},"required":["entryDonationFeeBasisPoints","entryProtocolFeeBasisPoints","entryVouchersPoolFeeBasisPoints","exitFeeBasisPoints"],"additionalProperties":false}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}}}
```

## Get V2 vouch entry/exit fee bps

> Linear with amount: \`fee = amount \* entryFeeBps / 10000\`. Also surfaces the immutable payment token address and its EIP-712 domain so frontends can build permits without reading those from chain. Amount-dependent fees (previewVouchFee, reviewPrice) are intentionally NOT cached — read them live. Cached for 12h. > ⚠️ \*\*Warning:\*\* This is a beta endpoint. It is \*\*not guaranteed to be stable\*\* and may change or break without notice.

```json
{"openapi":"3.1.0","info":{"title":"Ethos API","version":"v2"},"tags":[{"name":"vouches"}],"servers":[{"url":"https://api.ethos.network/api/v2"}],"paths":{"/vouches/v2/fees":{"get":{"operationId":"vouches-feesV2","summary":"Get V2 vouch entry/exit fee bps","description":"Linear with amount: `fee = amount * entryFeeBps / 10000`. Also surfaces the immutable payment token address and its EIP-712 domain so frontends can build permits without reading those from chain. Amount-dependent fees (previewVouchFee, reviewPrice) are intentionally NOT cached — read them live. Cached for 12h. > ⚠️ **Warning:** This is a beta endpoint. It is **not guaranteed to be stable** and may change or break without notice.","tags":["vouches"],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"entryFeeBps":{"type":"integer","format":"int64"},"exitFeeBps":{"type":"integer","format":"int64"},"minimumVouchAmount":{"type":"integer","format":"int64"},"maximumVouchAmount":{"type":"integer","format":"int64"},"paymentToken":{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"},"paymentTokenDomain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer","format":"int64"},"verifyingContract":{"type":"string","description":"Ethereum address (0x-prefixed, 20 bytes)"}},"required":["name","version","chainId","verifyingContract"],"additionalProperties":false}},"required":["entryFeeBps","exitFeeBps","minimumVouchAmount","maximumVouchAmount","paymentToken","paymentTokenDomain"],"additionalProperties":false}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message"},"code":{"type":"string","description":"The error code"},"issues":{"description":"An array of issues that were responsible for the error","type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information"}}}}
```
