---
title: "Create IP Asset (Idempotent)"
method: PUT
path: "/v1/ip/collections/{collectionId}/ipassets/{customerFacingId}"
tags: ["IP Story Protocol"]
---

# Create IP Asset (Idempotent)

`PUT /v1/ip/collections/{collectionId}/ipassets/{customerFacingId}`

Create a new IP Asset with a pre-computed id, or get an existing one if the id already exists

**API scope required**: `nfts.create`

## Path parameters

- `collectionId` string, required
- `customerFacingId` string, required

## Headers

- `X-API-KEY` string, required

## Request body

- IPAssetCreationInputDto
  - `owner` string, required — The owner (main creator) of the IP asset: Allowed formats: `<chain>:<address>` or `email:<email_address>:<chain>` or `userId:<userId>:<chain>` or `twitter:<twitter_handle>:<chain>` [see here for more info](/minting/advanced/specify-recipient)
  - `reuploadLinkedFiles` boolean — Controls whether external files (like images) in the NFT metadata should be reuploaded to decentralized storage (IPFS) (true) or referenced with their original URLs (false). Default is True.
  - `licenseTerms` union[] — Licensing parameters for the IP asset, NOTE: For detailed and updated license terms, refer to the 'Get IP Asset License' endpoint
    - union — License parameters
      - object — Non-commercial social remixing license terms
        - `type` 'non-commercial-social-remixing', required
        - `offChain` object — Additional license terms that are stored off-chain due to their descriptive nature
          - `territory` string[] — Limit usage of the IP to certain regions and/or countries. By default, the IP can be used globally.
          - `channelsOfDistribution` string[] — Restrict usage of the IP to certain media formats and channels of distribution. By default, the IP can be used across all possible channels.
          - `attribution` object — If and how the original author should be credited for usage of the IP. By default, no credit is required.
            - `required` boolean, required
            - `instructions` string
          - `contentStandards` string[] — Set content standards around use of the IP. By default, no standards apply.
          - `sublicensable` boolean — If true, derivative works can grant the same rights they received under this license to a 3rd party, without approval from the original licensor.
          - `aiLearningModels` boolean — Whether or not the IP can be used to develop AI learning models. By default, the IP cannot be used for such development.
          - `restrictionOnCrossPlatformUse` boolean — If true, limits licensing and creation of derivative works solely on the app on which the IP is made available.
          - `governingLaw` string — The laws of a certain jurisdiction by which this license abides. By default, this is California, USA.
          - `alternativeDisputeResolution` object — Alternative dispute resolution mechanisms for handling disagreements
            - `method` string, required
            - `details` string, required
          - `additionalTerms` object[] — Additional license parameters or terms the licensor would like to specify
            - `term` string, required
            - `description` string, required
        - `uri` string — License terms stored off-chain. If not provided, and if 'offChain' is also omitted, this will default to the Non-Commercial Social Remixing license terms.
      - object — Commercial use license terms
        - `type` 'commercial-use', required
        - `terms` object, required — Commercial use license terms
          - `defaultMintingFee` number, required — Default minting fee
          - `currency` string — Currency address (must be whitelisted in RoyaltyModule.sol). Defaults to the $WIP token. Whitelisted tokens: WIP (0x1514000000000000000000000000000000000000) on all networks, MERC20 (0xF2104833d386a2734a4eB3B8ad6FC6812F29E38E) on Aeneid Testnet
        - `offChain` object — Additional license terms that are stored off-chain due to their descriptive nature
          - `territory` string[] — Limit usage of the IP to certain regions and/or countries. By default, the IP can be used globally.
          - `channelsOfDistribution` string[] — Restrict usage of the IP to certain media formats and channels of distribution. By default, the IP can be used across all possible channels.
          - `attribution` object — If and how the original author should be credited for usage of the IP. By default, no credit is required.
            - `required` boolean, required
            - `instructions` string
          - `contentStandards` string[] — Set content standards around use of the IP. By default, no standards apply.
          - `sublicensable` boolean — If true, derivative works can grant the same rights they received under this license to a 3rd party, without approval from the original licensor.
          - `aiLearningModels` boolean — Whether or not the IP can be used to develop AI learning models. By default, the IP cannot be used for such development.
          - `restrictionOnCrossPlatformUse` boolean — If true, limits licensing and creation of derivative works solely on the app on which the IP is made available.
          - `governingLaw` string — The laws of a certain jurisdiction by which this license abides. By default, this is California, USA.
          - `alternativeDisputeResolution` object — Alternative dispute resolution mechanisms for handling disagreements
            - `method` string, required
            - `details` string, required
          - `additionalTerms` object[] — Additional license parameters or terms the licensor would like to specify
            - `term` string, required
            - `description` string, required
        - `uri` string — License terms stored off-chain. If not provided, and if 'offChain' is also omitted, this will default to the Non-Commercial Social Remixing license terms.
      - object — Commercial remix license terms
        - `type` 'commercial-remix', required
        - `terms` object, required — Commercial remix license terms
          - `defaultMintingFee` number, required — Default minting fee
          - `currency` string — Currency address (must be whitelisted in RoyaltyModule.sol). Defaults to the $WIP token. Whitelisted tokens: WIP (0x1514000000000000000000000000000000000000) on all networks, MERC20 (0xF2104833d386a2734a4eB3B8ad6FC6812F29E38E) on Aeneid Testnet
          - `commercialRevShare` number, required — Commercial revenue share percentage (number between 0 and 100)
        - `offChain` object — Additional license terms that are stored off-chain due to their descriptive nature
          - `territory` string[] — Limit usage of the IP to certain regions and/or countries. By default, the IP can be used globally.
          - `channelsOfDistribution` string[] — Restrict usage of the IP to certain media formats and channels of distribution. By default, the IP can be used across all possible channels.
          - `attribution` object — If and how the original author should be credited for usage of the IP. By default, no credit is required.
            - `required` boolean, required
            - `instructions` string
          - `contentStandards` string[] — Set content standards around use of the IP. By default, no standards apply.
          - `sublicensable` boolean — If true, derivative works can grant the same rights they received under this license to a 3rd party, without approval from the original licensor.
          - `aiLearningModels` boolean — Whether or not the IP can be used to develop AI learning models. By default, the IP cannot be used for such development.
          - `restrictionOnCrossPlatformUse` boolean — If true, limits licensing and creation of derivative works solely on the app on which the IP is made available.
          - `governingLaw` string — The laws of a certain jurisdiction by which this license abides. By default, this is California, USA.
          - `alternativeDisputeResolution` object — Alternative dispute resolution mechanisms for handling disagreements
            - `method` string, required
            - `details` string, required
          - `additionalTerms` object[] — Additional license parameters or terms the licensor would like to specify
            - `term` string, required
            - `description` string, required
        - `uri` string — License terms stored off-chain. If not provided, and if 'offChain' is also omitted, this will default to the Non-Commercial Social Remixing license terms.
  - `nftMetadata` object, required — Metadata for the NFT representation of this IP asset
    - `name` string
    - `image` string
    - `description` string
    - `external_url` string
    - `animation_url` string
    - `attributes` object[]
      - `trait_type` string, required
      - `value` union, required
        - string
        - number
      - `display_type` string
    - `uri` string
  - `ipAssetMetadata` object, required — Metadata containing information about the IP asset itself
    - `title` string — Title of the IP
    - `description` string — Description of the IP
    - `createdAt` string — Creation date of the IP (ISO8601 or unix format)
    - `image` string — Primary image URL for the IP asset
    - `imageHash` string — Hash of the primary image
    - `mediaUrl` string — Primary media URL for the IP asset
    - `mediaHash` string — Hash of the primary media
    - `mediaType` string — MIME type of the primary media
    - `relationships` object[] — The detailed relationship info with the IPA's direct parent asset, such as APPEARS_IN, FINETUNED_FROM, etc. See more examples https://docs.story.foundation/docs/ipa-metadata-standard#relationship-types
      - `type` string, required
      - `parentIpId` string, required
    - `creators` object[] — Information about the IP creators
      - `name` string, required
      - `email` string — The creator of the IP asset email
      - `crossmintUserLocator` string — A internal locator for the creator of the IP asset, crossmint will automatically map this to the correct wallet address, not required if address is specified, is always required for the main creator(owner): Allowed formats: `<chain>:<address>` or `email:<email_address>:<chain>` or `userId:<userId>:<chain>` or `twitter:<twitter_handle>:<chain>` [see here for more info](/minting/advanced/specify-recipient)
      - `address` string — Wallet address of the IP creator. This field is optional only if a crossmint user locator is specified
      - `contributionPercent` number, required
      - `description` string
      - `image` string
      - `socialMedia` object[]
        - `platform` string, required
        - `url` string, required
      - `role` string
    - `media` object[] — Supporting media assets
      - `name` string, required
      - `url` string, required
      - `mimeType` string, required
    - `watermarkImage` string — A separate image with your watermark already applied. This way apps choosing to use it can render this version of the image (with watermark applied).
    - `attributes` object[] — An array of key-value pairs that can be used for arbitrary mappings. Attribute type defined below.
      - `key` string, required
      - `value` union, required
        - string
        - number
    - `ipType` string — Type of the IP Asset, can be defined arbitrarily by the creator. I.e. "character", "chapter", "location", "items", "music", etc
    - `tags` string[] — Any tags that can help surface this IPA
    - `robotTerms` object — Allows you to set Do Not Train for a specific agent
      - `userAgent` string, required
      - `allow` string, required
  - `derivData` object, required — Data for the parent IP asset and license terms (for derivative IP assets only)
    - `parentIpIds` unknown[] — The parent IP IDs of the derivative IP asset
      - unknown
    - `licenseTermsIds` number[] — The license terms IDs of the derivative IP asset
    - `maxMintingFee` number — The max minting fee of the derivative IP asset
    - `maxRevenueShare` number — The max revenue share of the derivative IP asset
    - `maxRts` number — The max RTS of the derivative IP asset
  - `sendNotification` union
    - boolean — Whether to send a notification to the custodial wallet address, or the recipient if it was minted to an email address.
    - object
      - `recipientEmail` string, email, required — The email address to send the notification to.
  - `locale` 'en-US' | 'es-ES' | 'fr-FR' | 'it-IT' | 'ko-KR' | 'pt-PT' | 'ja-JP' | 'zh-CN' | 'zh-TW' | 'de-DE' | 'ru-RU' | 'tr-TR' | 'uk-UA' | 'th-TH' | 'vi-VN' | 'Klingon' — The locale for the recipient's notification.

