Quick Start

Get up and running in seconds. Pick your preferred method below.

# launch a token with locked dev allocation
$npx trudev launch

API Overview

The trudev.fun REST API lets you integrate token launches, lock queries, and developer profiles into CLIs, bots, CI/CD pipelines, and dashboards. All endpoints return JSON and support CORS.

Base URL

https://www.trudev.fun/api/v1

Response Format

All responses are JSON. Successful responses return the data directly. Errors return { "error": "message" } with an appropriate HTTP status code.

No auth required

All GET endpoints are public. POST endpoints require valid input parameters but no API key during the MVP phase.

CLI

Launch tokens directly from your terminal. The CLI wraps the REST API and handles wallet signing locally — your private key never leaves your machine.

Installation

bash
npx trudev launch

Commands

trudev launchInteractive token launch wizard
trudev status <mint-address>Check lock status for a token
trudev profile <github-username>View all tokens by a developer
trudev verify-dex <mint-address>Check DexScreener data for a token
trudev tokensList recent token launches

Launch Wizard Output

terminal
$ trudev launch

  trudev.fun — token launcher with locked dev allocations

  ? Token name: MyToken
  ? Ticker: $MTK
  ? Description: A community token with locked dev allocation
  ? Image path: ./token-logo.png
  ? Initial buy (SOL): 1.5
  ? Lock duration (days): 90
  ? Lock percentage: 100
  ? GitHub username (optional): myuser
  ? GitHub repo (optional): myuser/mytoken

  Uploading metadata to IPFS... done
  Building create transaction... done

  Review:
    Token:     MyToken ($MTK)
    Buy:       1.5 SOL
    Lock:      100% for 90 days
    Mint:      7xKX...AsU

  ? Sign and submit? Yes

  Transaction submitted: 5xYZ...abc
  Token live at: https://www.trudev.fun/token/7xKX...AsU

Config File

For CI/CD and automated launches, use a trudev.json config file instead of the interactive wizard.

json
{
  "name": "MyToken",
  "ticker": "MTK",
  "description": "A community token with locked dev allocation",
  "image": "./token-logo.png",
  "buyAmountSol": 1.5,
  "lockDurationDays": 90,
  "lockPercentage": 100,
  "githubUsername": "myuser",
  "githubRepo": "myuser/mytoken",
  "liveUrl": "https://mytoken.app",
  "twitterUrl": "https://x.com/mytoken",
  "telegramUrl": "https://t.me/mytoken",
  "websiteUrl": "https://mytoken.app"
}

Then run: trudev launch --config trudev.json

POST /launch

Builds a pump.fun create+buy transaction with an ephemeral mint keypair. Returns serialized transaction bytes for client-side signing.

Request

json
POST /api/v1/launch
Content-Type: application/json

{
  "walletPublicKey": "YourWalletPublicKeyBase58",
  "metadataUri": "https://...",
  "name": "MyToken",
  "ticker": "MTK",
  "description": "A community token",
  "buyAmountSol": 1.5,
  "lockDurationDays": 90,
  "lockPercentage": 100,
  "githubUsername": "myuser",
  "githubRepo": "myuser/mytoken"
}
ParamTypeDescription
walletPublicKeystringSolana wallet public key (base58)
metadataUristringIPFS URI from /metadata/upload
namestringToken name
tickerstringToken ticker (max 10 chars)
buyAmountSolnumberInitial dev buy in SOL (> 0)
lockDurationDaysnumberVesting lock duration in days (>= 1)
lockPercentagenumberPercentage of tokens to lock (1-100)

Response

json
{
  "transaction": "base64-encoded-transaction-bytes",
  "mintPublicKey": "EphemeralMintPublicKeyBase58",
  "mintSecretKey": "base64-encoded-mint-secret-key"
}

Why mintSecretKey?

The mint keypair is ephemeral — generated per-launch for the token's mint account. Your client needs it to co-sign the create transaction. The server never touches your wallet's private key.

POST /metadata/upload

Uploads token image and metadata to IPFS via pump.fun's endpoint. Returns a metadata URI for use in the /launch endpoint.

Request

bash
curl -X POST https://www.trudev.fun/api/v1/metadata/upload \
  -F "file=@token-logo.png" \
  -F "name=MyToken" \
  -F "symbol=MTK" \
  -F "description=A community token" \
  -F "twitter=https://x.com/mytoken" \
  -F "website=https://mytoken.app"
ParamTypeDescription
fileFileToken image (PNG/JPG)
namestringToken name (required)
symbolstringToken symbol (required)
descriptionstringToken description
twitterstringTwitter URL (optional)
telegramstringTelegram URL (optional)
websitestringWebsite URL (optional)

Response

json
{
  "metadataUri": "https://arweave.net/..."
}

GET /token/:ca

Returns the full token profile by mint address or ID.

Request

bash
GET /api/v1/token/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU

Response

