OneMeme Docs

v1.0.0 · api.onememe.io

OneMeme is a decentralized token launchpad built on BNB Chain. Anyone can create a token with a bonding curve in seconds. No coding, no presale, no team allocation. When a token's bonding curve reaches its target, it automatically graduates to PancakeSwap with permanently locked liquidity — with no migration fee.

The OneMeme API provides programmatic access to the entire platform: token discovery, trading data, user profiles, real-time WebSocket events, and more.

Base URL: https://api.onememe.io
WebSocket: wss://api.onememe.io/ws

How It Works

01

Create a Token

Pick a name, symbol, and description. Upload an image and set optional social links. Every token launches with a standardized 1 billion total supply and an automated bonding curve. No coding required, takes only seconds.

02

Trade on Bonding Curve

Tokens are immediately tradeable via an automated bonding curve. Price increases as supply is bought. A 1% fee applies to each transaction. The curve fills as more BNB (or the quote stablecoin) is deposited, and everyone can see the progress in real-time.

03

Graduate to DEX

When the bonding curve reaches its target (80% of supply sold, which raises roughly 16 BNB on BSC), the token enters a duel phase and then automatically migrates to PancakeSwap. No fee is deducted — the remaining supply is paired with the ENTIRE collected BNB and locked permanently.

04

Fair & Transparent

No presale, no team tokens, no insider allocation. All trades happen on-chain with transparent pricing. Holders, swaps, and charts are public and real-time. The system ensures a level playing field for all participants.

How the Bonding Curve Works

The curve uses a constant-product formula where the share of supply you capture depends on a virtual reserve R: tokens = 1B × net / (R + net), where net is your BNB amount after the 1% buy fee.

BSC: R = 4 BNB
  • 0.01 BNB → ~0.25% (~2.5M)
  • 0.1 BNB → ~2.4% (~24M)
  • graduates after ~16 BNB raised

Ticker Lock

An unlocked ticker is free to use on OneMeme — two tokens can share a symbol, exactly like they can on every other launchpad. If you want a symbol to be yours, lock it with a single switch when you create the token. Once locked, OneMeme's contracts reject that ticker for everyone, forever, on every launch type — curve, tax token and V3 pool alike. The lock is registered on UniqueRegistry, an independent registry shared by multiple launchpads — which is exactly what makes it worth having. A name held only inside one platform is not really held at all.

01

Optional, One Switch

Leave Lock Ticker off and your token launches normally — free, and the symbol stays open to everyone (unless somebody else has already locked it, in which case no launch of that exact ticker is possible). Turn it on and the ticker is registered to you in the same transaction that creates the token. There is nothing to do beforehand and no separate reservation step.

02

Case-Insensitive & Spoof-Proof

A lock is case-insensitive: TEST, test and Test are one name. Separately, OneMeme still rejects deceptive symbols at creation whether you lock or not: swapping a Latin letter for a lookalike Cyrillic or Greek one, and invisible characters, all fail. Your token displays the symbol exactly as you typed it.

03

Permanent, and Verifiable

A lock does not expire and there is no renewal. The record carries a Certified UNIQUE stamp naming the launchpad it came from. Anyone can check a ticker on the registry contract with getRecord("TICKER"), which returns the token address, the owner and the date — so the claim is checkable on chain, not just on our website.

04

What It Costs

The registry charges a flat fee, shown on the switch and read live from the contract, added on top of your initial buy. It is non-refundable and paid to the registry, not to OneMeme. If the ticker is already locked, or someone else is holding it, the switch is disabled — you can still launch under that symbol, just without the lock.

Fees

Every number below is read from the contracts, and every split is enforced on chain in the same transaction as the trade — nothing is settled off-chain or paid out later.

Bonding curve trades — 1%

Buys and sells on the curve both pay 1%. That 1% is then split three ways. The percentages people usually quote are shares of the fee, so the table also shows what each one is as a slice of the trade itself — the two are easy to confuse.

RecipientShare of the feeOf the trade
Creator45%0.45%
Platform45%0.45%
Giggle Academy (donation)10%0.10%

The creator's share goes to the token's beneficiary address, which the creator sets at launch. If a share has no valid recipient — no beneficiary, or donations switched off — it falls through to the platform rather than being skipped, so the trade always settles to exactly 1%.

Graduation to PancakeSwap — free

When a curve fills and migrates, no fee is taken — the entire raised amount becomes liquidity. (A 1% migration fee existed until 2026-08-18 and was removed on chain.) The LP tokens minted at migration are burned to the dead address, so the liquidity cannot be pulled by anyone, including us.

V3 Pool (VLP) trading fees — 70 / 20 / 10