## Response `200`

IP Asset created

- IPAssetResponseDto
  - `id` string, required — The id of the IPAsset
  - `actionId` string, required — The action id for the IPAsset creation
  - `nftMetadata` object, required — Metadata for the NFT representation of this IP asset
    - `name` string
    - `image` string
    - `description` string
    - `external_url` string
    - `animation_url` string
    - `attributes` object[]
      - `trait_type` string, required
      - `value` union, required
        - string
        - number
      - `display_type` string
    - `uri` string
  - `ipAssetMetadata` object, required — Metadata containing information about the IP asset itself
    - `title` string — Title of the IP
    - `description` string — Description of the IP
    - `createdAt` string — Creation date of the IP (ISO8601 or unix format)
    - `image` string — Primary image URL for the IP asset
    - `imageHash` string — Hash of the primary image
    - `mediaUrl` string — Primary media URL for the IP asset
    - `mediaHash` string — Hash of the primary media
    - `mediaType` string — MIME type of the primary media
    - `relationships` object[] — The detailed relationship info with the IPA's direct parent asset, such as APPEARS_IN, FINETUNED_FROM, etc. See more examples https://docs.story.foundation/docs/ipa-metadata-standard#relationship-types
      - `type` string, required
      - `parentIpId` string, required
    - `creators` object[] — Information about the IP creators
      - `name` string, required
      - `email` string — The creator of the IP asset email
      - `crossmintUserLocator` string — A internal locator for the creator of the IP asset, crossmint will automatically map this to the correct wallet address, not required if address is specified, is always required for the main creator(owner): Allowed formats: `<chain>:<address>` or `email:<email_address>:<chain>` or `userId:<userId>:<chain>` or `twitter:<twitter_handle>:<chain>` [see here for more info](/minting/advanced/specify-recipient)
      - `address` string — Wallet address of the IP creator. This field is optional only if a crossmint user locator is specified
      - `contributionPercent` number, required
      - `description` string
      - `image` string
      - `socialMedia` object[]
        - `platform` string, required
        - `url` string, required
      - `role` string
    - `media` object[] — Supporting media assets
      - `name` string, required
      - `url` string, required
      - `mimeType` string, required
    - `watermarkImage` string — A separate image with your watermark already applied. This way apps choosing to use it can render this version of the image (with watermark applied).
    - `attributes` object[] — An array of key-value pairs that can be used for arbitrary mappings. Attribute type defined below.
      - `key` string, required
      - `value` union, required
        - string
        - number
    - `ipType` string — Type of the IP Asset, can be defined arbitrarily by the creator. I.e. "character", "chapter", "location", "items", "music", etc
    - `tags` string[] — Any tags that can help surface this IPA
    - `robotTerms` object — Allows you to set Do Not Train for a specific agent
      - `userAgent` string, required
      - `allow` string, required
  - `licenseTerms` union[] — Licensing parameters for the IP asset, NOTE: For detailed and updated license terms, refer to the 'Get IP Asset License' endpoint
    - union — License parameters
      - object — Non-commercial social remixing license terms
        - `type` 'non-commercial-social-remixing', required
        - `offChain` object — Additional license terms that are stored off-chain due to their descriptive nature
          - `territory` string[] — Limit usage of the IP to certain regions and/or countries. By default, the IP can be used globally.
          - `channelsOfDistribution` string[] — Restrict usage of the IP to certain media formats and channels of distribution. By default, the IP can be used across all possible channels.
          - `attribution` object — If and how the original author should be credited for usage of the IP. By default, no credit is required.
            - `required` boolean, required
            - `instructions` string
          - `contentStandards` string[] — Set content standards around use of the IP. By default, no standards apply.
          - `sublicensable` boolean — If true, derivative works can grant the same rights they received under this license to a 3rd party, without approval from the original licensor.
          - `aiLearningModels` boolean — Whether or not the IP can be used to develop AI learning models. By default, the IP cannot be used for such development.
          - `restrictionOnCrossPlatformUse` boolean — If true, limits licensing and creation of derivative works solely on the app on which the IP is made available.
          - `governingLaw` string — The laws of a certain jurisdiction by which this license abides. By default, this is California, USA.
          - `alternativeDisputeResolution` object — Alternative dispute resolution mechanisms for handling disagreements
            - `method` string, required
            - `details` string, required
          - `additionalTerms` object[] — Additional license parameters or terms the licensor would like to specify
            - `term` string, required
            - `description` string, required
        - `uri` string — License terms stored off-chain. If not provided, and if 'offChain' is also omitted, this will default to the Non-Commercial Social Remixing license terms.
      - object — Commercial use license terms
        - `type` 'commercial-use', required
        - `terms` object, required — Commercial use license terms
          - `defaultMintingFee` number, required — Default minting fee
          - `currency` string — Currency address (must be whitelisted in RoyaltyModule.sol). Defaults to the $WIP token. Whitelisted tokens: WIP (0x1514000000000000000000000000000000000000) on all networks, MERC20 (0xF2104833d386a2734a4eB3B8ad6FC6812F29E38E) on Aeneid Testnet
        - `offChain` object — Additional license terms that are stored off-chain due to their descriptive nature
          - `territory` string[] — Limit usage of the IP to certain regions and/or countries. By default, the IP can be used globally.
          - `channelsOfDistribution` string[] — Restrict usage of the IP to certain media formats and channels of distribution. By default, the IP can be used across all possible channels.
          - `attribution` object — If and how the original author should be credited for usage of the IP. By default, no credit is required.
            - `required` boolean, required
            - `instructions` string
          - `contentStandards` string[] — Set content standards around use of the IP. By default, no standards apply.
          - `sublicensable` boolean — If true, derivative works can grant the same rights they received under this license to a 3rd party, without approval from the original licensor.
          - `aiLearningModels` boolean — Whether or not the IP can be used to develop AI learning models. By default, the IP cannot be used for such development.
          - `restrictionOnCrossPlatformUse` boolean — If true, limits licensing and creation of derivative works solely on the app on which the IP is made available.
          - `governingLaw` string — The laws of a certain jurisdiction by which this license abides. By default, this is California, USA.
          - `alternativeDisputeResolution` object — Alternative dispute resolution mechanisms for handling disagreements
            - `method` string, required
            - `details` string, required
          - `additionalTerms` object[] — Additional license parameters or terms the licensor would like to specify
            - `term` string, required
            - `description` string, required
        - `uri` string — License terms stored off-chain. If not provided, and if 'offChain' is also omitted, this will default to the Non-Commercial Social Remixing license terms.
      - object — Commercial remix license terms
        - `type` 'commercial-remix', required
        - `terms` object, required — Commercial remix license terms
          - `defaultMintingFee` number, required — Default minting fee
          - `currency` string — Currency address (must be whitelisted in RoyaltyModule.sol). Defaults to the $WIP token. Whitelisted tokens: WIP (0x1514000000000000000000000000000000000000) on all networks, MERC20 (0xF2104833d386a2734a4eB3B8ad6FC6812F29E38E) on Aeneid Testnet
          - `commercialRevShare` number, required — Commercial revenue share percentage (number between 0 and 100)
        - `offChain` object — Additional license terms that are stored off-chain due to their descriptive nature
          - `territory` string[] — Limit usage of the IP to certain regions and/or countries. By default, the IP can be used globally.
          - `channelsOfDistribution` string[] — Restrict usage of the IP to certain media formats and channels of distribution. By default, the IP can be used across all possible channels.
          - `attribution` object — If and how the original author should be credited for usage of the IP. By default, no credit is required.
            - `required` boolean, required
            - `instructions` string
          - `contentStandards` string[] — Set content standards around use of the IP. By default, no standards apply.
          - `sublicensable` boolean — If true, derivative works can grant the same rights they received under this license to a 3rd party, without approval from the original licensor.
          - `aiLearningModels` boolean — Whether or not the IP can be used to develop AI learning models. By default, the IP cannot be used for such development.
          - `restrictionOnCrossPlatformUse` boolean — If true, limits licensing and creation of derivative works solely on the app on which the IP is made available.
          - `governingLaw` string — The laws of a certain jurisdiction by which this license abides. By default, this is California, USA.
          - `alternativeDisputeResolution` object — Alternative dispute resolution mechanisms for handling disagreements
            - `method` string, required
            - `details` string, required
          - `additionalTerms` object[] — Additional license parameters or terms the licensor would like to specify
            - `term` string, required
            - `description` string, required
        - `uri` string — License terms stored off-chain. If not provided, and if 'offChain' is also omitted, this will default to the Non-Commercial Social Remixing license terms.
  - `derivData` object, required — Data for the parent IP asset and license terms (for derivative IP assets only)
    - `parentIpIds` unknown[] — The parent IP IDs of the derivative IP asset
      - unknown
    - `licenseTermsIds` number[] — The license terms IDs of the derivative IP asset
    - `maxMintingFee` number — The max minting fee of the derivative IP asset
    - `maxRevenueShare` number — The max revenue share of the derivative IP asset
    - `maxRts` number — The max RTS of the derivative IP asset
  - `onChain` union, required
    - object
      - `chain` string, required — The chain of the collection
      - `contractAddress` string, required — The address of the collection on the chain
      - `status` 'success', required — The status of the IP asset on the chain
      - `ipAssetId` string, required — The id of the IP asset on the chain. This ID is also the address of the IP Account that is bound to the IP Asset.
      - `tokenId` string, required — The token id of the associatedNFT
      - `txId` string, required — The transaction id of the IP asset creation on chain
      - `owner` string, required — The owner of the IP asset
      - `explorerLink` string, uri — The explorer link of the ip asset
    - object — Response schema for a pending IP asset creation request
      - `chain` string, required — The chain of the collection
      - `contractAddress` string — The address of the collection on the chain
      - `status` 'pending', required — The status of the IP asset on the chain

---

[API](https://skmtc.net/crossmint/apis/onramp.md) · [All operations](https://skmtc.net/crossmint/apis/onramp/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/crossmint/onramp/revisions/e2143d192130/schema)
