> For the complete documentation index, see [llms.txt](https://techdocs.korprotocol.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://techdocs.korprotocol.io/sdk-reference/client_methods/ip_client.md).

# IP Client

## IPClient

The `IPClient` provides functionality for managing intellectual property (IP) assets. The `IPClient` simplifies the management of IP assets, making it easier to create, retrieve, and list them as needed.

### Methods

* registerIp
* registerDerivative
* mintAndRegisterIp
* registerIpAndAttachLicense
* getIpAsset

### registerIp

Register an NFT as an Intellectual Property Asset

| Method       | Type                                                          |
| ------------ | ------------------------------------------------------------- |
| `registerIp` | `(request: registerIpRequest) => Promise<registerIpResponse>` |

* **Parameters**:
  * `request.nftContractAddress`: The address of the NFT Contract address.
  * `request.tokenId`: The token id of the NFT.
  * `request.signature`: Data signature.
  * `request.deadline`: The deadline for the signature in milliseconds.
  * `request.licenseeRoles[]`: An address array specifying the roles assigned to licensees
  * `request.copyrightRoles[]`: An address array detailing the roles related to copyrights.
  * `request.chainId`: The identifier for the blockchain network in the request.
* **Returns**:
  * `response.txhash` - The transaction hash.
  * `response.ipId` - The ipId of the newly registered Ip Asset.

### registerDerivative

Register an derivative of an Ip Asset

| Method               | Type                                                                          |
| -------------------- | ----------------------------------------------------------------------------- |
| `registerDerivative` | `(request: registerDerivativeRequest) => Promise<registerDerivativeResponse>` |

* **Parameters**:
  * `request.parentIpId`: The identifier for the parent intellectual property (IP) in the request
  * `request.signature`: Data signature.
  * `request.deadline`: The deadline for the signature in milliseconds.
  * `request.chainId`: The identifier for the blockchain network in the request.
* **Returns**:
  * `response.txhash` - The transaction hash.
  * `response.ipId` - The Ip Id of the newly registered Ip Asset.

### mintAndRegisterIp

Mint an NFT and regsiter it as an Intellectual Property Asset

| Method              | Type                                                                        |
| ------------------- | --------------------------------------------------------------------------- |
| `mintAndRegisterIp` | `(request: mintAndRegisterIpRequest) => Promise<mintAndRegisterIpResponse>` |

* **Parameters**:
  * `request.nftContractAddress`: The address of the NFT Contract address.
  * `request.signature`: Data signature.
  * `request.deadline`: The deadline for the signature in milliseconds.
  * `request.licenseeRoles[]`: An address array specifying the roles assigned to licensees
  * `request.copyrightRoles[]`: An address array detailing the roles related to copyrights.
  * `request.chainId`: The identifier for the blockchain network in the request.
* **Returns**:
  * `response.txhash` - The transaction hash.
  * `response.ipId` - The Ip Id of the newly registered Ip Asset.
  * `response.tokenId` - The tokenId of the issued NFT.

### registerIpAndAttachLicense

Register an Ip and attach a license to it.

| Method                       | Type                                                                                          |
| ---------------------------- | --------------------------------------------------------------------------------------------- |
| `registerIpAndAttachLicense` | `(request: registerIpAndAttachLicenseRequest) => Promise<registerIpAndAttachLicenseResponse>` |

* **Parameters**:
  * `request.nftContractAddress`: The address of the NFT Contract address.
  * `request.tokenId`: The token id of the NFT.
  * `request.licenseTermId`: The term id of the license.
  * `request.signature`: Data signature.
  * `request.deadline`: The deadline for the signature in milliseconds.
  * `request.licenseeRoles[]`: An address array specifying the roles assigned to licensees
  * `request.copyrightRoles[]`: An address array detailing the roles related to copyrights.
  * `request.chainId`: The identifier for the blockchain network in the request.
* **Returns**:
  * `response.txhash` - The transaction hash.
  * `response.ipId` - The Ip Id of the newly registered Ip Asset.

### getIpAsset

Get details of a registered Ip.

| Method       | Type                                                          |
| ------------ | ------------------------------------------------------------- |
| `getIpAsset` | `(request: getIpAssetRequest) => Promise<getIpAssetResponse>` |

* **Parameters**:
  * `response.ipId` - The Ip Id of the registered Ip Asset.
  * `request.chainId`: The identifier for the blockchain network in the request.
* **Returns**:
  * `response.license` - The license details.
    * `response.license.id` - The license Id.
    * `response.license.termId` - The identifier for the license term.
    * `response.license.templateAddress` - The address of the license template.
    * `response.license.ipfsUri` - The IPFS URI for the license document.
  * `response.royalty` - The royalty information.
    * `response.royalty.vaultAddress` - The address of the royalty vault.
    * `response.royalty.royaltyTokenAddress` - The address of the royalty token.
  * `response.dispute` - The dispute details.
    * `response.dispute.disputed`- Indicates if there is a dispute.
    * `response.dispute.tag` - The tag associated with the dispute.
    * `response.dispute.disputeCount` - The number of disputes.
    * `response.dispute.locked` - Indicates if the dispute is locked.
