---
title: "Create token with asset profile"
method: POST
path: "/v1/issuance/asset-profiles"
tags: ["Asset Profiles"]
---

# Create token with asset profile

`POST /v1/issuance/asset-profiles`

Creates an issued token and its asset profile atomically in a single transaction: if either write fails, both roll back, so a token is never persisted without a profile. Requires the Asset Profiles feature to be enabled.

## Headers

- `x-project-id` string — Selects the active project for this request. Required for session/dashboard callers. Ignored when authenticating with an API key, whose scope is fixed to the key's project.

## Request body

- object — Create token + asset profile request body: the token-create fields plus the asset profile's category, type, and issuance metadata. The token and its profile are created atomically.
  - `name` string, required — Token name.
  - `symbol` string, required — Ticker symbol.
  - `signingWalletId` string — Preferred signer wallet for token deploy/admin/write actions — the `walletId` field returned by GET /v1/wallets. The wallet record `id` and the public key are not accepted.
  - `decimals` integer — Token decimals.
  - `description` string — Token description.
  - `uri` string, uri — Metadata URI passed to on-chain token metadata (points to off-chain JSON).
  - `imageUrl` string, uri — Token image URL.
  - `maxSupply` string — Maximum supply as a string (UI units).
  - `template` 'stablecoin' | 'arcade' | 'tokenized-security' | 'custom' — Token template preset. Defaults to 'custom' if not specified.
  - `overrides` object — Template overrides to customize defaults.
    - `extensions` object — Override template extension configuration.
      - `transferFee` union — Transfer fee configuration or false to disable.
        - false
        - object
          - `basisPoints` integer, required — Transfer fee in basis points.
          - `maxFee` string, required — Maximum fee in UI units.
          - `transferFeeConfigAuthority` string — Authority to configure transfer fees. Defaults to platform authority.
          - `withdrawWithheldAuthority` string — Authority to withdraw withheld fees. Defaults to platform authority.
      - `interestBearing` union — Interest-bearing configuration or false to disable.
        - false
        - object
          - `rate` number, required — Interest rate in percent.
          - `rateAuthority` string — Authority that can update the rate. Defaults to platform authority.
      - `permanentDelegate` union — Permanent delegate authority address, or false to disable.
        - false
        - string
      - `pausable` union — Pausable configuration or false to disable.
        - false
        - object
          - `authority` string — Authority that can pause/resume transfers. Defaults to platform authority.
      - `nonTransferable` boolean — Enable/disable non-transferable.
      - `defaultAccountState` 'initialized' | 'frozen' — Override default account state.
      - `scaledUiAmount` union — Scaled UI amount configuration or false to disable.
        - false
        - object
          - `authority` string — Authority that can update scaled UI parameters. Defaults to platform authority.
          - `multiplier` number, required — Current UI multiplier.
          - `newMultiplier` number — Scheduled multiplier.
          - `newMultiplierEffectiveTimestamp` integer — Unix timestamp (seconds) when the new multiplier takes effect.
      - `transferHook` union — Transfer hook configuration or false to disable.
        - false
        - object
          - `programId` string, required — Transfer hook program id.
          - `authority` string — Authority that can update the hook program. Defaults to platform authority.
    - `requiresAllowlist` boolean — Override allowlist requirement (if template allows).
  - `requiresAllowlist` boolean — Require allowlist checks for transfers.
  - `isMintable` boolean — Allow minting after creation.
  - `isFreezable` boolean — Allow freezing token accounts.
  - `assetCategory` 'generic' | 'stablecoin' | 'tokenized_security' — Asset category for the token's profile. Defaults to generic.
  - `assetType` string — Asset type within the category. Must be supported for the category.
  - `issuanceMetadata` object — Optional canonical issuance metadata for the profile. Public metadata is derived from it.
    - `asset` object
    - `compliance` object
    - `chain` object
    - `custom` object
      - `customer` object
      - `integration` object
    - `visibility` object
      - `public` string[]
    - `settings` object
      - `version` integer
      - `selected` object, required

## Response `201`

Token and asset profile created

