diff --git a/build/13-infrastructure-api.md b/build/13-infrastructure-api.md
new file mode 100644
index 00000000..832cb5b5
--- /dev/null
+++ b/build/13-infrastructure-api.md
@@ -0,0 +1,311 @@
+# Infrastructure API
+
+The Infrastructure API provides an interface for managing essential infrastructure services required to build modern Web3 applications.
+
+
+
+
+#### Body Fields
+
+| Field | Type | Description | Required |
+|--------------|----------|-----------------------------------------|----------|
+| name | `string` | Name of the API key | Yes |
+| description | `string` | Description of the API key | No |
+
+#### Possible Errors
+
+| Code | Description |
+|----------|------------------------------------------|
+| 40300000 | Forbidden |
+| 40020001 | Max RPC API keys limit reached |
+| 40405001 | Project owner not found |
+| 50000001 | Internal server error |
+| 422001101| RPC API key name is missing |
+
+
+
+
+
+
+
+```sh
+curl --location --request POST "https://api.apillon.io/rpc/api-key" \
+--header "Authorization: Bearer :credentials" \
+--header "Content-Type: application/json" \
+--data-raw "{
+ \"name\": \"RPC API Key\",
+ \"description\": \"Description of the API key\"
+}"
+```
+
+
+
+
+
+
+```json
+{
+ "status": 201,
+ "data": {
+ "id": 4,
+ "projectUuid": "d0c34b5e-1fd6-473e-81f8-e89ee479f7aa",
+ "name": "RPC API Key",
+ "description": "Description of the API key",
+ "uuid": "60020364-7edc-495a-a0a2-df695bb1cc3f"
+ }
+}
+```
+
+
+
+
+
+
+### List RPC API Keys
+
+> Retrieve a list of RPC API keys associated with a project.
+
+
+
+
+#### Query Parameters
+
+All query parameters from [listing request](1-apillon-api.md#listing-requests)
+
+#### Response Fields
+
+| Field | Type | Description |
+|----------------|------------|----------------------------------------------------------|
+| id | `number` | Unique identifier of the RPC API key |
+| projectUuid | `string` | UUID of the project the RPC API key belongs to |
+| name | `string` | Name of the RPC API key |
+| uuid | `string` | Unique identifier of the RPC API key returned by Dwellir |
+| description | `string` | Description of the RPC API key |
+| createTime | `DateTime` | Creation timestamp |
+| updateTime | `DateTime` | Last updated timestamp |
+
+
+
+
+
+
+
+```sh
+curl --location --request GET "https://api.apillon.io/rpc/api-key" \
+--header "Authorization: Bearer :credentials"
+```
+
+
+
+
+
+
+```json
+{
+ "status": 200,
+ "data": {
+ "items": [
+ {
+ "id": 4,
+ "createTime": "2024-09-09T11:15:26.000Z",
+ "updateTime": "2024-09-10T13:18:31.000Z",
+ "projectUuid": "cfd85992-8f79-4486-97cf-2406bd722d90",
+ "name": "RPC API Key",
+ "description": "Description of the API key",
+ "uuid": "60020364-7edc-495a-a0a2-df695bb1cc3f"
+ }
+ ],
+ "total": 1,
+ "page": 1,
+ "limit": 20
+ }
+}
+```
+
+
+
+
+
+
+### Get a RPC API Key
+
+> Retrieve the details of a specific RPC API key by its ID along with the list of RPC endpoints marked as favorite for this API key.
+
+
+
+
+#### URL Parameters
+
+| Field | Type | Description | Required |
+|-------|----------|------------------------------------------|----------|
+| id | `number` | Unique identifier of the RPC API key | Yes |
+
+#### Response Fields
+
+| Field | Type | Description |
+|----------------|------------|-------------------------------------------------------------|
+| id | `number` | Unique identifier of the RPC API key |
+| name | `string` | Name of the RPC API key |
+| description | `string` | Description of the RPC API key |
+| projectUuid | `string` | Unique identifier of the project |
+| uuid | `string` | Unique identifier of the RPC API key |
+| createTime | `DateTime` | Creation timestamp |
+| updateTime | `DateTime` | Last updated timestamp |
+| urls | `array` | Array of favorite URLs for the RPC API key |
+
+###### URL Fields
+| Field | Type | Description |
+|----------------|------------|--------------------------------------------------------------|
+| id | `number` | Unique identifier of the RPC Endpoint |
+| apiKeyId | `number` | Unique identifier of the RPC API key |
+| chainName | `string` | Name of the chain the RPC Endpoint belongs to |
+| network | `string` | Network of the RPC Endpoint (Usually mainnet, testnet, etc.) |
+| httpsUrl | `string` | HTTPS URL of the RPC Endpoint |
+| wssUrl | `string` | WSS URL of the RPC Endpoint |
+| createTime | `DateTime` | Creation timestamp |
+| updateTime | `DateTime` | Last updated timestamp |
+
+#### Possible Errors
+
+| Code | Description |
+|----------|---------------------------|
+| 40300000 | Forbidden |
+| 40420001 | RPC API key not found |
+
+
+
+
+
+
+
+```sh
+curl --location --request GET "https://api.apillon.io/rpc/api-key/:id" \
+--header "Authorization: Bearer :credentials"
+```
+
+
+
+
+
+
+```json
+{
+ "id": "60020364-7edc-495a-a0a2-df695bb1cc3f",
+ "status": 200,
+ "data": {
+ "createTime": "2024-09-09T11:15:26.000Z",
+ "updateTime": "2024-09-10T13:18:31.000Z",
+ "name": "RPC API Key",
+ "description": null,
+ "project_uuid": "d0c34b5e-1fd6-473e-81f8-e89ee479f7aa",
+ "uuid": "60020364-7edc-495a-a0a2-df695bb1cc3f",
+ "urls": [
+ {
+ "id": 77,
+ "chainName": "Ethereum",
+ "network": "mainnet",
+ "httpsUrl": "https://mainnet.apillon.io/60020364-7edc-495a-a0a2-df695bb1cc3f",
+ "wssUrl": "wss://mainnet.apillon.io/60020364-7edc-495a-a0a2-df695bb1cc3f",
+ "createTime": "2024-09-10T12:55:44.000Z",
+ "updateTime": "2024-09-12T13:57:26.000Z",
+ }
+ ]
+ }
+}
+```
+
+
+
+
+
+
+### List RPC Endpoints
+
+> Retrieve a list of available RPC endpoints by Dwellir.
+
+
+
+
+#### Response Fields
+
+| Field | Type | Description |
+|----------------|------------|--------------------------------------------------------------|
+| id | `number` | Unique identifier of the RPC Endpoint |
+| image_url | `string` | URL of the RPC Endpoint chain image |
+| name | `string` | Name of the RPC Endpoint chain |
+| networkId | `number` | Network ID of the RPC Endpoint |
+| networkName | `string` | Network of the RPC Endpoint (Usually Mainnet, Testnet, etc.) |
+| nodes | `array` | Array of nodes for the RPC Endpoint |
+| type | `string` | Type of the Entity (will be 'network') |
+| version | `string ` | Version of the RPC Endpoint |
+
+##### Node Fields
+
+| Field | Type | Description |
+|----------------|------------|--------------------------------------------------------------|
+| id | `number` | Unique identifier of the RPC Endpoint Node |
+| https | `string` | HTTPS URL of the RPC Endpoint Node |
+| wss | `string` | WSS URL of the RPC Endpoint Node |
+| type | `string` | Type of the Entity (will be 'node') |
+| node_type | `string` | Type of the RPC Endpoint Node |
+| version | `string ` | Version of the RPC Endpoint Node |
+
+
+
+
+
+
+
+```sh
+curl --location --request GET "https://api.apillon.io/rpc/endpoints" \
+--header "Authorization: Bearer :credentials"
+```
+
+
+
+
+
+
+```json
+{
+ "status": 200,
+ "data": [{
+ "id": 1,
+ "image_url": "https://apillon.io/images/chains/ethereum.svg",
+ "name": "Ethereum",
+ "networkId": 31,
+ "networkName": "Mainnet",
+ "nodes": [{
+ "id": 1,
+ "https": "https://mainnet.apillon.io/",
+ "wss": "wss://mainnet.apillon.io/",
+ "type": "node",
+ "node_type": "Archive",
+ "version": "1.0"
+ }],
+ "type": "network",
+ "version": "1.0"
+ }]
+}
+```
+
+
+
+
+
\ No newline at end of file
diff --git a/build/4-nfts-api.md b/build/4-nfts-api.md
index 72452d3b..0f7ca510 100644
--- a/build/4-nfts-api.md
+++ b/build/4-nfts-api.md
@@ -315,8 +315,8 @@ An NFT Collection can be created with a few features/functionalities:
2 types of collections are supported:
-1. Generic collection, which represents an extension of the ERC-721 standard for EVM collections and the PSP-34 standard for substrate collections. You can read more about these standards [here](/web3-services/4-nfts.html#nft-files)
-2. Nestable collection which allows nesting NFTs under each other (based on [RMRKs ERC-7401](https://evm.rmrk.app/nestable) NFT standard - EVM only)
+1. Generic collection, which represents an extension of the ERC-721 standard for EVM collections and the PSP-34 standard / Native NFTs for substrate collections. You can read more about these standards [here](/web3-services/4-nfts.html#nft-files)
+2. Nestable collection which allows nesting NFTs under each other (based on [RMRKs ERC-7401](https://evm.rmrk.app/nestable) NFT standard and [Unique Native NFTs](https://docs.unique.network/reference/blockchain/nesting.html))
Additionally, 2 chain types/environments are supported: EVM and Substrate.
@@ -519,8 +519,6 @@ curl --location 'https://api.apillon.io/nfts/collections/evm' \
"bucketUuid": "a9425ff7-4802-4a38-b771-84a790112c30",
"baseUri": "https://ipfs.apillon.io/metadata/",
"baseExtension": ".json",
- "isSoulbound": false,
- "isRevokable": false,
"royaltiesFees": 0.1,
"royaltiesAddress": "0x4156edbafc5091507de2dd2a53ded551a346f83b",
"collectionStatus": 0,
@@ -542,6 +540,178 @@ curl --location 'https://api.apillon.io/nfts/collections/evm' \
+
+#### Create Unique NFT Collection
+
+
+
+#### Body fields
+
+| Name | Type | Description | Required |
+|----------------|-----------|--------------------------------------------------------------------------------------------|----------|
+| collectionType | `number` | Type of smart contract to use when deploying collection (1 for generic, 2 for nestable). | true |
+| symbol | `string` | NFT collection symbol (usually 3-4 characters long). | true |
+| name | `string` | NFT collection name. | true |
+| description | `string` | NFT collection description. | false |
+| maxSupply | `number` | Maximal number of NFTs ever in existence (0 stands for unlimited). | true |
+| isRevokable | `boolean` | For revocable collection owner can destroy NFTs at any time. (default: false) | true |
+| isSoulbound | `boolean` | Soul bound tokens are NFTs that are bound to wallet and not transferable. (default: false) | true |
+| metadata | `object` | Object containing metadata for different token ids (more details bellow). | true |
+
+#### Metadata field
+Metadata field is an object with token ids as keys and token metadata as values. Here are the fields for each token metadata:
+
+| Name | Type | Description | Required |
+|-------------------|----------|-----------------------------------------------------------------------------------------|------------|
+| name | `string` | NFT name. | true |
+| description | `string` | NFT description. | false |
+| image | `string` | NFT image URL. | true |
+| image_details | `object` | Additional details about the image from the image field (see table bellow). | false |
+| attributes | `array` | Array of NFT attributes (see table bellow). | true |
+| animation_url | `string` | NFT animation URL. | false |
+| animation_details | `object` | Additional details about the animation from the animation_url field (see table bellow). | false |
+| youtube_url | `string` | URL to a YouTube video associated with the NFT. | false |
+| created_by | `string` | Address of the creator of the NFT. | false |
+| external_url | `string` | URL to an external resource providing more information about the NFT. | false |
+| background_color | `string` | Background color of the NFT. | false |
+| locale | `string` | Locale of the NFT. | false |
+
+##### Metadata field attributes
+Attributes field of metadata field is an array of NFT traits described bellow:
+
+| Name | Type | Description | Required |
+|---------------|-----------|---------------------------------------------------|----------|
+| value | `string` | Trait value. | true |
+| trait_type | `string` | Name of the trait. | true |
+| display_type | `string` | Type for displaying trait (`number`, `date`,...). | false |
+
+##### Metadata field image_details and animation_details
+| Name | Type | Description | Required |
+|--------|----------|------------------------------------------------------------------------------------------|----------|
+| name | `string` | Name of the image (for captions, etc.). | false |
+| type | `enum` | Type of content (`image`,`animation`,`video`,`audio`,`spatial`,`pdf`,`document`,`other`) | false |
+| bytes | `number` | Size of the image file in bytes. | false |
+| format | `string` | Format of the image file (e.g., PNG, JPEG). | false |
+| sha256 | `string` | SHA-256 hash of the image file. | false |
+| width | `number` | Width of the image in pixels. | false |
+| height | `number` | Height of the image in pixels. | false |
+| order | `number` | Order of the image. | false |
+
+You can find more information about metadata in [Unique docs](https://docs.unique.network/reference/schemas/#nft-token-schema-v2-detailed-description).
+
+
+#### Possible errors
+
+Beside validation errors (with 422 http status code) these are the error codes may be returned:
+
+| Code | Description |
+|----------|-----------------------------------------------|
+| 40012002 | Collection quota reached |
+| 50012003 | Failed deploying NFT contract on chain. |
+
+#### Response
+
+Response payload is described [under Response Fields above](#get-nft-collection).
+
+
+
+
+
+
+
+```sh
+curl --location 'https://api.apillon.io/nfts/collections/unique' \
+--header 'Content-Type: application/json' \
+--header 'Authorization: Basic :credentials' \
+--data '{
+ "collectionType": 1,
+ "symbol": "NFT",
+ "name": "NFT Collection",
+ "description": "NFT Collection description",
+ "maxSupply": 1000,
+ "isRevokable": true,
+ "isSoulbound": true,
+ "metadata": {
+ "1": {
+ "name": "name",
+ "description": "description",
+ "image": "image",
+ "attributes": [
+ {
+ "value": "value",
+ "trait_type": "trait_type",
+ "display_type": "display_type"
+ }
+ ]
+ },
+ "2": {
+ "name": "name",
+ "description": "description",
+ "image": "image",
+ "attributes": [
+ {
+ "value": "value",
+ "trait_type": "trait_type",
+ "display_type": "display_type"
+ },
+ {
+ "value": "value",
+ "trait_type": "trait_type",
+ "display_type": "display_type"
+ }
+ ]
+ },
+ }
+}'
+```
+
+
+
+
+
+
+```json
+{
+ "id": "b5935c73-204d-4365-9f9a-6a1792adab5b",
+ "status": 200,
+ "data": {
+ "createTime": "2023-06-13T10:15:58.000Z",
+ "updateTime": "2023-06-13T10:15:58.000Z",
+ "chain": 11,
+ "collectionType": 1,
+ "collectionUuid": "d6355fd3-640d-4803-a4d9-79d875abcb5a",
+ "symbol": "NFT",
+ "name": "NFT Collection",
+ "description": "NFT Collection Description",
+ "maxSupply": 1000,
+ "bucketUuid": null,
+ "baseUri": null,
+ "baseExtension": "",
+ "royaltiesFees": 0,
+ "royaltiesAddress": null,
+ "collectionStatus": 0,
+ "contractAddress": "XjuXMnFxcJoAgMCdUQKvvt2Daykq4H9rsCfYEVpF6noFP5u",
+ "transactionHash": "0xb59d8497feb121b0ca0b8480df72a456333edddc68ad65f23b6b8b9028e3a6b3",
+ "deployerAddress": "WmMcyrPY4fivB5FUPN85QPhCMKtnrjmUyAgtXC2oW2XbcnY",
+ "drop": false,
+ "dropStart": 0,
+ "dropPrice": 0,
+ "dropReserve": 0,
+ "isRevokable": true,
+ "isSoulbound": true,
+ "isAutoIncrement": true
+ }
+}
+```
+
+
+
+
+
+
### Transfer Collection
> Transfer collection ownership from a wallet owned by caller to a new wallet address.
diff --git a/build/6-apillon-cli.md b/build/6-apillon-cli.md
index 4a27aea4..185f8ce5 100644
--- a/build/6-apillon-cli.md
+++ b/build/6-apillon-cli.md
@@ -858,6 +858,25 @@ Deletes a job from a cloud function.
apillon cloud-functions delete-job --job-uuid "987e6543-e21c-32f1-b123-426655441111"
```
+## Indexing Commands
+
+#### `indexing deploy`
+
+Deploy a local squid indexer repository to an Apillon indexer with a specific UUID.
+The CLI zips files that were added to tar.gz archive, which is created in the builds/ directory.
+The compressed file is uploaded to S3, and the deployment is started. The deployment can take some time, and progress can be monitored on the [Apillon developer console](https://app.apillon.io/dashboard/service/indexing).
+
+**Options**
+
+- `