A V3 Pool launch has no curve and therefore no 1% curve fee. Instead the position itself earns PancakeSwap V3 trading fees, and those are split when they are claimed:

RecipientShare of LP fees
Creator's fee wallet70%
Platform20%
Donation10%

The creator's 70% is a hard-coded constant and cannot be lowered. The donation share is adjustable but capped at 20%; the platform takes whatever is left, so raising donations comes out of our share, never the creator's. The position's NFT is locked permanently, so the liquidity behind it can never be withdrawn.

Optional and creator-set

Creating a token

Free on the bonding curve — you pay gas and nothing else. A V3 Pool launch pays the launcher's creation fee, shown on the create page and read live from the contract.

Ticker Lock

Optional. You pay UniqueRegistry's full headline fee (currently 0.05 BNB, read it live from getTickerLockInfo), added to the transaction on top of any initial buy. Non-refundable. The registry rebates half of it to the launchpad, which OneMeme keeps as platform revenue.

Creator tax on the curve

Off by default. A creator may add up to 10% on curve trades, paid to an address they choose. It is fixed at launch and shown on the token page.

Creator tax after graduation

Off by default, capped at 10%, and it expires on a timer set at launch. There is no function to raise it afterwards — the rate is fixed when the token is created and can only fall to zero.

Once a token has graduated, trading it directly on PancakeSwap pays PancakeSwap's fee and nothing to OneMeme. The 1% above applies to curve trades and to trades routed through OneMeme.

Contract addresses

Every contract OneMeme runs on BNB Chain. Nothing here is upgradeable without the addresses below changing or announcing it on chain, so this is the list to check a transaction against before you sign it.

ContractAddressWhat it does
Core0xbe53182f88a14787988afad499d7AD8a85793f64Bonding curve: creates tokens, prices every buy and sell, migrates to PancakeSwap.
Sale Factory0x057117Dcea784f983F9F075DdAf623cFE02b3b0DCreates every presale, fair launch and subscription pool.
OneLock0x12a50b9E615083685529ed62e37CD2C168b49DB1Liquidity and team-token locker. Locked positions have no withdrawal path.
VLP Launcher0x067721FC42B9338b0c4F219003BF8EccCba533DaOpens a PancakeSwap V3 pool at launch instead of a curve.
VLP Locker0x04ab0D4A6550C70e43227C4621Ddb7cc56a6370AHolds the locked V3 position and splits its fees 70 creator / 20 platform / 10 donation.
Stock Vault Factory0x9434Ca980Da00189c4b6B17a4c05a0cFa4Ba1Da3Tax vaults that buy a basket of tokenized stocks for holders.
Crypto Vault Factory0x22357B7600A695BE763e60e018377ED6c8B8Ef45Tax vaults that buy a basket of major crypto assets.
Donation Vault Factory0x57e44B8fF5F473c2EdC0db4AF57899ABD0780c5eTax vaults that give the revenue away to allow-listed causes.
Unique Registry0x12F5D57243b8F8b7897ABDC8530950dd1071E74eThird-party ticker registry. Exclusivity is opt-in; OneMeme runs no registry of its own.

Tokens and presale pools are not listed: every launch deploys its own, and their addresses are on the token or sale page. A token created here is a minimal proxy bound to its implementation for life, so it can never be pointed somewhere else later.

Create Token via API

This guide shows how to programmatically create a token on OneMeme using direct smart contract interaction. Useful for bots, custom UIs, or integrating OneMeme into your own platform.

Flow Overview

1

Upload Image

to IPFS

2

Upload Metadata

JSON to IPFS

3

Get Vanity Salt

from API

4

Call Contract

newToken()

5

Parse Event

TokenCreated

Contract Info

Core (BSC, chainId 56)0xbe53182f88a14787988afad499d7AD8a85793f64
Standard TokennewToken(params, curveType)
Tax TokennewTaxToken(params, curveType, dividendParams, vaultParams)
V3 Pool (instant launch)launchVLP(params, presetId, dexId, salt)

Contract ABI

The contracts are not published on BscScan, so copy the ABI from here — this fragment covers everything token creation needs. It is in viem's human-readable format; pass it through parseAbi() (viem) or use it directly with ethers v6.

Bonding Curve Tiers (curveType)

The curveType argument picks the graduation target — how much BNB the curve collects before the token migrates to PancakeSwap. Deeper curves open with thicker DEX liquidity.

116 BNB to migrate
1140 BNB to migrate
1280 BNB to migrate

1Upload Token Image to IPFS

Upload your token logo (PNG/JPG, max 5MB) to IPFS via any pinning service (Pinata, Infura, nft.storage, etc). You need the resulting ipfs://<CID> URI.

2Upload Token Metadata to IPFS

