> For the complete documentation index, see [llms.txt](https://tokenscript.gitbook.io/token-negotiator/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tokenscript.gitbook.io/token-negotiator/learn/token-authentication/off-chain-authentication.md).

# Off Chain Authentication

Authenticating ownership of off chain Token

Offchain tokens can be authenticated with an identifier attestation ID (e.g. a user email). Token Negotiator utilises an additional technology, attestation.id to fully authenticate tokens with this information.

Authenticating ownership of a single token, providing a proof with a limited expiry.

```
/**
 * @param {Object} unsignedToken token to attest
 */
negotiator.authenticate({
	unsignedToken
});

negotiator.on("proof", () => {
	// the proof will be received here (valid or failed)
});
```

Authenticating ownership of a list of tokens, providing a list of proofs with limited expiry.

```
/**
 * @param {object} selected unsigned token(s) to attest
 */
negotiator.authenticate([{
	unsignedToken
}, {
        issuer, // optional
	unsignedToken,
}]);

negotiator.on("proof", () => {
	// list of proofs will be received here (valid or failed)
});
```

For support and any questions please reach out to us on [discord](https://discord.com/invite/CfvmYFyujW) or via <sayhi@smarttokenlabs.com>
