TaxSplitTaxSplit Token

TaxSplit API Reference

Complete API documentation for integrating TaxSplit into your applications. Build custom token launchpads and manage Solana Token-2022 tokens with on-chain metadata programmatically.

Base URL

https://taxsplit.dev

Authentication

Most endpoints require JWT authentication. To get a token:

  1. 1Request a challenge message from POST /auth/challenge
  2. 2Sign the message with your Solana wallet
  3. 3Verify the signature at POST /auth/verify to receive a JWT token
  4. 4Include the token in the Authorization header: Bearer <token>

Rate Limits

  • General API: 100 requests per 15 minutes
  • Token creation: 5 requests per hour
  • Upload endpoints: 20 requests per hour

Authentication

TaxSplit uses wallet-based authentication with JWT tokens. Obtain a token via the challenge-verify flow, then include it in the Authorization header for authenticated endpoints.

POST/auth/challenge

Request a challenge message to sign with your Solana wallet.

Request Body

{
  "walletAddress": "DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK"
}

Response (200 OK)

{
  "challenge": "Sign this message to authenticate: 1234567890",
  "expiresAt": "2024-01-01T12:05:00Z"
}
POST/auth/verify

Verify the signed challenge message and receive a JWT token for authenticated requests.

Request Body

{
  "walletAddress": "DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK",
  "signature": "base58_encoded_signature",
  "message": "Sign this message to authenticate: 1234567890"
}

Response (200 OK)

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": "uuid",
    "walletAddress": "DYw8jCTfwHNRJhhmFcbXvVDTqWMEVFBX6ZKUmG5CNSKK"
  }
}

Token expires in: 7 days

Tokens

Create Solana Token-2022 tokens with on-chain metadata and built-in tax distribution mechanisms. All token creation endpoints require JWT authentication.

POST/tokens/generate-distribution-wallet

Generate a distribution wallet for fee collection. Called when user opens token creation page.

Public Endpoint (No Auth Required)

Response (200 OK)

{
  "walletId": "uuid",
  "address": "DistributionWalletAddress..."
}

Note: The walletId must be sent in create-unsigned request. The wallet address is derived deterministically on backend.

POST/tokens/upload-image

Upload token image to IPFS. Image is optimized to 512x512 JPG.

Requires Authentication

Request (multipart/form-data)

image: [File] (PNG/JPG, max 1MB)

Response (200 OK)

{
  "success": true,
  "imageUri": "https://ipfs.io/ipfs/QmAbc...",
  "imageCid": "QmAbc..."
}
POST/tokens/create-unsigned

Create an unsigned Solana Token-2022 transaction with on-chain metadata. Transaction expires in 5 minutes and must be signed by the user wallet.

Requires Authentication

Request Body

{
  "name": "My Token",
  "symbol": "MTK",
  "description": "Token description",
  "imageUri": "https://ipfs.io/ipfs/QmAbc...",
  
  // Optional social links
  "twitter": "https://twitter.com/mytoken",
  "telegram": "https://t.me/mytoken",
  "website": "https://mytoken.com",
  
  // Token economics
  "transferFeePercent": 5,
  "burnPercent": 10,
  "developerFeePercent": 30,
  "developerWallet": "DevWalletAddress...",
  
  // Distribution settings
  "distributionInterval": "15m",
  "percentageToSellPerDistribution": 25,
  "rewardToken": "SOL",
  "minimumHoldingRequirement": "1000000",
  
  // Token settings
  "decimals": 6,
  "supply": "1000000000000000",
  "transferFeeAdjustable": false,
  "immutableMetadata": true
}

Response (200 OK)

{
  "transaction": "base64_encoded_transaction",
  "transactionId": "uuid",
  "expiresAt": "2024-01-01T12:05:00Z",
  "mintKeypair": {
    "publicKey": "MintPublicKey...",
    "secretKey": [/* encrypted */]
  }
}

⏱️ Transaction expires in 5 minutes

POST/tokens/submit

Submit a signed transaction to Solana and save token metadata.

Requires Authentication

Request Body

{
  "transactionId": "uuid",
  "signedTransaction": "base64_encoded_signed_transaction"
}

Response (200 OK)

{
  "success": true,
  "signature": "transaction_signature",
  "mintAddress": "TokenMintAddress...",
  "token": {
    "id": "uuid",
    "mintAddress": "TokenMintAddress...",
    "name": "My Token",
    "symbol": "MTK",
    "imageUri": "https://ipfs.io/ipfs/QmAbc...",
    "createdAt": "2024-01-01T12:00:00Z"
  }
}

Token Management

Retrieve and manage your created tokens.

GET/tokens

Get paginated list of all visible tokens.

Query Parameters

page(number, default: 1) - Page number
limit(number, default: 20, max: 100) - Items per page

Response (200 OK)

{
  "tokens": [
    {
      "id": "uuid",
      "mintAddress": "TokenMintAddress...",
      "name": "My Token",
      "symbol": "MTK",
      "imageUri": "https://ipfs.io/ipfs/QmAbc...",
      "description": "Token description",
      "transferFeePercent": 5,
      "poolAddress": "PoolAddress...",
      "createdAt": "2024-01-01T12:00:00Z"
    }
  ],
  "pagination": {
    "total": 150,
    "page": 1,
    "limit": 20,
    "totalPages": 8
  }
}
GET/tokens/me

Get list of tokens created by authenticated user.

Requires Authentication

Response (200 OK)

{
  "tokens": [
    {
      "id": "uuid",
      "mintAddress": "TokenMintAddress...",
      "name": "My Token",
      "symbol": "MTK",
      "imageUri": "https://ipfs.io/ipfs/QmAbc...",
      "distributionEnabled": true,
      "createdAt": "2024-01-01T12:00:00Z"
    }
  ]
}
GET/tokens/:mintAddress