- object — Standard success response envelope.
  - `data` object, required — Token + asset profile response payload.
    - `token` object, required — The created token.
      - `id` string, required — Token identifier.
      - `projectId` string, required — Project identifier.
      - `organizationId` string, required — Organization identifier.
      - `signingWalletId` string, nullable, required — Preferred signer wallet for token deploy/admin/write actions.
      - `mintAddress` string, nullable, required — Mint address once deployed.
      - `mintAuthority` string, nullable, required — Mint authority address, if set.
      - `freezeAuthority` string, nullable, required — Freeze authority address, if set.
      - `ablListAddress` string, nullable, required — On-chain allowlist/blocklist address, if enabled.
      - `name` string, required — Token name.
      - `symbol` string, required — Token symbol.
      - `decimals` integer, required — Token decimals.
      - `description` string, nullable, required — Token description.
      - `uri` string, nullable, required — Metadata URI passed to on-chain token metadata (points to off-chain JSON).
      - `imageUrl` string, nullable, required — Token image URL.
      - `template` 'stablecoin' | 'arcade' | 'tokenized-security' | 'custom' | 'rwa', required — Token template identifier.
      - `extensions` object, nullable, required — Token-2022 extensions configuration.
        - `transferFee` object — Transfer fee configuration.
          - `basisPoints` integer, required — Transfer fee in basis points (0-10000).
          - `maxFee` string, required — Maximum fee in UI units.
          - `transferFeeConfigAuthority` string, required — Authority to configure transfer fees.
          - `withdrawWithheldAuthority` string, required — Authority to withdraw withheld fees.
        - `interestBearing` object — Interest-bearing configuration.
          - `rate` number, required — Interest rate in percent.
          - `rateAuthority` string, required — Authority that can update the rate.
        - `permanentDelegate` string — Permanent delegate address.
        - `pausable` object — Pausable configuration.
          - `authority` string — Authority that can pause/resume transfers.
        - `nonTransferable` boolean — Mark token as non-transferable.
        - `defaultAccountState` 'initialized' | 'frozen' — Default account state.
        - `scaledUiAmount` object — Scaled UI amount configuration.
          - `authority` string — Authority that can update scaled UI parameters.
          - `multiplier` number, required — Current UI multiplier.
          - `newMultiplier` number, required — Scheduled multiplier.
          - `newMultiplierEffectiveTimestamp` integer, required — Unix timestamp (seconds) when the new multiplier takes effect.
        - `transferHook` object — Transfer hook configuration.
          - `programId` string, required — Transfer hook program id.
          - `authority` string — Authority that can update the transfer hook program.
      - `totalSupply` string, required — Cached total supply in UI units (stored to avoid frequent RPC reads). Use POST /v1/issuance/tokens/{tokenId}/supply/refresh to force an on-chain refresh.
      - `totalSupplyUpdatedAt` string, date-time, nullable, required — Timestamp when supply was last refreshed.
      - `maxSupply` string, nullable, required — Maximum supply in UI units, if capped.
      - `isMintable` boolean, required — Whether additional minting is allowed.
      - `isFreezable` boolean, required — Whether freeze authority is enabled.
      - `requiresAllowlist` boolean, required — Whether transfers require allowlist approval.
      - `status` 'pending' | 'active' | 'paused' | 'revoked', required — Token lifecycle status.
      - `deployedAt` string, date-time, nullable, required — Deployment timestamp, if deployed.
      - `createdBy` string, required — Actor identifier that created the token.
      - `createdAt` string, date-time, required — Creation timestamp.
      - `updatedAt` string, date-time, required — Last update timestamp.
    - `assetProfile` object, required — The created asset profile.
      - `id` string, required — Asset profile identifier.
      - `organizationId` string, required — Organization identifier.
      - `projectId` string, required — Project identifier.
      - `tokenId` string, required — Identifier of the issued token this profile describes.
      - `assetCategory` 'generic' | 'stablecoin' | 'tokenized_security', required — Broad product/regulatory grouping for an issued asset.
      - `assetType` string, required — Concrete asset type within the category.
      - `assetTypeVersion` integer, required — Version of the asset type registry contract this profile was validated against.
      - `issuanceMetadata` object, required — Canonical, private master metadata for the asset. SDP-owned namespaces (asset, compliance, chain) plus a namespaced custom bucket (customer, integration). The optional `visibility.public` array holds the issuance_metadata dot-paths the issuer chose to expose publicly; when omitted, the asset type's registry default is used. Only asset.* and chain.decimals paths can ever be projected publicly — compliance and custom fields are private by default and can never be exposed, even if listed in visibility.public. The optional `settings` namespace holds the selected advanced (Token-2022) settings; `version` is server-stamped and each selected key is validated against the asset type's capability.
        - `asset` object
        - `compliance` object
        - `chain` object
        - `custom` object
          - `customer` object
          - `integration` object
        - `visibility` object
          - `public` string[]
        - `settings` object
          - `version` integer
          - `selected` object, required
      - `publicMetadata` object, required — Safe public subset of the issuance metadata, derived via the asset type's projection rules. Served by the public token metadata URI.
      - `status` 'active' | 'archived', required — Asset profile status.
      - `createdBy` string, nullable, required — User who created the profile. Null when created via API key.
      - `createdAt` string, date-time, required — Creation timestamp.
      - `updatedAt` string, date-time, required — Last update timestamp.
  - `meta` object, required — Response metadata.
    - `requestId` string, required — Request identifier for tracing.
    - `timestamp` string, date-time, required — ISO 8601 timestamp.

## Other responses

- `400` — Error
- `401` — Error
- `403` — Error
- `500` — Error

---

[API](https://skmtc.net/solana/apis/solana-developer-platform-api.md) · [All operations](https://skmtc.net/solana/apis/solana-developer-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/solana/solana-developer-platform-api/revisions/672b1916ba61/schema)
