Quick Start
Get up and running in seconds. Pick your preferred method below.
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/v1Response 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
npx trudev launchCommands
trudev launchInteractive token launch wizardtrudev status <mint-address>Check lock status for a tokentrudev profile <github-username>View all tokens by a developertrudev verify-dex <mint-address>Check DexScreener data for a tokentrudev tokensList recent token launchesLaunch Wizard Output
$ 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...AsUConfig File
For CI/CD and automated launches, use a trudev.json config file instead of the interactive wizard.
{
"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
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"
}| Param | Type | Description |
|---|---|---|
| walletPublicKey | string | Solana wallet public key (base58) |
| metadataUri | string | IPFS URI from /metadata/upload |
| name | string | Token name |
| ticker | string | Token ticker (max 10 chars) |
| buyAmountSol | number | Initial dev buy in SOL (> 0) |
| lockDurationDays | number | Vesting lock duration in days (>= 1) |
| lockPercentage | number | Percentage of tokens to lock (1-100) |
Response
{
"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
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"| Param | Type | Description |
|---|---|---|
| file | File | Token image (PNG/JPG) |
| name | string | Token name (required) |
| symbol | string | Token symbol (required) |
| description | string | Token description |
| string | Twitter URL (optional) | |
| telegram | string | Telegram URL (optional) |
| website | string | Website URL (optional) |
Response
{
"metadataUri": "https://arweave.net/..."
}GET /token/:ca
Returns the full token profile by mint address or ID.
Request
GET /api/v1/token/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsUResponse
{
"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
GET /api/v1/token/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU/lockResponse
{
"lock": {
"tokenName": "NeuralSwap",
"ticker": "$NSWAP",
"lockAmount": "4.2M",
"lockDuration": "180d",
"percentUnlocked": 12,
"daysRemaining": 158,
"start": "Jan 15",
"end": "Jul 14",
"status": "vesting"
}
}| Param | Type | Description |
|---|---|---|
| status | string | One of: fully_locked, vesting, fully_unlocked |
| percentUnlocked | number | 0-100 representing vesting progress |
| daysRemaining | number | Days until fully unlocked |
GET /dev/:username
Returns all tokens launched by a specific GitHub user.
Request
GET /api/v1/dev/alexchenResponse
{
"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
POST /api/v1/token/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU/verify-dexResponse
{
"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
| Param | Type | Description |
|---|---|---|
| tier | string | Filter by tier: locked, verified, builder, shipped |
| sort | string | Sort order: newest (default), oldest |
| limit | number | Results per page (default 20, max 100) |
| offset | number | Skip N results for pagination |
Request
GET /api/v1/feed?tier=shipped&sort=newest&limit=10Response
{
"tokens": [ ... ],
"meta": {
"total": 2,
"limit": 10,
"offset": 0,
"sort": "newest"
}
}Integration Examples
GitHub Actions (CI/CD Launch)
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)
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)
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();