--- title: API --- # API ## Introduction Omnid aggregates multiple on/off-chain ***sources of reputation*** into an overall social graph where each source counts towards some points in building the overall TrustScore for any Ethereum Address. This score is continuously evolving. As more platforms get integrated, the weights and the score will update too. ## Current Integrations and Score Weightage | # | Integration | Key | Factors and Score | | - |--------------------- |---- | --- | | 1 | [Aave](https://aave.com) | `aave` | - totalCollateralETH
- totalDebtETH
- availableBorrowsETH
- currentLiquidationThreshold
- ltv
- healthFactor
Across: Main Market, AMM Market, Polygon Market, Avalanche Market | | 2 | Age | `age` | Age of Ethereum Address in days on,
- Ethereum Mainnet
- Polygon Mainnet | | 3 | [ArcX](http://arcx.money/) | `arcx` | - Points for each indexed ArcX Score | | 4 | [Async Art](https://async.art/) | `asyncart` | - NFTs Sold
- Average Sale Value | | 5 | [Boardroom](https://boardroom.info/) | `boardroom` |- Number of Votes given
- DAOs participated In
- Voting History | | 6 | [BrightId](https://www.brightid.org/) | `brightid` | 37 Points for Verification | | 7 | [Celo Verified Attestations](https://docs.celo.org/validator-guide/attestation-service#:~:text=What%20is%20an%20Attestation%20Service,Celo%20account%2C%20securely%20and%20privately.) | `celo` | 1 Point for each valid Attestation | | 8 | [Coinvise](http://coinvise.co/) | `coinvise` |- Tokens Created(a) : (a)^0.5 Points
- NFTs Created(b) : (b)^0.5 Points
- Total NFTs Sold(c): c Points
- Airdrops Sent(d): d Points
- Multisends(e): e Points
- Liquidity Pools Created(f): f Points | | 9 | [Context](http://context.app/) | `context` |- Followers
- Folowing | | 10 | [Coordinape](http://coordinape.com/) | `coordinape` | Number of teammates. | | 11 | [CryptoScamDB](https://cryptoscamdb.org/) | `cryptoscamdb` | -20 Points for being flagged | | 12 | [Cyberconnect](https://cyberconnect.me/) | `cyberconnect` | - Followers
- Following
- Social
- Display Name | | 13 | [Dapplist](https://thedapplist.com/) | `dapplist` |- Dapps Hunted
- XP | | 14 | [DeBank](https://debank.com/ranking) | `debank` | - base_score
- rank
- social_coefficient
- social_score
- total_score | | 15 | [DeepDAO](https://deepdao.io/) | `deepdao` | - score
- rank
- relativeScore
- daos
- proposals
- votes | | 16 | [ENS](https://ens.domains/) | `ens` |10 Points for Reverse Resolution to your Address. | | 17 | [Etherscan](http://etherscan.io/) | `etherscan` |Flagged Labels like Akropolis Hacker | | 18 | [Forta](forta.network) | `forta` |- Number of 'HIGH', 'MEDIUM', 'CRITICAL' Alerts | | 19 | [Foundation](https://foundation.app/) | `foundation` | - NFTs Sold
- Average Sale Value
- Followers
- Following | | 20 | [Gitcoin](https://gitcoin.co/) | `gitcoin` | 10 Points for funding a Grant. | | 21 | [Hive.one](https://hive.one/) | `hiveone` | Points for,
- Attention Score
-Insider Score | | 22 | [Idena](https://www.idena.io/) | `idena` | 1 Point for Verification | | 23 | [Karma Protocol](https://showkarma.xyz/) | `karma` |- Karma Score | | 24 | [Known Origin](https://knownorigin.io/) | `knownorigin` |- NFTs Sold
- Average Sale Value | | 25 | [Lens Protocol](https://lens.dev/) | `lens` |- Lens Profile | | 26 | [Metagame](https://wiki.metagame.wtf/) | `metagame` |Season XP ** 0.5 | | 27 | [MyEtherWallet](https://github.com/MyEtherWallet/ethereum-lists/blob/master/src/addresses/addresses-darklist.json) | `mew` | -20 on being Blacklisted | | 28 | [Mirror](https://mirror.xyz/) | `mirror` |10 Points for being a writer on Mirror | | 29 | [POAP](https://poap.xyz/) | `poap` |1 Point for Each POAP Received | | 30 | [Proof of Humanity](https://proofofhumanity.id/) | `poh` |8 Points for Verification | | 31 | [Proof of Personhood](https://proofofpersonhood.com/) | `pop` | - Price of Forgery
- Personhood Score | | 32 | [Polygon Ecosystem](https://analytics.polygon.technology/score/docs) | `polygon` |Relative Score out of 100 based on,
- Number of Transactions
- Net Volume Transacted
- Retention | | 33 | [Project Galaxy](https://galaxy.eco/) | `projectgalaxy` |1 Point for each Eligible Credential | | 34 | [RabbitHole](https://rabbithole.gg/) | `rabbithole` |- Points equal to the Levels you cross on RabbitHole.
- TaskIDs of the tasks Completed | | 35 | [Rarible](https://rarible.com/) | `rarible` |- Total NFTs Sold
- Total NFTs Created
- Total NFTs Owned
- Average Sale Value
- Followers
- Following | | 36 | [RSS3](https://rss3.io/) | `rss3` | - Profile
- Backlinks
- Accounts
- Links | | 37 | [Showtime](https://showtime.io) |`showtime` | - Followers
- Following | | 38 | [SuperRare](https://superrare.com/) |`superrare` | - NFTs Sold
- Average Sale Value
- Followers
- Following | | 39 | [Unipass](https://unipass.id/) | `unipass` | Points for Level | | 40 | [Uniswap Sybil](https://sybil.org/) | `uniswap` |10 Points for Verification | | 41 | [Unstoppable Domains](https://unstoppabledomains.com/) | `unstoppable` |10 Points for Reverse Reslution to your Address. | | 42 | [Yup](https://yup.io/) | `yup` | - Yup Score | | 43 | [Zapper](https://zapper.fi/) | `zapper` |- Following
- Followers
- xp
- zp | 44 | [Zora](https://zora.co/) | `zora` |- Number of NFTs Sold
- Average Sale Value | Upcoming, Toucan's Carbon Offsets. ## Integration You can add a `noCache=true` query paramter to manually rebuild and cache the Social Graph anytime. Otherwise our indexers update your score every 8 hours. ### Querying TrustScore API Request format, ```html https://theconvo.space/api/identity?address=&apikey= ``` Example 1, ```html https://theconvo.space/api/identity?address=vitalik.eth&apikey= ```
View Response ```json { "_id":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "_mod":1637202971089432300, "asyncart":{ "totalCountSold":0, "totalAmountSold":0 }, "brightId":false, "celo":{ "attestations":0 }, "coinvise":{ "tokensCreated":0, "nftsCreated":0, "totalCountSold":0, "totalAmountSold":0, "totalPoolTvl":0, "totalPoolCount":0, "multisendCount":0, "airdropCount":0 }, "coordinape":{}, "cryptoScamDb":false, "cyberconnect":{ "displayName":"", "address":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "followingCount":0, "followerCount":610, "social":{ "twitter":"" } }, "deepdao":0, "ens":"vitalik.eth", "foundation":{ "totalCountSold":0, "totalAmountSold":0, "followerCount":0, "followingCount":0 }, "gitcoin":{ "funder":true }, "idena":false, "knownorigin":{ "totalCountSold":0, "totalAmountSold":0 }, "mirror":false, "poap":46, "poh":false, "polygon":{ "Score100":0 }, "rabbitHole":{ "level":1, "tasksCompleted":[ "UNI_V2_SWAP", "GNOSIS_SAFE_OWNER" ] }, "rarible":{ "totalCountSold":0, "totalAmountSold":0, "ownershipsWithStock":0, "itemsCreated":68, "ownerships":246, "hides":0, "followers":29, "following":0, "likes":0 }, "score":56, "showtime":{}, "signature":"0x2957611d54f484111b74122da81c419cb3524fdba35ac93286cc919d5585e6de2e6d225e681033837527a006c2464062f44b20b138fc516cc227f0868dfd786a1c", "signatureAddress":"0xCCcccCcC54317EE02C2dBfdD832a67C7acD28e06", "success":true, "superrare":{ "totalCountSold":0, "totalAmountSold":0, "following":0, "followers":0 }, "uniswapSybil":false, "unstoppableDomains":false, "zora":{ "totalCountSold":0, "totalAmountSold":0 }, "rss3":{ "profile":{}, "backlinks":[], "accounts":[], "links":[] }, "aave":{ "totalHf":0, "mainMarket":{ "healthFactor":false }, "ammMarket":{ "healthFactor":false }, "polygonMarket":{ "healthFactor":false }, "avalancheMarket":{ "healthFactor":false } }, "context":{ "followerCount":13, "followingCount":null }, "age":2266, "arcx":{ "totalScore":0, "details":{} }, "boardroom":{ "totalVotes":0, "daos":[], "votes":[] } } ```
Example 2, ```html https://theconvo.space/api/identity?address=0xD665afb9A4019a8c482352aaa862567257Ed62CF&apikey= ```
View Response ```json { "_id":"0xD665afb9A4019a8c482352aaa862567257Ed62CF", "_mod":1636426686535476700, "asyncart":{ "totalCountSold":0, "totalAmountSold":0 }, "brightId":false, "celo":{ "attestations":0 }, "coinvise":{ "tokensCreated":0, "nftsCreated":0, "totalCountSold":0, "totalAmountSold":0, "totalPoolTvl":0, "totalPoolCount":0, "multisendCount":0, "airdropCount":0, "following":0, "followers":0 }, "coordinape":null, "cryptoScamDb":false, "deepdao":{ "score":0, "rank":0, "relativeScore":0, "daos":0, "proposals":0, "votes":0 }, "ens":false, "foundation":{ "totalCountSold":18, "totalAmountSold":2350717.40778, "followers":1604, "following":48 }, "gitcoin":{ "funder":false }, "idena":false, "knownorigin":{ "totalCountSold":3, "totalAmountSold":16306.515 }, "mirror":false, "poap":1, "poh":false, "polygon":{ "Score100":0 }, "rabbitHole":{ "level":1, "tasksCompleted":[ "SEA1", "SEA2", "UNI_V3_SWAP", "UNI_V2_SWAP", "SNAPSHOT_VOTE" ] }, "rarible":{ "totalCountSold":15, "totalAmountSold":728891.55738, "ownershipsWithStock":1, "itemsCreated":94, "ownerships":52, "hides":0, "followers":2219, "following":108, "likes":33 }, "score":1, "showtime":{ }, "signature":"0xcdadeac74b4fd888edb17edc5bf6c2f10f039f141f74280f93b69014942bc9783babb1d6f8c456c38c581a52876d8b69640710a58ab253210a2ee73d3a83a7e81c", "signatureAddress":"0xccccA960A949eaa4d963f0cE29170AD55D4F5E49", "success":true, "superrare":{ "totalCountSold":2, "totalAmountSold":28718.991565550437, "following":36, "followers":72 }, "uniswapSybil":false, "unstoppableDomains":false, "zora":{ "totalCountSold":0, "totalAmountSold":0 }, "aave":{ "totalHf":0, "mainMarket":{ "healthFactor":false }, "ammMarket":{ "healthFactor":false }, "polygonMarket":{ "healthFactor":false }, "avalancheMarket":{ "healthFactor":false } }, "age":340, "context":{ "followerCount":4, "followingCount":null }, "cyberconnect":{ "displayName":"", "followingCount":0, "followerCount":0, "social":{ "twitter":"TheArchangel22" } }, "rss3":{ "profile":{}, "backlinks":[], "accounts":[], "links":[] }, "arcx":{ "totalScore":0, "details":{} }, "boardroom":{ "totalVotes":0, "daos":[], "votes":[] } } ```
### Verifying Response Signature Omnid uses `0xCCcccCcC54317EE02C2dBfdD832a67C7acD28e06` as SignatureAddress to sign the oracle data. ```javascript const { utils } = require('ethers'); let resp = await fetch('https://theconvo.space/api/identity?address=vitalik.eth&apikey='); let { signature, signatureAddress, _mod, ...scoreData } = await resp.json(); let recoveredAddress = utils.verifyMessage(JSON.stringify(scoreData), signature); console.log( recoveredAddress === signatureAddress ); ``` ## ZK Identity Using a naive implementation of a Range Proof SNARK, we create a circuit to generate a proof of: whether a TrustScore is within a specific range (nearest-tenths in this case) without revealing the original score. Soon, this will also allow you to verify membership in categories/sources of reputation without revealing any personal traits. ### Generating ZkProof API Request format, ```html https://theconvo.space/api/zkidentity?address=&apikey= ```
View Response ```json { //score data, "inputs": [ "0x000000000000000000000000000000000000000000000000000000000000003c", "0x0000000000000000000000000000000000000000000000000000000000000046", "0x0000000000000000000000000000000000000000000000000000000000000001" ], "proof": [ [ "0x2350f8a0e2632b6a6263f25399cccd7acac5071374deb3dfddc7a8f6403cda72", "0x2dcf696d400516b327bb793d7163353dbfa15f43ac55beb18dde9b76cc0b8629" ], [ [ "0x1e0741e5371dfb9b5d64a3648f6a00bd3ddd1f49773dd7e39d8e80f9528fb9c5", "0x065cda7a43fc0f9c9020222850a5ad926cedc7d6bddf239d034454bed5c4bd78" ], [ "0x1cd443e08a0b98bd0ee6dabcb52d928993bc7565035e2fe14a0720415d284d6f", "0x03f5ca544c64be5a2215baba2a7d6e8b3554dd4a4087cd09fa9ee50557de3ee4" ] ], [ "0x03e301fc3938c14a158ab393095fdcd86f6e0dd49838ce322940228f3fdd3c80", "0x28143f38cfd83b3151739f2ce1ed2aeeb3f23230b56a8c46d2354a853e4b2e05" ] ] } ```
### Verifying ZkProof - Contract Address: `0x1cb460256bcece9aa216e80ccff5c3b98f8c9263` [View on PolygonScan](https://mumbai.polygonscan.com/address/0x1cb460256bcece9aa216e80ccff5c3b98f8c9263#readContract) ```javascript const { ethers } = require('ethers'); let resp = await fetch('https://theconvo.space/api/zkidentity?address=vitalik.eth'); let { inputs, proof } = await resp.json(); let verifierAddress = "0x1cb460256bcece9aa216e80ccff5c3b98f8c9263"; let verifierAbi = [{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"a","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct Pairing.G2Point","name":"b","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"c","type":"tuple"}],"internalType":"struct Verifier.Proof","name":"proof","type":"tuple"},{"internalType":"uint256[3]","name":"input","type":"uint256[3]"}],"name":"verifyTx","outputs":[{"internalType":"bool","name":"r","type":"bool"}],"stateMutability":"view","type":"function"}]; const provider = new ethers.providers.JsonRpcProvider(); const verifier = new ethers.Contract(verifierAddress, verifierAbi, provider); let resp = verifier.verifyTx(proof, inputs); console.log( resp === true ); ``` ## Learn More - [https://gov.gitcoin.co/t/the-gitcoin-anti-sybil-flywheel/9417](https://gov.gitcoin.co/t/the-gitcoin-anti-sybil-flywheel/9417) - [https://gitcoin.co/blog/a-community-based-roadmap-for-sybil-detection-across-web-3/](https://gitcoin.co/blog/a-community-based-roadmap-for-sybil-detection-across-web-3/) - [The Laws of Identity - Kim Cameron](https://www.identityblog.com/stories/2005/05/13/TheLawsOfIdentity.pdf)