Skip to main content

Create Token

POST https://api.shrine.trade/bnb/api/create-token

Builds the Flap launch transaction for you: metadata pinned through Flap's IPFS gateway, the vanity address Flap requires, the tax setup if you want one, and - if you want one - a dev buy in the same transaction. You sign and send it; the token and its bonding curve exist as soon as it confirms.

shrine.trade takes no fee on creation, and neither does Flap: the only cost is gas. The transaction value is your dev buy, if any.

Flap

Every launch goes on the Flap bonding curve and graduates to PancakeSwap on its own once 800M tokens are sold. Two kinds of token:

  • Standard - no tax. Graduates to a PancakeSwap Infinity pool whose LP fees are paid to holders as a dividend.
  • Tax token - you set a tax on buys and sells, charged on every trade. Flap's tax system decides where it goes: to you, burned, paid to holders as dividends, added to liquidity, or any mix. Graduates to PancakeSwap v2. This is what most Flap launches are.
About the private key field

The key never leaves your machine. It signs locally; only the signed transaction is handed to /api/send to broadcast. The key itself is never sent to shrine.trade.

Pinning happens first: Build waits for the image and metadata to finish pinning to IPFS, so the token shows up on flap.sh with its image the moment it launches.

Example

const { readFileSync } = require("node:fs");
const { Wallet } = require("ethers");

// ─── your token ───────────────────────────────────────
const PRIVATE_KEY = "0xYOUR_PRIVATE_KEY";
const NAME = "Grene";
const SYMBOL = "GRENE";
const IMAGE = "./logo.png"; // image file, next to this script
const DESCRIPTION = "the greenest coin on BNB Chain";

// ─── links — all optional, "" to leave one out ────────
const TWITTER = "https://x.com/grene";
const TELEGRAM = "";
const WEBSITE = "https://grene.example";

// ─── economics ────────────────────────────────────────
const PAIR_TOKEN = "BNB"; // what the curve holds: BNB, USD1, a stock ticker like NVDAB or TSLAB, or an address
const DEV_BUY = ""; // your own opening buy, in PAIR_TOKEN. "" = none
const BUY_TAX = 0; // % of every buy. 0 on both = standard token
const SELL_TAX = 0; // % of every sell
const BENEFICIARY = ""; // where your share of the tax goes. "" = the launching wallet
// how the tax splits, % of the tax, must add up to 100:
const TO_YOU = 100; // to BENEFICIARY, in the quote asset
const BURNED = 0;
const TO_HOLDERS = 0; // as dividends, in DIVIDEND_TOKEN
const TO_LIQUIDITY = 0;
const DIVIDEND_TOKEN = "quote"; // "quote", "self", or an ERC-20 address
// ──────────────────────────────────────────────────────

async function main() {
const wallet = new Wallet(PRIVATE_KEY); // signs only; no node needed

// 1. Pin the image + metadata through Flap's IPFS gateway.
const form = new FormData();
form.append("file", new Blob([readFileSync(IMAGE)], { type: "image/png" }), "logo.png");
form.append("description", DESCRIPTION);
form.append("twitter", TWITTER);
form.append("telegram", TELEGRAM);
form.append("website", WEBSITE);

const up = await fetch("https://api.shrine.trade/bnb/api/upload-image", {
method: "POST",
body: form,
});
const uploaded = await up.json();
if (uploaded.error) throw new Error(`${uploaded.error}: ${uploaded.message}`);
console.log("metadata pinned:", uploaded.meta);

// 2. Ask shrine.trade to build the launch transaction.
const res = await fetch("https://api.shrine.trade/bnb/api/create-token", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
name: NAME,
symbol: SYMBOL,
meta: uploaded.meta,
pairToken: PAIR_TOKEN,
buyTaxBps: BUY_TAX * 100,
sellTaxBps: SELL_TAX * 100,
// Left out entirely when empty - the API picks sane defaults.
...(DEV_BUY ? { initialBuy: DEV_BUY } : {}),
...(BENEFICIARY ? { beneficiary: BENEFICIARY } : {}),
...(BUY_TAX || SELL_TAX ? {
marketingBps: TO_YOU * 100, deflationBps: BURNED * 100,
dividendBps: TO_HOLDERS * 100, lpBps: TO_LIQUIDITY * 100,
dividendToken: DIVIDEND_TOKEN,
} : {}),
from: wallet.address,
}),
});
const body = await res.json();
if (body.error) throw new Error(`${body.error}: ${body.message}`);
console.log("token will be", body.token, "-", body.tokenType);

