# setInfo

The `setInfo()` operation allows you to attach **custom metadata** and define **default permissions** for an account, such as a token, identifier, or other asset. It's most commonly used to describe assets (e.g., NFTs or tokens) or set defaults for how other users can interact with them.

This operation is part of the `builder` and is added to a transaction before publishing.

## When to Use

* Naming a token or identifier
* Describing its purpose or contents
* Embedded metadata, could be optionally signed to prove authenticity
* Defining default access permissions

Here's a simplified example used within a transaction builder. You can find a full implementation in the '[Tokenizing Real-World Assets](/guides/tokenizing-real-world-assets.md)' section of the guide.

```typescript
builder.setInfo({
  name: 'DEMORWA',
  description: 'Demo Token for Real World Asset',
  metadata: metadata_base64, // base64-encoded JSON with asset info + signature
  defaultPermission: new KeetaNet.lib.Permissions(['ACCESS'], [])
}, {
  account: token.account // the account you're attaching this info to
});
```

#### Explanation of Each Field

* **`name`** – A human-readable name for the asset/account (e.g. token symbol).
* **`description`** – A short description or summary of the asset.
* **`metadata`** – A base64-encoded string containing structured data. This can include things like signed JSON that links the on-chain token to a real-world asset. The data can also optionally be encrypted.
* **`defaultPermission`** – A permissions object that controls what other accounts are allowed to do with this entity. E.g. ACCESS permission gives anyone the ability to hold and transfer the asset to others.

## Why Use It?

`setInfo()` is especially useful for:

* Setting up NFTs or tokens that represent real-world assets
* Making assets easily discoverable or identifiable
* Defining behavior for asset holders without custom logic

{% hint style="warning" %}
Keep in mind that metadata is public and immutable once published as part of a transaction.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeta.com/components/blocks/operations/setinfo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
