# Basic Integration (for API v6) # Basic integration ## What's covered This guide shows you how to let users link their BrightIDs to your app so you can check their verification status. It also covers the basics of [sponsoring users](#sponsoring-users). Other options for integrating BrightID not covered include - Verifying community members through the [Discord unique bot](https://github.com/ShenaniganDApp/brightid-discord-bot). - Verifying DAO members through the shared snapshot strategy. - Tightly integrating BrightID connection-making into your app using [API functions](https://dev.brightid.org/docs/node-api/). ## Prerequisites This guide assumes you have [registered an app and a context](https://dev.brightid.org/#step-1). ## SDKs and Utilities Much of what's covered in this guide can be quickly generated using an SDK. * [Javascript](https://www.npmjs.com/package/brightid_sdk) * [Python](https://github.com/PooyaFekri/python-brightid) * [Test app to test linking, verifying, and sponsoring](https://github.com/acolytec3/brightid_test_app) [Hosted here](https://acolytec3.github.io/brightid_test_app/) * [TweetNaCl.js online tool to test creating and verifying signatures](https://tweetnacl.js.org/#/sign) ## Creating links ### Create a unique identifer for each user Each user of your app will need a unique identifier (referred to later as an `appId`.) This could be a UUID or any other url-escaped string. <!-- theme: warning --> > ### Warning > > If Ethereum addresses are used as appIds, use the [checksummed format](https://ethsum.netlify.app/). ### Format the universal link The link is of the form https://app.brightid.org/link-verification/{node_url}/{app}/{appId} where - `{node_url}` is `http:%2f%2fnode.brightid.org` (url-escaping the slashes is necessary). - `{app}` is the app short name you [registered with node operators](https://dev.brightid.org/#step-1). - `{contextId}` is the unique identifier you want to use to identify this user. ### Share the link with the user Present the link you've constructed to the user identified by the `contextId`. When the user clicks the link, it will open their BrightID app (or ask them to install the BrightID app) and ask if they want to create a link to your app. After they link, you will be able to use the `contextId` as a parameter in [BrightID Node API](https://dev.brightid.org/docs/node-api/) calls to refer to that user. ### Rendering the link as a QR While the above works well for presenting the link in a mobile browser, if the user is viewing your app on another device such as a laptop, a QR code rendering of the link is often more convenient. The user can scan it with the BrightID app's QR scanner. Render the link using the following format brightid://link-verification/<node_url>/<context>/<context_id> using the [values described above](#format-the-universal-link). [BrightID SDKs](#sdks-and-utilities) are available that can generate both regular links and QR images. ## Querying Verifications The following query will retrieve all `contextIds` for a `{context}` (or just the count). ```json http { "method": "get", "url": "https://app.brightid.org/node/v5/verifications/{context}", "query": { "count_only": "true" }, "path": { "context": "Discord" } } ``` The following query will retrieve the `unique` status of one user referenced by their `{contextId}` ```json http { "method": "get", "url": "https://app.brightid.org/node/v5/verifications/{context}/{contextId}", "query": { "signed": null, "timestamp": null }, "path": { "context": "clr.fund", "contextId": "0xd714dd60e22bbb1cbafd0e40de5cfa7bbdd3f3c8" } } ``` ### Parameters to request node signatures Having nodes sign the query result allows users to submit the signed verification to a smart contract (See [the EVM integration guide](evm-integration.md).) or another decentralized service. If the optional `signed` parameter is present (allowed values: `eth` or `nacl`), a message consisting of the context and the list of contextIds will be signed by a private key belonging to the node. It will add the following elements to the returned object. * `sig` (the signed message) * `address` (in the case of `eth`) * **OR**`publicKey` (in the case of `nacl`) #### `timestamp` parameter If the optional `timestamp` parameter is present (allowed values:`seconds` or `milliseconds`), a `timestamp` element will be added to the returned object. ## Sponsoring users A user must be "sponsored" before your app can [query their verification](#querying-verifications) status. This is done by purchasing sponsorships and assigning them to your app. [An SDK](#sdks-and-utilities) will help you create and send a "sponsor" operation to a BrightID node for a user (identified by the `contextId`). ### Purchasing sponsorships You can purchase sponsorships from the [sponsorship dashboard](https://sp.brightid.org) and assign them to a [registered app](https://dev.brightid.org/#step-1). You can also find out how to purchase [subs (discounted sponsorships)](https://medium.com/brightid/what-value-do-subscriptions-subs-have-for-applications-49b7602aa228) at the sponsorship dashboard. ### Already sponsored If a user was already sponsored by another app, you don't have to sponsor them again. If you attempt to sponsor an already sponsored user, nothing will happen--another sponsorship won't be spent. ### Checking your app's unused sponsorship balance The following query will return your app's `unusedSponsorships` count. ```json http { "method": "get", "url": "https://app.brightid.org/node/v5/apps/{app}", "path": { "app": "clr.fund" } } ```