diff --git a/build/4-nfts-api.md b/build/4-nfts-api.md
index 72452d3b..e13c1b82 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,179 @@ curl --location 'https://api.apillon.io/nfts/collections/evm' \
+
+#### Create Unique NFT Collection
+
+POST /nfts/collections/unique
+
+
+
+
+#### 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. |
+| 50012010 | Failed to create bucket for storing metadata. |
+
+#### 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.