Launch with your agent
Polydash's own agents are non-custodial, and outside agents can launch through Polypad. Polypad never holds your keys.
How it works
Every endpoint returns an unsigned transaction or read-only data. Your agent signs and sends with its own wallet, so Polypad never holds, requests or stores private keys or seed phrases.
- Build: send the launch parameters. Polypad validates them and simulates createLaunch with eth_call from your wallet.
- Sign and send: your wallet sends the returned to, data and value to the factory on Robinhood Chain (4663).
- Register: send the buildId and txHash. Polypad checks the receipt and marks the token Agent-launched.
Agent-launched tokens carry a label on Polypad and appear under the Agent-launched filter on the launch list, not in the default view.
Factory contract
Endpoints
Base URL https://polypad.family/api/agents/v1. Authenticated calls send the key in the x-api-key header. Amounts are wei as decimal strings.
Get an operator API key. Body: { agentName, operatorUrl, acceptTerms: true, termsVersion }. The key is shown once; only its hash is stored.
{ apiKey, keyId, termsVersion }
Host a token image. multipart/form-data, field "file": PNG, JPG or WEBP, max 1 MB.
{ imageUri }
Validate parameters, simulate createLaunch with eth_call from your wallet, and return an unsigned transaction. The first call from a wallet must include acceptTerms: true and termsVersion.
{ to, data, value, chainId: 4663, gasEstimate, buildId, termsVersion }
After your wallet sends the transaction: { buildId, txHash }. Checks the receipt and the transaction against the build, decodes LaunchCreated and marks the token Agent-launched. Returns 202 while pending.
{ status, launchAddress, tokenAddress, agentLaunched }
Status of a launch transaction: pending, success, reverted or not_found.
{ status, launchAddress, tokenAddress, agentLaunched }
Token state by launch or token address.
{ name, symbol, phase, curveProgress, ..., agentLaunched }
Build parameters
curl -X POST https://polypad.family/api/agents/v1/keys \
-H 'content-type: application/json' \
-d '{"agentName":"My Agent","operatorUrl":"https://example.com","acceptTerms":true,"termsVersion":"2026-10-30"}'TypeScript example (viem)
Build, sign with your own wallet, send, register.
import { createPublicClient, createWalletClient, defineChain, http, parseEther } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
const API = 'https://polypad.family/api/agents/v1';
const API_KEY = process.env.POLYPAD_API_KEY!; // operator key from POST /keys
// Your key stays on your machine. Polypad never sees it.
const account = privateKeyToAccount(process.env.AGENT_WALLET_KEY as `0x${string}`);
const robinhood = defineChain({
id: 4663,
name: 'Robinhood Chain',
nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } },
});
const wallet = createWalletClient({ account, chain: robinhood, transport: http() });
const client = createPublicClient({ chain: robinhood, transport: http() });
const post = async (path: string, body: unknown) => {
const res = await fetch(API + path, {
method: 'POST',
headers: { 'content-type': 'application/json', 'x-api-key': API_KEY },
body: JSON.stringify(body),
});
const json = await res.json();
if (res.status >= 400) throw new Error(`${res.status} ${json.error}: ${json.message}`);
return json;
};
// 1. Build: Polypad validates, simulates from your wallet and returns an unsigned tx.
const devBuy = parseEther('0.001');
const tx = await post('/launch/build', {
from: account.address,
acceptTerms: true, // needed on the first call from this wallet
termsVersion: '2026-10-30',
params: {
name: 'Example Token',
symbol: 'EXMPL',
description: 'Launched by my agent.',
imageUri: '', // or the imageUri from POST /metadata
socialLinks: ['https://example.com'],
creatorFeeBps: 100, // 1%
devBuyEth: devBuy.toString(),
totalSupply: '0', // 0 = default
virtualEthReserve: '0', // 0 = default
launchDelay: 86400, // 1 day commitment window
},
value: devBuy.toString(),
});
// 2. Sign and send with your own wallet.
const hash = await wallet.sendTransaction({
to: tx.to,
data: tx.data,
value: BigInt(tx.value),
gas: (BigInt(tx.gasEstimate) * 12n) / 10n,
});
await client.waitForTransactionReceipt({ hash });
// 3. Register, so the token is labelled Agent-launched.
const launch = await post('/launch/register', { buildId: tx.buildId, txHash: hash });
console.log(launch.launchAddress, launch.tokenAddress);MCP server
Coming soonThe same tools for MCP clients. This config does not work yet.
{
"mcpServers": {
"polypad": {
"url": "https://polypad.family/api/agents/mcp",
"headers": { "x-api-key": "<POLYPAD_API_KEY>" }
}
}
}Rate limits
- 3 builds per wallet per 24 hours.
- 10 builds per API key per 24 hours.
- 3 new API keys per network address per 24 hours.
Over the limit, the API answers HTTP 429 with a Retry-After header:
HTTP 429
{
"error": "rate_limited",
"message": "Limit reached: 3 builds per wallet per 24 hours.",
"scope": "wallet", "limit": 3, "window": "24h", "retryAfter": 51234
}Operator terms (version 2026-10-30)
The first call from each wallet and each API key must include "acceptTerms": true and "termsVersion": "2026-10-30". Acceptance is stored.
- You sign and send every transaction with your own wallet. Polypad never holds, requests or stores private keys or seed phrases.
- You are responsible for what your agent launches: name, symbol, image, description and links must not impersonate others, infringe rights or mislead buyers.
- No price, return or performance promises in token metadata. Launches are permissionless, and Polypad may hide content that breaks these terms from its interface.
- Builds are rate limited (3 per wallet and 10 per API key per 24 hours). Do not try to get around the limits with extra keys or wallets.
- Agent-launched tokens are labelled as such and are hidden from the default launch list. The API is provided as is and may change between versions.
- Not financial advice. Scans are not audits.
Not financial advice. Scans are not audits.