Build a JSON metadata object and upload it to IPFS. The contract stores this URI on-chain as the token's meta field.

3Generate Vanity Salt

The Core deploys tokens with CREATE2, so each token needs a unique salt. The vanity API mines a salt whose resulting token address ends in 0x...1111 — the OneMeme signature suffix, same for every token type. The salt is bound to your wallet: the contract derives the final CREATE2 salt from keccak256(msg.sender, salt), so a salt mined for one address is useless to anyone else. Skipping this step and passing random bytes also works — the token simply launches without the vanity suffix.

4Call the Smart Contract

Send a transaction to the Portal contract. If you include BNB (the native currency) as msg.value, it acts as an initial buy (you'll receive tokens in the same tx). Set to 0 for no initial buy.

Standard Token — newToken()

Tax Token — newTaxToken()

Tax tokens charge a fee (max 10%) on PancakeSwap trades after graduation. The creator splits it between a marketing wallet, burn, LP and optional holder dividends — allocation percentages are in basis points and must sum to 10000. Instead of a plain marketing wallet, the tax can feed a vault: an on-chain basket of tokenized stocks, a crypto basket, or a donation vault — the platform keeper then auto-invests the collected tax.

V3 Pool — launchVLP()

A V3 pool launch skips the bonding curve entirely: the full 1B supply is minted straight into a PancakeSwap V3 position that is locked forever — no graduation, tradable from the first block. The position's 1% trading fee is claimable and split 70% creator / 10% Giggle Academy / 20% platform. The presetId picks what the pool is priced in; every preset opens at the same starting valuation. Buyers can always pay in BNB — the Core converts into the pool's quote asset automatically.

0BNB (WBNB)
1SPCXB — SpaceX Tokenized bStocks
2SPYB — S&P 500 ETF Tokenized bStocks
3XAUT — Tether Gold

Vanity for V3 pools: the token's CREATE2 address hashes its FULL constructor args (name, logo, socials, creator, preset config), so the vanity request must carry them. Encode the args exactly as below and send them as ctorArgs — then launch with the returned salt without changing any field, or the address changes.

5Parse the Token Address from Event

After the transaction is confirmed, parse the TokenCreated (or TaxTokenCreated) event from the receipt logs to get the deployed token address. Alternatively, use the predicted address returned by the vanity salt API (Step 3) — it's deterministic via CREATE2.

Parameter Reference

ParamType
namestring
symbolstring
metastring
dexThreshuint8
saltbytes32
taxRateuint16
migratorTypeuint8
quoteTokenaddress
quoteAmtuint256
beneficiaryaddress
permitDatabytes
lockTickerbool
curveTypeuint8
msg.valueBNB

Important Notes

  • Total supply is always 1 billion tokens (18 decimals).
  • Token creation fee: Free — no cost to launch a token.
  • Trading fee: 1% on buys and sells on the bonding curve, split 45% creator / 45% platform / 10% Giggle Academy (see Fees).
  • Migration fee: None — graduating to PancakeSwap takes nothing from the raised amount; all of it becomes liquidity (the old 1% was removed 2026-08-18).
  • If you send BNB as msg.value, it counts as the creator's initial buy (you get tokens).
  • The bonding curve's virtual reserve on BSC is R = 4 BNB. Compute the captured % of supply as 1B × net / (R + net).
  • Graduation happens at 80% of supply sold (16 / 40 / 80 BNB raised, depending on the chosen curve tier).
  • V3 pool launches never graduate — they are born on the DEX with the whole supply in a permanently locked position. Creation fee 0.005 BNB (read it from creationFee(), it is admin-adjustable).
  • The vanity salt endpoint is rate-limited. Cache the salt if you retry the transaction. For V3 pools the salt is only valid for the EXACT form fields it was mined against.
  • Gas recommendation: 2M for standard tokens, 3M for tax tokens, 9M for V3 pool launches.
  • Token address is deterministic via CREATE2 — the predicted address from the vanity API will match the deployed address.
  • For tax tokens, marketBps + deflationBps + lpBps must equal 10000.
  • For tax tokens, 10% of collected taxes go to the platform and 90% are distributed according to the creator's configuration (Marketing / Burn / LP).

Presales

The launchpad raises capital before a token trades. Three sale types share one lifecycle and one base parameter struct; they differ only in how the price is decided. Every behaviour below is verified against the deployed contracts on a mainnet fork (launchpad/scripts/e2e-sales-lifecycle-fork.ts).

Contract Info

SaleFactory (BSC)0x057117Dcea784f983F9F075DdAf623cFE02b3b0D
TokenFactory (BSC)0xA26377D6a041e53333114F373b8364b22d0986Ff
OneLockV2 (LP + token locker)0x12a50b9E615083685529ed62e37CD2C168b49DB1

Sale Types

TypeFactory call
PresalecreatePresale(base, presaleRate, minBuy, maxBuy)
Fair LaunchcreateFairLaunch(base, totalSellingAmount, maxContribution, buyback)
SubscriptioncreateSubscription(base, extra)

Lifecycle & states

state() is derived from time and the raise, not stored — so it moves on its own without anyone sending a transaction. Enum order is CREATED, ACTIVE, SUCCEEDED, FAILED, CALCULATING, FINALIZED, CANCELLED — note CALCULATING sits at index 4, so FINALIZED is 5 and CANCELLED is 6.

CREATED0Before startTime. Contributions revert.
ACTIVE1Accepting contributions.
SUCCEEDED2Ended (or hard cap hit) with soft cap met — finalize() allowed.
FAILED3Ended below soft cap — refund() enabled, finalize() reverts.
FINALIZED5LP created and locked; claim() enabled.
CANCELLED6Refunds enabled; sale tokens returned.

finalize() — listing is automatic

There is no separate “list on DEX” step. One finalize() call, sent by the sale owner or a platform moderator, performs the whole settlement atomically:

  1. pays the platform raise fee (5%) to the fee receiver;
  2. creates the PancakeSwap V2 pair if it does not exist and adds liquidityPercent of the raise plus matching tokens at listingRate;
  3. sends the LP tokens to OneLock, locked for liquidityLockDays (minimum 30) — returns a lockId;
  4. transfers the remaining quote to the creator;
  5. burns or returns unsold tokens per refundType, and enables claim().

When to call it: as soon as state() == SUCCEEDED. A presale that reaches its hard cap can finalize immediately, before endTime; fair launch and subscription have no hard cap, so they finalize after the deadline. There is no upper deadline on finalizing — but 60 days after endTime an unfinalized sale becomes cancellable by anyone, which refunds every contributor. That backstop is why an abandoned sale can never freeze funds.

Buyer functions

contribute()payable — native sales. ERC20-quoted sales use contributeERC20(amount) after approve().
claim()After FINALIZED. Honours the vesting schedule if one was configured.
refund()FAILED or CANCELLED: full refund. Subscription after FINALIZED: returns the unused overflow only.

Important Notes

  • Approve the sale token to the SaleFactory before creating — it pulls the full provision in the creation transaction.
  • liquidityLockDays has a hard on-chain floor of 30; anything lower reverts InvalidLockDuration.
  • liquidityPercent is bps and must be ≥ 51%; liquidity + the 5% raise fee (+ buyback, on fair launch) cannot exceed 100%.
  • Fair launch and subscription require hardCap == 0; a presale requires a non-zero one.
  • Presale soft cap must be ≥ 25% of the hard cap; subscription soft cap (in tokens) ≥ 51% of the offering.
  • The creator can cancel only while totalRaised < softCap — never after the raise has succeeded.
  • listingRate may not exceed the sale rate, so the listing price can never be above what buyers paid.
  • ListingOption.MANUAL is rejected — listing always happens inside finalize.

Authentication

OneMeme uses wallet-based authentication via EIP-191 message signing. No passwords or emails, just your wallet.

1

Request a nonce

POST /auth/nonce with your wallet address. Creates your account if needed.

2

Sign the message

Sign: "Sign this message to authenticate with OneMeme.\n\nNonce: {nonce}"

3

Verify & get JWT

POST /auth/verify with your address + signature. Receive a JWT token.

4

Use the JWT

Include Authorization: Bearer <token> on all authenticated endpoints.

Rate Limits & Caching

Rate Limits

Global300 req/min per IP
Auth endpoints20 req/min per IP
Write endpoints30 req/min per IP
Messages5 per hour per user

Rate limit headers (RateLimit-*) are included in all responses.

Caching

All public GET endpoints are cached for 10 seconds. Responses include cache status headers:

X-Cache: HITResponse served from cache
X-Cache: MISSFresh response from server

Authenticated GET requests bypass the cache entirely.

WebSocket

Connect to wss://api.onememe.io/ws for real-time events. All messages are JSON-encoded.

EventDescription
swapNew swap executed on any token
token:newNew token launched on the platform
token:statusToken status change (e.g. graduated to DEX)
message:newNew chat message posted on a token
price:updateReal-time price update for a token

Connection Limits

Max connections per IP5
Max message rate30 per 10s
Max subscriptions20 channels
Max payload size4 KB

API Reference

All endpoints use https://api.onememe.io as the base URL. Responses are JSON.

Error Response Format

All error responses follow a consistent structure:

OneMeme API v1.0.0support@onememe.io