Issuance

Create token

Creates a token record that can later be deployed to Solana.

post/v1/issuance/tokens

Headers

x-project-idstring

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.

Example:prj_example

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

namestring required

Token name.

symbolstring required

Ticker symbol.

signingWalletIdstring

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.

decimalsinteger

Token decimals.

descriptionstring

Token description.

uristring uri

Metadata URI passed to on-chain token metadata (points to off-chain JSON).

imageUrlstring uri

Token image URL.

maxSupplystring

Maximum supply as a string (UI units).

template'stablecoin' | 'arcade' | 'tokenized-security' | 'custom'

Token template preset. Defaults to 'custom' if not specified.

requiresAllowlistboolean

Require allowlist checks for transfers.

isMintableboolean

Allow minting after creation.

isFreezableboolean

Allow freezing token accounts.

Example request

{
  "name": "Example Token",
  "symbol": "EXM",
  "signingWalletId": "privy_wallet_123",
  "decimals": 6,
  "description": "Example token description.",
  "uri": "https://example.com/metadata.json",
  "imageUrl": "https://example.com/token.png",
  "maxSupply": "1000000",
  "template": "stablecoin",
  "overrides": {
    "extensions": {
      "transferFee": {
        "basisPoints": 50,
        "maxFee": "0.5"
      }
    }
  },
  "requiresAllowlist": true,
  "isMintable": true,
  "isFreezable": true
}

Response

Token created

Example response

{
  "data": {
    "token": {
      "id": "tok_example",
      "projectId": "prj_example",
      "organizationId": "org_example",
      "signingWalletId": "privy_wallet_123",
      "mintAddress": "So11111111111111111111111111111111111111112",
      "mintAuthority": "So11111111111111111111111111111111111111112",
      "freezeAuthority": "So11111111111111111111111111111111111111112",
      "ablListAddress": "So11111111111111111111111111111111111111112",
      "name": "Example Token",
      "symbol": "EXM",
      "decimals": 9,
      "description": "Example token description.",
      "uri": "https://example.com/metadata.json",
      "imageUrl": "https://example.com/token.png",
      "template": "stablecoin",
      "extensions": {
        "transferFee": {
          "basisPoints": 25,
          "maxFee": "0.5",
          "transferFeeConfigAuthority": "So11111111111111111111111111111111111111112",
          "withdrawWithheldAuthority": "So11111111111111111111111111111111111111112"
        },
        "interestBearing": {
          "rate": 2.5,
          "rateAuthority": "So11111111111111111111111111111111111111112"
        },
        "permanentDelegate": "So11111111111111111111111111111111111111112",
        "pausable": {
          "authority": "So11111111111111111111111111111111111111112"
        },
        "defaultAccountState": "initialized",
        "scaledUiAmount": {
          "authority": "So11111111111111111111111111111111111111112",
          "multiplier": 1,
          "newMultiplier": 2,
          "newMultiplierEffectiveTimestamp": 1735689600
        },
        "transferHook": {
          "programId": "So11111111111111111111111111111111111111112",
          "authority": "So11111111111111111111111111111111111111112"
        }
      },
      "totalSupply": "1000000",
      "maxSupply": "10000000",
      "isMintable": true,
      "isFreezable": true,
      "status": "active",
      "deployedAt": "2025-01-05T00:00:00.000Z",
      "createdBy": "key_example",
      "createdAt": "2025-01-01T00:00:00.000Z",
      "updatedAt": "2025-01-02T00:00:00.000Z"
    }
  },
  "meta": {
    "requestId": "req_example",
    "timestamp": "2025-01-01T00:00:00.000Z"
  }
}

Changes

Changed in 1 of the 10 revisions of this API.4

    • added the new SERVICE_UNAVAILABLE enum value to the error/code response property for the response status 400

      response-property-enum-value-added

    • added the new SERVICE_UNAVAILABLE enum value to the error/code response property for the response status 401

      response-property-enum-value-added

    • added the new SERVICE_UNAVAILABLE enum value to the error/code response property for the response status 403

      response-property-enum-value-added

    • added the new SERVICE_UNAVAILABLE enum value to the error/code response property for the response status 500

      response-property-enum-value-added