// 3. Sign locally - your private key never leaves this script.
// 4. Hand each signed transaction to the API to broadcast, in order (a dev
// buy in USD1 needs an approval first). No RPC of your own needed.
let explorer;
for (const tx of body.txs) {
const signed = await wallet.signTransaction({
to: tx.to, data: tx.data, value: BigInt(tx.value), gasLimit: BigInt(tx.gas),
maxFeePerGas: BigInt(tx.maxFeePerGas), maxPriorityFeePerGas: BigInt(tx.maxPriorityFeePerGas),
nonce: tx.nonce, chainId: tx.chainId, type: 2,
});
const sent = await (await fetch("https://api.shrine.trade/bnb/api/send", {
method: "POST", headers: { "content-type": "application/json" },
body: JSON.stringify({ signedTx: signed }),
})).json();
if (sent.error) throw new Error(`${sent.error}: ${sent.message}`);
if (sent.status !== "landed") throw new Error(`${tx.description} ${sent.status}: ${sent.explorer}`);
explorer = sent.explorer;
}

// 5. The address was known before sending: Flap deploys with CREATE2.
console.log("token launched:", body.token);
console.log("tx:", explorer);
console.log("page:", "https://flap.sh/token/" + body.token);
}

main();

Save it as launch.js, put your image next to it as logo.png, then:

npm install ethers
node launch.js

Supported quote assets

A Flap token can be priced in BNB, in a stablecoin or major, or in one of Binance's tokenised stocks and ETFs on BNB Chain - a meme that trades directly against NVIDIA, Tesla, SpaceX, the S&P 500 or gold. Flap also accepts other Flap tokens as quotes ("child" launches). Pass "BNB", a ticker from the tables (any case), or an address as pairToken; an asset Flap hasn't enabled returns pair_token_not_approved.

Whatever you pick is fixed at launch and is what the curve holds. Buyers still pay in plain BNB: for every asset below, Flap swaps BNB into the quote inside the buy, and sells come back as BNB by default. A tax on a stock-priced token is collected in that stock, so marketingBps pays you in NVDAB, and dividendBps pays holders in it (the default dividendToken is the quote).

Crypto

TickerAssetDecimalsAddress
BNBBNB18native BNB - no address
USDTTether USD180x55d398326f99059fF775485246999027B3197955
USD1USD1180x8d0D000Ee44948FC98c9B98A4FA4921476f08B0d
UUnited Stables180xcE24439F2D9C6a2289F741120FE202248B666666
lisUSDLista USD180x0782b6d8c4551B9760e74c0545a9bCD90bdc41E5
BTCBBitcoin (BTCB)180x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c
ETHEthereum180x2170Ed0880ac9A755fd29B2688956BD959F933F8
SOLSolana180x570A5D26f7765Ecb712C0924E4De545B89fD43dF

Stocks, ETFs and gold

Binance-issued tokenised equities. Each tracks one share of the underlying; one NVDAB is one NVIDIA share, so a 0.01 dev buy in a NVDAB launch is a hundredth of a share.

