Register an IPA as a Derivative

This section demonstrates how to register an IP Asset as a derivative of another. There are generally three methods of registering an IPA remix:

  1. Link an existing IPA as a derivative of a "parent" IPA using a License Token.
  2. Link an existing IPA as a derivative of a "parent" IPA directly.


  • Setup the client object.
  • The "parent" IPA must be registered.
  • The "child" IPA must be registered.

Register Derivative using License Token

Additional Prerequisites

  • An already minted License Token from the "parent" IPA. Learn how to mint a License Token here.

If you already have a License Token, it is easier to register a derivative this way. We can register a child IPA as a derivative of a parent IPA by calling client.ipAsset.registerDerivativeWithLicenseTokens() like so:

response = story_client.IPAsset.registerDerivativeWithLicenseTokens(

print(f"Derivative IPA linked to parent at transaction hash {response['txHash']}")
RegisterDerivativeWithLicenseTokensRequest = {
    'child_ip_id': str,
    'license_token_ids': list,
    'tx_options': dict
RegisterDerivativeWithLicenseTokensResponse = {
    'txHash': str

Register Derivative Directly

You can also register a derivative directly, without needing a License Token. There is no real difference between registerDerivativeWithLicenseTokens (above) and registerDerivative (below) except that the former requires an already minted License Token and the latter is a convenient function that handles it for you.


Quick Note

Remember that once License Terms are attached to an IP Asset, it becomes public to register a derivative with those terms, which is why you don't necessarily need a License Token first. Read more on that here .

response = story_client.IPAsset.registerDerivative(

print(f"Derivative IPA linked to parent at transaction hash {response['txHash']}")
RegisterDerivativeRequest = {
    'child_ip_id': str,
    'parent_ip_ids': list,
    'license_terms_ids': list,
    'license_template': str,
    'tx_options': dict
RegisterDerivativeResponse = {
    'txHash': str