Get detailed information about a specific token.

Path Parameters

mintAddress(string) - Solana mint address

Response (200 OK)

{
  "token": {
    "id": "uuid",
    "mintAddress": "TokenMintAddress...",
    "name": "My Token",
    "symbol": "MTK",
    "decimals": 6,
    "supply": "1000000000000000",
    "imageUri": "https://ipfs.io/ipfs/QmAbc...",
    "description": "Token description",
    "twitter": "https://twitter.com/mytoken",
    "telegram": "https://t.me/mytoken",
    "website": "https://mytoken.com",
    "transferFeePercent": 5,
    "burnPercent": 10,
    "developerFeePercent": 30,
    "developerWallet": "DevWalletAddress...",
    "distributionWallet": "DistributionWalletAddress...",
    "distributionInterval": "15m",
    "distributionEnabled": true,
    "poolAddress": "PoolAddress...",
    "poolCreatedAt": "2024-01-01T12:30:00Z",
    "createdAt": "2024-01-01T12:00:00Z",
    "updatedAt": "2024-01-01T12:00:00Z"
  }
}

Distribution Settings

Manage automatic tax distribution settings for your tokens.

GET/distribution/:tokenId/settings

Get distribution settings for a token.

Requires Authentication (must be token creator)

Response (200 OK)

{
  "rewardToken": "SOL",
  "distributionModel": "proportional",
  "minimumHoldingRequirement": "1000000",
  "percentageToSellPerDistribution": 25,
  "distributionEnabled": true,
  "distributionInterval": "15m",
  "burnPercent": 10,
  "developerFeePercent": 30,
  "developerWallet": "DevWalletAddress...",
  "telegramGroupId": "-1001234567890"
}
PATCH/distribution/:tokenId/settings

Update distribution settings for a token.

Requires Authentication (must be token creator)

Request Body (all fields optional)

{
  "rewardToken": "SOL",
  "minimumHoldingRequirement": "1000000",
  "percentageToSellPerDistribution": 50,
  "distributionEnabled": true,
  "telegramGroupId": "-1001234567890",
  "distributionInterval": "30m",
  "burnPercent": 15,
  "developerFeePercent": 40,
  "developerWallet": "NewDevWalletAddress..."
}

Validation Rules

distributionInterval: 5m, 10m, 15m, 30m, 1h, 6h, 12h, 24h
burnPercent: 0-100
developerFeePercent: 0-100
developerWallet: Valid Solana address (32-44 characters)

Burns

Track token burn statistics and history.

GET/burns/:mintAddress

Get burn statistics for a specific token including total amount burned and burn history.

Path Parameters

mintAddress(string) - Token mint address

Response (200 OK)

{
  "totalBurned": "50000000000",
  "burns": [
    {
      "id": "uuid",
      "amount": "10000000000",
      "signature": "transaction_signature",
      "timestamp": "2024-01-01T12:00:00Z"
    }
  ]
}

DEX Integration

Create liquidity pools on Raydium CPMM (Constant Product Market Maker).

POST/dex/raydium/cpmm/create-unsigned

Create unsigned transaction for Raydium CPMM pool.

Requires Authentication

Request Body

{
  "tokenMint": "TokenMintAddress...",
  "tokenAmount": "1000000000000",
  "solAmount": "1000000000"
}

Response (200 OK)

{
  "transaction": "base64_encoded_transaction",
  "poolId": "pool_identifier",
  "poolKeys": {
    "id": "PoolAddress...",
    "baseMint": "TokenMintAddress...",
    "quoteMint": "So11111111111111111111111111111111111111112",
    "lpMint": "LpMintAddress...",
    "baseVault": "BaseVaultAddress...",
    "quoteVault": "QuoteVaultAddress..."
  }
}

LaunchLabs

Raydium LaunchLab bonding curve integration for token launches with automated liquidity provision.

POST/launchpad/create-unsigned

Create unsigned transaction for Raydium LaunchLab bonding curve deployment.

Requires Authentication

Request Body

{
  "tokenMint": "TokenMintAddress...",
  "tokenAmount": "1000000000000",
  "targetMarketCap": "100000"
}

Response (200 OK)

{
  "transaction": "base64_encoded_transaction",
  "bondingCurveId": "bonding_curve_identifier",
  "expectedLaunchTime": "2024-01-15T12:00:00Z"
}
GET/launchpad/:mintAddress/status

Get bonding curve status and progress for a token launch.

Path Parameters

mintAddress(string) - Token mint address

Response (200 OK)

{
  "bondingCurveId": "bonding_curve_identifier",
  "status": "active",
  "currentMarketCap": "45000",
  "targetMarketCap": "100000",
  "progress": 45,
  "tokensSold": "450000000000",
  "totalTokens": "1000000000000",
  "solCollected": "45.5",
  "createdAt": "2024-01-01T12:00:00Z"
}

Error Handling

All errors follow a consistent format for easy handling.

Error Response Format

{
  "error": "Error message",
  "details": [/* optional validation errors */]
}

HTTP Status Codes

200Success
400Bad Request - Validation error
401Unauthorized - Missing or invalid JWT token
403Forbidden - Not authorized to access this resource
404Not Found - Resource doesn't exist
429Too Many Requests - Rate limit exceeded
500Internal Server Error

Example Errors

Validation Error:

{
  "error": "Validation error",
  "details": [
    {
      "path": ["name"],
      "message": "String must contain at least 1 character(s)"
    }
  ]
}

Authentication Error:

{
  "error": "Unauthorized",
  "message": "Invalid or expired token"
}

Not Found Error:

{
  "error": "Token not found"
}

Need Help with the API?

Join our Telegram community for API support, integration help, and to connect with other developers building on TaxSplit.