TickerAssetDecimalsAddress
XAUTTether Gold60x21cAef8A43163Eea865baeE23b9C2E327696A3bf
SPYBSPY (S&P 500 ETF)180x7138b48df7D98D7e3cc221BfE7192D0a178182D8
QQQBInvesco QQQ Trust180x205812CdBed920aFf76C6580abD681a46D11efc7
NVDABNVIDIA180x02Fca66C1D1aFB4E2A7884261eB00F63598a7436
AAPLBApple180x431a3BEE82E2ca41e49895CbECE5bB0F76A89b7A
TSLABTesla180x5b1910eAaD6450E50f816082Aa078C41F10C292f
MSFTBMicrosoft180x80106cb3EAD06659A5ad19DF39D9b4733863B9b0
GOOGLBAlphabet180x3F53De71c126BdaBAe20f9cD64848d317f6C3238
SPCXBSpaceX180xbe9D156892E55e7154BcD3cB0FEA677F9D3103E1
SKHYBSK Hynix180xCA750eF65f295BBECd685Abf54e82CAf297BDB61
HOODBRobinhood180xA394dCEa3fd3847fD793afBFd163E2e3858B7c65
BABABAlibaba180x4eF9d3062c7F6ebA4AAE4990c5036598C6eff4ec
GMEBGameStop180x46cEeFDa28Dd7207059ed19B0acdc026955bb15C
NFLXBNetflix180xD6829Ea836b6FA224d099D40E54B31262f874631
MSTRBStrategy (MicroStrategy)180xE87afb3076AeB0f9B14E368DE8145ae6a2826A14
DJTBTrump Media & Technology Group180xF2ec508422174Ee564de98187db9359D318AFB6b
MRNABModerna180x5fd86da9B05abE396fe9d02a4A213A7c00556503
FLNCBFluence Energy180x4af1D41cd9dD950dcA43984b43aaA2A8702714Ac
SOXLBDirexion Semiconductor Bull 3X ETF180xd97d097a89113fa59b76c572E5b2Eb647E8eefaf
SOXSBDirexion Semiconductor Bear 3X ETF180xE28Cd11C99AF2df76bb8aDA4Cd0ef3904378280F

This is the list as of September 2026. When Binance issues a new stock and Flap enables it, its address works as pairToken straight away; the ticker follows in the next release.

Every curve graduates at the same point - 800M of the 1B supply sold - whatever it is priced in. That is the only graduation point Flap's Portal accepts on BNB Chain.

The tax system

A tax token's tax is split four ways, in basis points that sum to 10000:

ShareGoes to
marketingBpsbeneficiary, in the quote asset, automatically. This is the creator's revenue.
deflationBpsBurned.
dividendBpsHolders of at least minimumShareBalance tokens, in dividendToken: the quote asset, the token itself, or another ERC-20. They claim it through Creator Revenue.
lpBpsAdded to the token's PancakeSwap liquidity.

The default is all to the beneficiary. A buy tax and a sell tax can differ (buyTaxBps: 300, sellTaxBps: 1000 is a common shape); the tax runs for taxDays after graduation and, for antiFarmerHours after graduation, on every pool rather than just the main one. On the curve the tax is charged as an extra fee on every trade and goes the same way.

Before it reaches any of those, Flap keeps up to 0.3% of taxed volume. shrine.trade takes nothing from it. Everything here is fixed at launch.

Request

FieldTypeDescription
namestringToken name. Not unique - always identify tokens by address.
symbolstringTicker.
logostringImage URL, or a base64 data: URL. The API fetches it and pins image + metadata through Flap's gateway. Either this or meta.
metastringA metadata CID you already pinned with POST /api/upload-image (what the scripts above do). Skips the pinning step; description and socials are then ignored.
descriptionstring, optionalProject description, pinned with the image.
socialsobject, optional{ twitter, telegram, website } - any may be "".
pairTokenstring, optionalWhat the curve is priced in. "BNB" (default), a ticker from Supported quote assets such as "USD1" or "NVDAB", or the address of any quote asset Flap has enabled.
initialBuydecimal string, optionalYour own opening buy, in the same transaction, in the quote asset (BNB for a BNB launch). Runs inside the transaction that creates the curve, so nobody can trade ahead of it. A USD1 dev buy puts an approve_quote transaction in front.
buyTaxBps / sellTaxBpsnumber, optionalTax on every buy / sell, in basis points (100 = 1%). Either above 0 makes this a tax token; they can differ. Immutable after launch. Default 0.
taxDaysnumber, optionalTax tokens: how long the tax runs after graduation, in days. Default 365.
antiFarmerHoursnumber, optionalTax tokens: for this many hours after graduation the tax also applies to every other pool, so LP farmers can't route around it. At most 8760. Default 0.
beneficiaryaddress, optionalTax tokens: where the marketing share of the tax goes. Defaults to from.
marketingBps / deflationBps / dividendBps / lpBpsnumber, optionalTax tokens: how the tax splits, in bps of the tax - to the beneficiary, burned, paid to holders as a dividend, added to the token's liquidity. Must sum to 10000; anything not named is 0. Default: all to the beneficiary.
dividendTokenstring, optionalWith dividendBps: what holders are paid in. "quote" (default) for the quote asset (the stock itself on a stock-priced launch), "self" for the token itself, or an ERC-20 address Flap can swap into.
minimumShareBalancedecimal string, optionalWith dividends (tax tokens with dividendBps, and every standard token): the token balance a holder needs to receive them. Flap's floor is 10000, which is the default.
slippagenumber, optionalPercent, for the dev buy. Default 5.
fromaddressYour wallet (creator).