json
{
  "token": {
    "id": 1,
    "name": "NeuralSwap",
    "ticker": "$NSWAP",
    "tier": 4,
    "tierLabel": "SHIPPED",
    "image": "NS",
    "dev": {
      "github": "alexchen",
      "avatar": "AC",
      "accountAge": "3yr"
    },
    "lock": {
      "amount": "4.2M",
      "duration": "180d",
      "pct": 12,
      "start": "Jan 15",
      "end": "Jul 14"
    },
    "mcap": "$482K",
    "vol": "$89K",
    "price": "$0.000482",
    "chg": "+34.2%",
    "holders": 1847
  }
}

GET /token/:ca/lock

Returns the vesting lock status for a token — useful for monitoring dashboards and automated alerts.

Request

bash
GET /api/v1/token/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU/lock

Response

json
{
  "lock": {
    "tokenName": "NeuralSwap",
    "ticker": "$NSWAP",
    "lockAmount": "4.2M",
    "lockDuration": "180d",
    "percentUnlocked": 12,
    "daysRemaining": 158,
    "start": "Jan 15",
    "end": "Jul 14",
    "status": "vesting"
  }
}
ParamTypeDescription
statusstringOne of: fully_locked, vesting, fully_unlocked
percentUnlockednumber0-100 representing vesting progress
daysRemainingnumberDays until fully unlocked

GET /dev/:username

Returns all tokens launched by a specific GitHub user.

Request

bash
GET /api/v1/dev/alexchen

Response

json
{
  "developer": "alexchen",
  "tokens": [
    {
      "id": 1,
      "name": "NeuralSwap",
      "ticker": "$NSWAP",
      "tier": 4,
      "tierLabel": "SHIPPED",
      ...
    }
  ]
}

POST /token/:ca/verify-dex

Fetches DexScreener data for a token mint address. Returns trading pair information including price, volume, liquidity, and fully diluted valuation.

Request

bash
POST /api/v1/token/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU/verify-dex

Response

json
{
  "found": true,
  "pairs": [
    {
      "dex": "raydium",
      "pairAddress": "...",
      "baseToken": "NSWAP",
      "quoteToken": "SOL",
      "priceUsd": "0.000482",
      "volume24h": 89000,
      "liquidityUsd": 45000,
      "fdv": 482000
    }
  ]
}

GET /feed

Returns a paginated list of tokens. Supports filtering by trust tier and sorting by creation date.

Query Parameters

ParamTypeDescription
tierstringFilter by tier: locked, verified, builder, shipped
sortstringSort order: newest (default), oldest
limitnumberResults per page (default 20, max 100)
offsetnumberSkip N results for pagination

Request

bash
GET /api/v1/feed?tier=shipped&sort=newest&limit=10

Response

json
{
  "tokens": [ ... ],
  "meta": {
    "total": 2,
    "limit": 10,
    "offset": 0,
    "sort": "newest"
  }
}

Integration Examples

GitHub Actions (CI/CD Launch)

yaml
name: Launch Token
on:
  workflow_dispatch:

jobs:
  launch:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Upload metadata
        id: metadata
        run: |
          RESPONSE=$(curl -s -X POST https://www.trudev.fun/api/v1/metadata/upload \
            -F "file=@./token-logo.png" \
            -F "name=${{ vars.TOKEN_NAME }}" \
            -F "symbol=${{ vars.TOKEN_TICKER }}" \
            -F "description=${{ vars.TOKEN_DESC }}")
          echo "uri=$(echo $RESPONSE | jq -r '.metadataUri')" >> $GITHUB_OUTPUT

      - name: Build launch transaction
        run: |
          curl -s -X POST https://www.trudev.fun/api/v1/launch \
            -H "Content-Type: application/json" \
            -d '{
              "walletPublicKey": "${{ secrets.WALLET_PUBKEY }}",
              "metadataUri": "${{ steps.metadata.outputs.uri }}",
              "name": "${{ vars.TOKEN_NAME }}",
              "ticker": "${{ vars.TOKEN_TICKER }}",
              "buyAmountSol": 1.0,
              "lockDurationDays": 90,
              "lockPercentage": 100
            }'

Bot Integration (TypeScript)

typescript
const BASE = "https://www.trudev.fun/api/v1";

async function getTokenLockStatus(mintAddress: string) {
  const res = await fetch(`${BASE}/token/${mintAddress}/lock`);
  const data = await res.json();

  if (data.error) throw new Error(data.error);

  const { lock } = data;
  console.log(`${lock.tokenName} (${lock.ticker})`);
  console.log(`Status: ${lock.status}`);
  console.log(`${lock.percentUnlocked}% unlocked, ${lock.daysRemaining}d remaining`);

  return lock;
}

async function getDevTokens(username: string) {
  const res = await fetch(`${BASE}/dev/${username}`);
  return res.json();
}

Lock Status Monitor (Polling)

typescript
const MINT = "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU";
const POLL_INTERVAL = 60_000; // 1 minute

async function pollLockStatus() {
  const res = await fetch(
    `https://www.trudev.fun/api/v1/token/${MINT}/lock`
  );
  const { lock } = await res.json();

  if (lock.status === "fully_unlocked") {
    console.log("ALERT: Dev tokens are fully unlocked!");
    // Send notification...
    return;
  }

  console.log(`${lock.percentUnlocked}% unlocked — ${lock.daysRemaining}d left`);
  setTimeout(pollLockStatus, POLL_INTERVAL);
}

pollLockStatus();