What a launch costs

Flap charges no creation fee, so a launch costs gas and nothing else - about 0.0004 BNB for a tax token and less for a standard one at BNB Chain's usual 0.05 gwei, plus your dev buy. Because a node reserves gasLimit x maxFeePerGas before running the transaction, and both figures are padded (20% on the limit, a 1.25x ceiling on the price), the wallet must hold a little more than is actually spent; the difference comes back in the same block. Budget 0.001 BNB for a plain launch and you will never be short.

Flap does apply a rate limit per creator wallet - one launch every so often - and returns launch_rate_limited when you are inside it.

Response

A real one, for a 3%/3% tax token with a 0.001 BNB dev buy:

{
"txs": [
{
"to": "0xe2cE6ab80874Fa9Fa2aAE65D277Dd6B8e65C9De0",
"data": "0x…",
"value": "1000000000000000",
"gas": 7230661,
"maxFeePerGas": "62500000",
"maxPriorityFeePerGas": "50000000",
"nonce": 12,
"chainId": 56,
"type": 2,
"description": "create"
}
],
"token": "0x32e00b9c8eb2ff2462b61b692475d7670ea07777",
"salt": "0xe37d685461db060f32606abcd0af9c18d4bc275244d46edbf0123869d1367347",
"tokenType": "tax_v3",
"launchFee": "0",
"launchFeeFormatted": "0",
"pairToken": "BNB",
"pairTokenSymbol": "BNB",
"pairTokenDecimals": 18,
"graduationSupply": "800000000000000000000000000",
"graduationSupplyFormatted": "800000000",
"meta": "bafkreieraixgnucog5qpve3qqqapghudod7ogi5ztlorgavbjszahk3lga",
"metaUri": "https://ipfs.io/ipfs/bafkreieraixgnucog5qpve3qqqapghudod7ogi5ztlorgavbjszahk3lga",
"beneficiary": "0x8894E0a0c962CB723c1976a4421c95949bE2D4E3",
"buyTaxBps": 300,
"sellTaxBps": 300,
"tax": {
"taxDays": 365,
"antiFarmerHours": 0,
"marketingBps": 10000,
"deflationBps": 0,
"dividendBps": 0,
"lpBps": 0,
"dividendToken": "quote",
"minimumShareBalance": "0"
},
"initialBuy": "1000000000000000",
"initialBuyFormatted": "0.001",
"expectedTokensOut": "173060121205804955576978",
"expectedTokensOutFormatted": "173060.121205804955576978",
"expectedEconomics": "Flap tax token: 3.00% tax on buys and 3.00% on sells for 365 days after graduation …"
}
  • txs - sign and send in order. Usually one, create. A dev buy in an ERC-20 quote puts approve_quote in front.
  • token - the token's address, known before you send: Flap deploys with CREATE2 and the salt we searched for. Tax tokens end in 7777, standard ones in 8888 - Flap requires it.
  • tokenType - standard_v3 or tax_v3.
  • launchFee - always 0: Flap charges nothing to create. The transaction's value is the dev buy.
  • meta / metaUri - the pinned metadata, as a CID and through a gateway.
  • beneficiary, buyTaxBps, sellTaxBps, tax - echo what the launch will use: the tax duration and anti-farmer window, the split, the dividend token and holder floor. lpFeesTo on a standard token is always holders.
  • initialBuy, expectedTokensOut - the dev buy in the quote asset's base units and what it returns, simulated against the real launch. Only with an initialBuy.
  • expectedEconomics - a plain-English summary of the token's terms.