MCP 服务器

Chain Daddy

io.chaindaddy/mcp
电商与零售 加密货币与 Web3 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Searches token registrations and market information and manages token creator stores, alerts, holder communities, listings, and related applications.

call_read_operation
Run a read operation
Run one read-only Chain Daddy API operation that find_api_operations returned (callWith: call_read_operation), passing its tool name and its arguments. Returns the API's JSON answer. An operation marked as needing sign-in asks the user to sign in with Chain Daddy first; it reads only that user's own data.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['tool'], 'properties': {'tool': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]{0,63}$', 'description': 'The tool name find_api_operations returned for the read-only operation.'}, 'arguments': {'type': 'object', 'description': "The operation's arguments, matching the inputSchema find_api_operations returned. Omit or {} when it takes none.", 'additionalProperties': True}}, 'additionalProperties': False}
call_write_operation
Run a change
Make one change through the Chain Daddy API that find_api_operations returned (callWith: call_write_operation): for example editing a token page, an alert rule or a holder group, or sending holders a message. Pass its tool name and arguments. Acts as the signed-in user and needs Sign in with Chain Daddy allowing changes (scope api:write). Confirm with the user before running it; some changes notify people or cannot be undone. It never pays, mints, launches, claims or trades. Needs Sign in with Chain Daddy, allowing changes (scope api:write).
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['tool'], 'properties': {'tool': {'type': 'string', 'pattern': '^[a-z][a-z0-9_]{0,63}$', 'description': 'The tool name find_api_operations returned for the changing operation.'}, 'arguments': {'type': 'object', 'description': "The operation's arguments, matching the inputSchema find_api_operations returned. Omit or {} when it takes none.", 'additionalProperties': True}}, 'additionalProperties': False}
check_heartbeat
Check a token's heartbeat
Get heartbeat score for a registration A registered token's health on one chain: its heartbeat score (0-100), the status derived from it, and the three parts it is built from (recent on-chain activity, DEX volume, holder health). A registration whose heartbeat stays low can lapse and become claimable again, so use this to tell a live token page from a dormant one. It answers 404 for a symbol that has no registration on that chain; check that with get_registration first.
只读 幂等
输入模式
{'type': 'object', 'required': ['chain', 'symbol'], 'properties': {'chain': {'type': 'string', 'examples': ['arbitrum'], 'description': 'Chain key (e.g. `arbitrum`, `base`)'}, 'symbol': {'type': 'string', 'examples': ['PEPE'], 'description': 'Token symbol'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'score': {'type': ['number', 'null'], 'description': 'Composite heartbeat score (0-100). Weighted sum of timestamp + volume + holder-health.'}, 'status': {'type': ['string', 'null'], 'description': 'Heartbeat status derived from the score'}, 'symbol': {'type': ['string', 'null']}, 'chainId': {'type': ['integer', 'null']}, 'components': {'type': ['object', 'null'], 'properties': {'volume': {'type': ['number', 'null'], 'description': 'Volume score (0-100, weight 30%) — DEX volume blended across 24h + 7d (default 70/30) and capped at 100× pool liquidity, then log-scaled into [$20, $100k]'}, 'holders': {'type': ['number', 'null'], 'description': 'Holder Health Score (0-100, weight 20%) — composite of concentration, suspicious-wallet ratio, distribution, and scale'}, 'timestamp': {'type': ['number', 'null'], 'description': 'Timestamp score (0-100, weight 50%)'}, 'confidence': {'type': ['number', 'null'], 'description': 'Staleness annotation (0-100). 100 when underlying market data is < 1h old, 0 when ≥ 12h, linear in between. NOT part of the on-chain leaf hash.'}}}, 'lastUpdated': {'type': ['string', 'null']}}}
create_alert_rule
Create an alert rule
Create an alert rule on a token Creates one threshold alert on one token for the signed-in wallet and returns it (201). When the rule's condition is met, an alert fires (see `GET /api/v2/alerts/active`) and is delivered on your notification channels; it will not fire again for `cooldownMinutes` (default 60). Pick `alertType`, then `thresholdOperator` + `thresholdValue`: `gt`/`lt` compare the metric to the value, `pct_drop`/`pct_spike` compare its percentage change (over `timeWindowMinutes` when set) to the value. Types and the lowest plan that may create them: `heartbeat_score` (Free; EVM tokens only; needs a token page), `copycat_detected` (Free; needs a token page), `holder_count_drop`, `liquidity_drop`, `volume_anomaly`, `price_change` (Pro), `top10_concentration` (Pro+; operator `gt` or `pct_spike` only). Free accounts hold up to 3 rules, paid plans 50, Enterprise unlimited. Common mistakes: naming the token by ticker (send `chainId` + `tokenAddress`; a ticker is not accepted); asking for a type above your plan (403 naming the plan to buy, with `upgrade_url`); asking for a token-page type on a token with no page (400 `crown_required`). Calling this twice creates two rules — list first. Needs Sign in with Chain Daddy, allowing changes (scope api:write).
输入模式
{'type': 'object', 'required': ['alertType', 'chainId', 'thresholdOperator', 'thresholdValue', 'tokenAddress'], 'properties': {'chainId': {'type': 'string', 'examples': ['base'], 'description': 'Chain key (`base`), numeric id or CAIP-2 id (`eip155:8453`)'}, 'enabled': {'type': 'boolean', 'default': True}, 'alertType': {'enum': ['heartbeat_score', 'copycat_detected', 'holder_count_drop', 'liquidity_drop', 'volume_anomaly', 'price_change', 'top10_concentration'], 'type': 'string', 'description': 'What the rule watches, and the lowest plan that may create it: `heartbeat_score` (Free, EVM only, needs a\ntoken page), `copycat_detected` (Free, needs a token page), `holder_count_drop`, `liquidity_drop`,\n`volume_anomaly`, `price_change` (Pro), `top10_concentration` (Pro+).\n'}, 'tokenAddress': {'type': 'string', 'description': '0x token address on EVM; the mint address on Solana (case-sensitive)'}, 'thresholdValue': {'type': 'number', 'description': 'Must be greater than 0. A percentage for `pct_drop`/`pct_spike`.', 'exclusiveMinimum': 0}, 'cooldownMinutes': {'type': 'integer', 'default': 60, 'minimum': 5}, 'thresholdOperator': {'enum': ['gt', 'lt', 'pct_drop', 'pct_spike'], 'type': 'string', 'description': '`gt` / `lt`: the metric is above / below `thresholdValue`. `pct_drop` / `pct_spike`: the metric fell / rose by\nat least `thresholdValue` percent. `top10_concentration` accepts only `gt` and `pct_spike`.\n'}, 'timeWindowMinutes': {'type': 'integer', 'minimum': 5}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'rule': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null'], 'description': "The token's ticker, for display only (may be empty when unreadable)"}, 'enabled': {'type': ['boolean', 'null']}, 'chain_id': {'type': ['string', 'null'], 'description': 'CAIP-2 chain id, e.g. `eip155:8453`'}, 'alert_type': {'type': ['string', 'null'], 'description': 'What the rule watches, and the lowest plan that may create it: `heartbeat_score` (Free, EVM only, needs a\ntoken page), `copycat_detected` (Free, needs a token page), `holder_count_drop`, `liquidity_drop`,\n`volume_anomaly`, `price_change` (Pro), `top10_concentration` (Pro+).\n'}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'tier_required': {'type': ['string', 'null'], 'description': 'Lowest plan this alert type needs'}, 'token_address': {'type': ['string', 'null']}, 'wallet_address': {'type': ['string', 'null'], 'description': 'The owning wallet (lowercased)'}, 'threshold_value': {'type': ['number', 'null']}, 'cooldown_minutes': {'type': ['integer', 'null'], 'description': 'Minutes before this rule may fire again'}, 'threshold_operator': {'type': ['string', 'null'], 'description': '`gt` / `lt`: the metric is above / below `thresholdValue`. `pct_drop` / `pct_spike`: the metric fell / rose by\nat least `thresholdValue` percent. `top10_concentration` accepts only `gt` and `pct_spike`.\n'}, 'time_window_minutes': {'type': ['integer', 'null'], 'description': 'Look-back window for percentage operators'}}}, 'message': {'type': ['string', 'null']}, 'success': {'type': ['boolean', 'null']}}}
create_oauth_client
Register a Sign in with Chain Daddy client
Register a sign-in client Registers a site or app that can send people to Sign in with Chain Daddy. Needs Developer Beta Program membership (the current agreement signed); registering is free. - `redirectUris`: 1 to 10, matched exactly (no wildcards, no fragments, no credentials). `https` only, except `http://localhost` and `http://127.0.0.1` for development. - `confidential: true` for a server that can keep a secret: the response carries `clientSecret` (`cd_oauth_` + 64 hex) ONCE; store it now, it is never shown again and cannot be rotated here. Leave it `false` for a single-page app, a game or a native app, which use PKCE with no secret. - `name`: 1 to 40 characters; it may not contain "Chain Daddy", "official", "support" or "wallet" (checked ignoring case, spaces and punctuation). - `crown` (optional): a token page you hold or manage. It earns the consent screen's Verified mark for redirect hosts on that page's DNS-verified domains; without it the screen says "Unverified site". Needs Sign in with Chain Daddy, allowing changes (scope api:write).
输入模式
{'type': 'object', 'required': ['name', 'redirectUris'], 'properties': {'name': {'type': 'string', 'maxLength': 40, 'minLength': 1}, 'crown': {'type': 'object', 'required': ['chainKey', 'crownId'], 'properties': {'crownId': {'type': 'integer', 'format': 'int64', 'examples': [8], 'description': "The token page's registration id"}, 'chainKey': {'type': 'string', 'examples': ['base']}}}, 'confidential': {'type': 'boolean', 'default': False}, 'redirectUris': {'type': 'array', 'items': {'type': 'string', 'maxLength': 512}, 'maxItems': 10, 'minItems': 1}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'id': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'crown': {'allOf': [{'type': ['object', 'null'], 'properties': {'crownId': {'type': ['integer', 'null'], 'description': "The token page's registration id"}, 'chainKey': {'type': ['string', 'null']}}}]}, 'createdAt': {'type': ['string', 'null']}, 'suspended': {'type': ['boolean', 'null'], 'description': 'Support turned the client off; it signs nobody in until support lifts it'}, 'updatedAt': {'type': ['string', 'null']}, 'clientSecret': {'type': ['string', 'null'], 'description': '`cd_oauth_` + 64 hex. Only in the create response, and only for a confidential client.'}, 'confidential': {'type': ['boolean', 'null']}, 'redirectUris': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'secretPrefix': {'type': ['string', 'null'], 'description': "First characters of a confidential client's secret (`cd_oauth_` + 6)"}, 'verifiedHosts': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}, 'description': 'Redirect hosts the consent screen marks Verified right now'}}}
find_api_operations
Find API operations
Search every Chain Daddy API operation an AI app may use, beyond the tools listed here: token pages, holders and community, broadcasts, alerts, deals, airdrop drafts, polls, Crown Apps, the developer program, Sign in with Chain Daddy, notifications, listings and more. Returns each match's tool name, what it does, whether it reads or changes something, whether it needs sign-in, and its input schema. Run a read with call_read_operation and a change with call_write_operation. Nothing found here moves money or tokens: paying, launching, claiming and trading happen on chaindaddy.io.
只读 幂等
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 8, 'maximum': 25, 'minimum': 1, 'description': 'How many operations to return (1-25, default 8).'}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'What you want to do or read, in plain words (e.g. "holder segments", "alert rules", "my deals").'}}, 'additionalProperties': False}
find_store
Find a token's store
Find a store A token's creator store and the items it sells (active ones only): each item's name, type, price and currency, stock, and per-wallet limit. Look the store up by `symbol`, or by token page (`chainKey` and `crownId`) when a ticker is registered on several chains. 404 means the token has no store. Buying happens on the token's page on chaindaddy.io.
只读 幂等
输入模式
{'type': 'object', 'properties': {'symbol': {'type': 'string', 'description': "The token's ticker."}, 'crownId': {'type': 'integer', 'description': "The registration's token ID on that chain. With chainKey."}, 'chainKey': {'type': 'string', 'description': "The registration's chain key, e.g. base. With crownId."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'skus': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'sku': {'type': ['string', 'null'], 'description': 'Key, unique in the store'}, 'name': {'type': ['string', 'null']}, 'rule': {'type': ['object', 'null'], 'allOf': [{'type': ['object', 'null'], 'properties': {'all': {'type': ['array', 'null'], 'items': {'description': 'A nested IapRule.'}}, 'any': {'type': ['array', 'null'], 'items': {'description': 'A nested IapRule.'}}, 'not': {'description': 'A nested IapRule.'}, 'hold': {'type': ['object', 'null'], 'properties': {'min': {'type': ['string', 'null'], 'description': 'Minimum balance in base units'}, 'token': {'type': ['string', 'null']}, 'chainId': {'type': ['string', 'null']}}}, 'owns': {'type': ['object', 'null'], 'properties': {'min': {'type': ['integer', 'null']}, 'sku': {'type': ['string', 'null']}}}}, 'description': "One node of the rule language shared by purchase gates, unlocks and drop audiences. Each node has\nexactly one key: `all` or `any` (a list of rules), `not` (a rule), `hold` (`{min, token?, chainId?}`:\na balance of at least `min` base units of the store's token, or of `token` on `chainId`), or `owns`\n(`{sku, min?}`: holds at least `min` of an item, default 1). Up to 4 levels deep and 32 nodes.\n"}], 'description': 'A purchase gate, or for `unlock` the condition that holds it'}, 'sold': {'type': ['integer', 'null']}, 'type': {'type': ['string', 'null'], 'description': '`consumable` adds to a balance; `non_consumable` is owned once; `timed` extends an expiry by\n`durationSeconds` per unit; `unlock` is never sold and is held while its `rule` holds.\n'}, 'price': {'type': ['string', 'null'], 'description': "Price in base units of the SKU's currency. Null means not for sale (reward-only or unlock).\nOn a dollar-priced SKU this is null in the creator's reads; in the public catalog it is the\namount for one unit at the current rate (`priceIsEstimate: true`; exact for `usdc`), or null\nwhen no price is available right now.\n"}, 'grants': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'sku': {'type': ['string', 'null']}, 'quantity': {'type': ['integer', 'null']}}}, 'description': 'A bundle. Buying it grants these items instead of itself.'}, 'splits': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'bps': {'type': ['integer', 'null']}, 'amount': {'type': ['string', 'null'], 'description': 'On an order and a receipt only, the base units this split was paid'}, 'address': {'type': ['string', 'null'], 'description': "A wallet on the store's chain; not the store payout, the fee recipient or the checkout"}}, 'description': "A revenue split: `bps` of the creator's share of each sale (the price after any platform fee), paid to `address` in the buyer's same payment. At most 2 per SKU (3 when the store pays no fee), together at most 9999."}, 'description': 'Revenue splits; absent or null when there are none. On an update, null clears them.'}, 'status': {'type': ['string', 'null']}, 'currency': {'type': ['string', 'null'], 'description': "What the SKU is paid in: `token`, the store's own token (the default); `native`, the chain's coin;\nor `usdc`, the chain's dollar stable (USDG on Robinhood Chain).\n"}, 'imageUrl': {'type': ['string', 'null']}, 'maxPrice': {'type': ['string', 'null'], 'description': "With `priceUsdMicros`, the most one unit may cost, in base units of the SKU's currency"}, 'metadata': {'type': ['object', 'null'], 'description': 'Free-form JSON for your app'}, 'minPrice': {'type': ['string', 'null'], 'description': "With `priceUsdMicros`, the least one unit may cost, in base units of the SKU's currency"}, 'createdAt': {'type': ['string', 'null']}, 'maxSupply': {'type': ['integer', 'null']}, 'sortOrder': {'type': ['integer', 'null']}, 'updatedAt': {'type': ['string', 'null']}, 'saleEndsAt': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'maxPerWallet': {'type': ['integer', 'null']}, 'saleStartsAt': {'type': ['string', 'null']}, 'currencySymbol': {'type': ['string', 'null']}, 'priceUsdMicros': {'type': ['integer', 'null'], 'description': "A USD price per unit in millionths of a dollar ($5 = 5000000), instead of `price`. Each order\nconverts it to an exact amount of the SKU's currency and locks it: exactly for `usdc`; for\n`token` or `native` at the live price (mean of the last 2 minutes of 15-second readings), rounded\nup to 4 significant figures and clamped to `minPrice`/`maxPrice`.\n"}, 'currencyAddress': {'type': ['string', 'null'], 'description': "The currency's address (the zero address for an EVM coin, `11111111111111111111111111111111` for SOL)"}, 'durationSeconds': {'type': ['integer', 'null'], 'description': 'For `timed` SKUs'}, 'priceIsEstimate': {'type': ['boolean', 'null'], 'description': 'Public catalog only, and only on a dollar-priced SKU paid in the token or the coin: `price` is an\nindicative conversion, not a quote. The order locks the amount the buyer pays.\n'}, 'currencyDecimals': {'type': ['integer', 'null']}}}, 'description': 'Active SKUs only'}, 'store': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'live': {'type': ['boolean', 'null'], 'description': 'False when the wallet that opened the store no longer has a Developer plan; the store then takes no new orders'}, 'name': {'type': ['string', 'null']}, 'price': {'type': ['object', 'null'], 'properties': {'asOf': {'type': ['string', 'null'], 'description': 'When the newest reading was taken'}, 'source': {'type': ['string', 'null']}, 'unavailable': {'type': ['string', 'null']}, 'usdPerToken': {'type': ['string', 'null'], 'description': 'USD per whole token, a decimal string'}, 'usdPerNative': {'type': ['string', 'null'], 'description': "USD per whole unit of the chain's coin (ETH, BNB, POL, SOL…), a decimal string: what a\ndollar-priced SKU paid in the coin would convert at now. Left out when no current rate is\navailable, independently of the token's rate; `source`, `asOf` and `unavailable` describe\nthe token's rate only.\n"}}, 'description': "The token's live dollar rate: what a dollar-priced SKU paid in the token would convert at now.\nEither `usdPerToken`, `source` and `asOf`, or `unavailable` with the reason an order would be\nrefused `PRICE_UNAVAILABLE`. Separately, `usdPerNative` is the chain's coin's rate when a\ncurrent one is available.\n"}, 'feeBps': {'type': ['integer', 'null'], 'description': 'What Chain Daddy takes from each sale, in basis points (0 on tokens launched in a Chain Daddy launchpad pool)'}, 'status': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'chainId': {'type': ['string', 'null']}, 'crownId': {'type': ['integer', 'null'], 'description': 'Token page registration id'}, 'chainKey': {'type': ['string', 'null']}, 'createdAt': {'type': ['string', 'null']}, 'tokenOrigin': {'type': ['string', 'null']}, 'ownerAddress': {'type': ['string', 'null']}, 'tokenAddress': {'type': ['string', 'null'], 'description': "The token the store is priced in (the token page's own token)"}, 'payoutAddress': {'type': ['string', 'null'], 'description': 'Where sales pay out (default the token page owner)'}, 'tokenDecimals': {'type': ['integer', 'null']}}}}}
get_deal
Get a deal
Get one deal with its history Returns one deal with its event history, attestations and payment records. Read `stage`, `deadline` and `deadline_kind` for where it stands and which clock is running. Public: anyone with the id can read it. With a wallet session you also get `actions` (what you may do now); anonymously `actions` is null, a collab's agreed terms are removed from its events, and signatures on attestations are blanked. `terms` is never on this read; a party gets them from `GET /api/v2/deals/mine`.
只读 幂等
输入模式
{'type': 'object', 'required': ['dealId'], 'properties': {'dealId': {'type': 'string', 'format': 'uuid', 'description': "The deal's id (a UUID, as returned in `deal.id` / `dealId`)."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'deal': {'allOf': [{'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'fee': {'type': ['object', 'null'], 'properties': {'lockedAt': {'type': ['string', 'null']}, 'totalMicro': {'type': ['integer', 'null'], 'description': 'Total fee, taken out of the price'}, 'valueMicro': {'type': ['integer', 'null'], 'description': "The deal's price in micro-USD"}, 'protocolMicro': {'type': ['integer', 'null'], 'description': 'The protocol fee in micro-USD'}, 'launchDiscount': {'type': ['boolean', 'null'], 'description': 'True when the first-deals launch discount (half off) applied'}, 'facilitationMicro': {'type': ['integer', 'null'], 'description': 'The bracketed facilitation fee in micro-USD'}}, 'description': 'The facilitation fee, fixed when the holder accepts a priced buyout or project sale (only when deal fees are\nswitched on). Amounts are USD in micro-units (1 USD = 1,000,000).\n'}, 'stage': {'type': ['string', 'null']}, 'terms': {'type': ['object', 'null'], 'description': 'The agreed deal-type terms. Only on `GET /api/v2/deals/mine`, which only returns deals you are a party to.'}, 'escrow': {'type': ['object', 'null'], 'properties': {'fee': {'type': ['string', 'null']}, 'hold': {'type': ['object', 'null'], 'properties': {'at': {'type': ['string', 'null']}, 'check': {'type': ['string', 'null'], 'description': 'Which readiness bar failed'}, 'reason': {'type': ['string', 'null'], 'description': 'The sentence shown to both parties'}}, 'description': 'A settle the readiness check refused. Both parties are shown `reason`.'}, 'salt': {'type': ['string', 'null']}, 'nonce': {'type': ['string', 'null']}, 'price': {'type': ['string', 'null']}, 'token': {'type': ['string', 'null']}, 'dealId': {'type': ['string', 'null'], 'description': 'The on-chain deal id (bytes32 hex)'}, 'chainId': {'type': ['integer', 'null']}, 'contract': {'type': ['string', 'null'], 'description': 'The escrow contract address'}, 'deadline': {'type': ['integer', 'null'], 'description': 'Unix seconds after which the deposit can be refunded'}, 'fundedAt': {'type': ['string', 'null']}, 'quoteSig': {'type': ['string', 'null'], 'description': "The operator's signature over the quote"}, 'refundTx': {'type': ['string', 'null']}, 'resolved': {'type': ['string', 'null'], 'description': "Set when a closed deal's escrow needs nothing more"}, 'settleTx': {'type': ['string', 'null']}, 'depositTx': {'type': ['string', 'null']}, 'refundedAt': {'type': ['string', 'null']}, 'quoteExpiry': {'type': ['integer', 'null'], 'description': 'Unix seconds after which this quote can no longer be deposited against'}}, 'description': "An EVM deal's settlement-contract (escrow) quote and what the chain has said about it since. Amounts are the\npayment token's base units as decimal strings; `token` is the zero address for the chain's native coin.\n"}, 'status': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'actions': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}, 'description': 'What THIS signed-in viewer may do right now. `[]` means "you may do nothing here"; `null` means the read had\nno viewer (anonymous) and is not answering.\n'}, 'message': {'type': ['string', 'null'], 'description': "The offerer's message"}, 'chain_id': {'type': ['integer', 'null']}, 'deadline': {'type': ['string', 'null'], 'description': 'The one clock that matters at this stage'}, 'group_id': {'type': ['string', 'null'], 'description': 'Set when the deal is one member of a group that only takes effect when every member is accepted'}, 'deal_type': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'expires_at': {'type': ['string', 'null'], 'description': 'When an unanswered offer lapses'}, 'updated_at': {'type': ['string', 'null']}, 'burn_tx_hash': {'type': ['string', 'null']}, 'completed_at': {'type': ['string', 'null']}, 'crown_holder': {'type': ['string', 'null'], 'description': 'The wallet holding the named registration right now (single-deal reads, and list rows awaiting you)'}, 'mint_tx_hash': {'type': ['string', 'null']}, 'agreed_amount': {'type': ['string', 'null'], 'description': 'The offered price, as a decimal string'}, 'buyer_address': {'type': ['string', 'null'], 'description': 'The registration holder, recorded at accept'}, 'deadline_kind': {'type': ['string', 'null']}, 'token_address': {'type': ['string', 'null'], 'description': "Which token's registration the deal names, when a ticker has several on one chain"}, 'crown_token_id': {'type': ['integer', 'null'], 'description': 'The registration (crown) token id the deal names'}, 'failure_reason': {'type': ['string', 'null']}, 'payment_method': {'type': ['string', 'null']}, 'seller_address': {'type': ['string', 'null'], 'description': 'The offering wallet (the acquirer), despite the name'}, 'agreed_currency': {'type': ['string', 'null'], 'description': 'Currency symbol of the price (upper case, e.g. `USDC`, `ETH`)'}, 'announcement_end': {'type': ['string', 'null']}, 'on_chain_deal_id': {'type': ['string', 'null']}, 'response_message': {'type': ['string', 'null'], 'description': "The holder's reply on accept, or reason on reject"}, 'announcement_start': {'type': ['string', 'null']}, 'burn_consent_expiry': {'type': ['integer', 'null'], 'description': 'Unix seconds when the stored consent stops being usable'}, 'buyer_crown_token_id': {'type': ['integer', 'null']}, 'migration_window_end': {'type': ['string', 'null'], 'description': "When holders' swap window closes (merge and buyout conversions)"}, 'burn_consent_recorded': {'type': ['boolean', 'null'], 'description': 'Whether the holder has signed settlement consent (never the consent itself)'}, 'fund_verification_pct': {'type': ['integer', 'null'], 'description': 'Share of the offer (percent) the offerer proved they held when making it'}}, 'description': 'One deal. `deal_type` is what kind (`buyout`, `merge`, `project_sale`, `collab`), `status` the stored state, and\n`stage` + `deadline` + `deadline_kind` the one-word lifecycle position and the single clock that matters now —\nread `stage`, not `status`, to decide what happens next. Note the column names read backwards for a buyout:\n`seller_address` is the wallet that MADE the offer (the acquirer) and `buyer_address` is the registration\nholder, written when they accept; before acceptance use `crown_holder`.\n'}, {'type': ['object', 'null'], 'properties': {'events': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'deal_id': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'event_data': {'type': ['object', 'null']}, 'event_type': {'type': ['string', 'null']}, 'actor_address': {'type': ['string', 'null']}}}}, 'payments': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'status': {'type': ['string', 'null']}, 'deal_id': {'type': ['string', 'null']}, 'tx_hash': {'type': ['string', 'null']}, 'tx_amount': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'escrow_url': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'tx_chain_id': {'type': ['integer', 'null']}, 'tx_verified': {'type': ['boolean', 'null']}, 'tx_timestamp': {'type': ['string', 'null']}, 'escrow_amount': {'type': ['string', 'null']}, 'tx_to_address': {'type': ['string', 'null']}, 'escrow_service': {'type': ['string', 'null']}, 'payment_method': {'type': ['string', 'null']}, 'tx_verified_at': {'type': ['string', 'null']}, 'escrow_currency': {'type': ['string', 'null']}, 'tx_block_number': {'type': ['integer', 'null']}, 'tx_from_address': {'type': ['string', 'null']}, 'tx_token_symbol': {'type': ['string', 'null']}, 'escrow_reference': {'type': ['string', 'null']}, 'tx_token_address': {'type': ['string', 'null']}, 'tx_verification_error': {'type': ['string', 'null']}}}}, 'attestations': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'deal_id': {'type': ['string', 'null']}, 'verified': {'type': ['boolean', 'null']}, 'signature': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'signer_role': {'type': ['string', 'null']}, 'verified_at': {'type': ['string', 'null']}, 'message_hash': {'type': ['string', 'null']}, 'signer_address': {'type': ['string', 'null']}, 'attestation_type': {'type': ['string', 'null']}, 'domain_separator': {'type': ['string', 'null']}, 'verification_error': {'type': ['string', 'null']}}, 'description': 'A signed statement by a party. `signature`, `message_hash` and `domain_separator` are blank unless you are a party.'}}}}]}, 'success': {'type': ['boolean', 'null']}}}
get_developer_app
Get one of my apps
Get one of your apps One app the signed-in developer owns, with its full store listing (subtitle, description, category, tags, links, icon and screenshots) and status. Someone else's app answers 404, the same as one that does not exist. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'required': ['appId'], 'properties': {'appId': {'type': 'string', 'format': 'uuid', 'description': "The app's id: the `id` field from `GET /api/v2/developer/apps` (a UUID). Not the app's slug, and not the manifest `id`."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'id': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'slug': {'type': ['string', 'null']}, 'tags': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'is_oss': {'type': ['boolean', 'null']}, 'status': {'type': ['string', 'null'], 'description': '`draft`, `submitted`, `in_review`, `approved`, `published`, `suspended` or `removed`'}, 'version': {'type': ['string', 'null']}, 'category': {'type': ['string', 'null']}, 'icon_url': {'type': ['string', 'null']}, 'subtitle': {'type': ['string', 'null']}, 'bundle_url': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'screenshots': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'support_url': {'type': ['string', 'null']}, 'website_url': {'type': ['string', 'null']}, 'manifest_url': {'type': ['string', 'null']}, 'published_at': {'type': ['string', 'null']}, 'suspended_at': {'type': ['string', 'null']}, 'enabled_count': {'type': ['integer', 'null'], 'description': 'How many token pages have it switched on'}, 'download_count': {'type': ['integer', 'null']}, 'repository_url': {'type': ['string', 'null']}, 'developer_wallet': {'type': ['string', 'null']}, 'privacy_policy_url': {'type': ['string', 'null']}}, 'description': 'One of your apps, with its store listing'}
get_developer_program_status
Get my developer program status
Your developer program status Everything that decides what the signed-in wallet can do in the developer program: `stage` (`subscribe` = no account and no paid plan, `agreement` = must sign the current agreement, `portal` = a member in good standing, `suspended`), whether the current agreement is signed, the wallet's own plan, and its developer account (with `can_publish`). Call this first when a developer route refuses with `DEVELOPER_AGREEMENT_REQUIRED` or `PAID_PLAN_REQUIRED`. A trial plan reads `paid: false`: it does not count for joining or publishing. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'plan': {'type': ['object', 'null'], 'properties': {'paid': {'type': ['boolean', 'null'], 'description': 'An active plan other than free that is not a trial. Joining and publishing need this.'}, 'tier': {'type': ['string', 'null'], 'description': 'Plan tier, lowercase (empty with no plan)'}, 'is_trial': {'type': ['boolean', 'null']}, 'expires_at': {'type': ['string', 'null']}, 'display_name': {'type': ['string', 'null']}}, 'description': "The wallet's own Chain Daddy plan, as the program's gates read it"}, 'stage': {'type': ['string', 'null'], 'description': '`subscribe`: no developer account and no paid plan. `agreement`: sign the current agreement.\n`portal`: a member in good standing. `suspended`: program access is suspended.\n'}, 'wallet': {'type': ['string', 'null']}, 'account': {'allOf': [{'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null'], 'description': 'Your developer ID; manifests carry it as `author.developerId`'}, 'bio': {'type': ['string', 'null']}, 'wallet': {'type': ['string', 'null']}, 'app_count': {'type': ['integer', 'null']}, 'avatar_url': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'kyc_method': {'type': ['string', 'null']}, 'kyc_status': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'can_publish': {'type': ['boolean', 'null'], 'description': 'Whether a publish would succeed now (current agreement signed and an active paid plan)'}, 'website_url': {'type': ['string', 'null']}, 'display_name': {'type': ['string', 'null']}, 'contact_email': {'type': ['string', 'null']}, 'kyc_verified_at': {'type': ['string', 'null']}, 'tos_accepted_at': {'type': ['string', 'null']}, 'subscription_tier': {'type': ['string', 'null']}, 'subscription_status': {'type': ['string', 'null'], 'description': '`suspended` blocks every program action'}, 'subscription_expires_at': {'type': ['string', 'null']}, 'subscription_started_at': {'type': ['string', 'null']}}, 'description': "The wallet's developer account"}], 'description': 'Null when the wallet has no developer account'}, 'agreement': {'type': ['object', 'null'], 'properties': {'sha256': {'type': ['string', 'null']}, 'version': {'type': ['string', 'null'], 'description': 'The current agreement version'}, 'accepted': {'type': ['boolean', 'null'], 'description': 'Whether the CURRENT version is signed'}, 'accepted_at': {'type': ['string', 'null']}, 'effective_date': {'type': ['string', 'null']}, 'accepted_version': {'type': ['string', 'null'], 'description': 'The latest version this wallet signed, current or not'}}}}}
get_fees
Get current fees
Get all current fees Chain Daddy's current prices in US dollars: `crownFee` to register an existing token's ticker on one chain, `createFee` to create a token with Chain Daddy's token factory, multi-chain `bundles`, and plan prices per month and per year (`subscriptionTiers`). A token launched through Chain Daddy is registered free, and some tokens qualify for a free claim, so quote one token's real price with check_registration_eligibility. Launchpad trading fees are not listed here.
只读 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'bundles': {'type': ['object', 'null'], 'properties': {'duo': {'type': ['object', 'null'], 'properties': {'price': {'type': ['number', 'null'], 'description': 'Bundle price in USD'}, 'chains': {'type': ['integer', 'null']}, 'savings': {'type': ['number', 'null'], 'description': 'Savings vs per-chain pricing in USD'}}}, 'tri': {'type': ['object', 'null'], 'properties': {'price': {'type': ['number', 'null'], 'description': 'Bundle price in USD'}, 'chains': {'type': ['integer', 'null']}, 'savings': {'type': ['number', 'null'], 'description': 'Savings vs per-chain pricing in USD'}}}, 'quad': {'type': ['object', 'null'], 'properties': {'price': {'type': ['number', 'null'], 'description': 'Bundle price in USD'}, 'chains': {'type': ['integer', 'null']}, 'savings': {'type': ['number', 'null'], 'description': 'Savings vs per-chain pricing in USD'}}}, 'allChain': {'type': ['object', 'null'], 'properties': {'price': {'type': ['number', 'null'], 'description': 'Bundle price in USD'}, 'chains': {'type': ['integer', 'null']}, 'savings': {'type': ['number', 'null'], 'description': 'Savings vs per-chain pricing in USD'}}}, 'allChainEth': {'type': ['object', 'null'], 'properties': {'price': {'type': ['number', 'null'], 'description': 'Bundle price in USD'}, 'chains': {'type': ['integer', 'null']}, 'savings': {'type': ['number', 'null'], 'description': 'Savings vs per-chain pricing in USD'}}}}}, 'crownFee': {'type': ['number', 'null'], 'description': 'Claim fee in USD'}, 'createFee': {'type': ['number', 'null'], 'description': 'Token creation fee in USD'}, 'linkPrice': {'type': ['number', 'null'], 'description': 'Cross-chain link fee in USD'}, 'whaleMultiplier': {'type': ['number', 'null'], 'description': 'Ethereum mainnet fee multiplier'}, 'expiredClaimPrice': {'type': ['number', 'null'], 'deprecated': True, 'description': 'Legacy field, not charged. An expired ticker is registered again at the standard price.'}, 'subscriptionTiers': {'type': ['object', 'null'], 'description': 'Per-tier monthly and yearly prices in USD', 'additionalProperties': {'type': ['object', 'null'], 'properties': {'yearly': {'type': ['number', 'null']}, 'monthly': {'type': ['number', 'null']}}}}}}
get_holder_segments
Size your holder segments
Size your holder segments How many reachable subscribers (verified, not opted out) are in each holder segment, and the size of the audience you select: `all`, `new_7d` (joined in the last 7 days), `churned` (sold everything), `reduced_50` (cut their position by half or more), `whales` (top 1% or $10k+), `top_10`, `top_25`, `top_50`, `top_100`. `audience.reachableByDM` is how many of those the bot can DM on Telegram or Discord. Owner or manager; wallet session only. Use it before a broadcast or a reward to see who a selection reaches. The mistake to avoid: a token page id repeats across chains; pass `chain` so the right token's ownership is checked. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'integer', 'format': 'int64', 'minimum': 1, 'description': "The token page's id (the registration's numeric token id)"}, 'chain': {'type': 'string', 'description': 'Chain key, `^[a-z0-9-]{1,32}$`'}, 'tierId': {'type': 'string', 'description': 'Narrow everything to one holder group'}, 'segments': {'type': 'string', 'examples': ['whales,top_25'], 'description': 'Comma-separated segments to size as one audience. An unknown name is 400.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'audience': {'type': ['object', 'null'], 'properties': {'count': {'type': ['integer', 'null'], 'description': 'Subscribers in ANY selected segment (everyone reachable when none is selected)'}, 'reachableByDM': {'type': ['integer', 'null']}}}, 'segments': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'count': {'type': ['integer', 'null']}}}}}}
get_registration
Get a ticker's registration
Get a ticker's registration status Whether a ticker has a registration, and if so who holds it: `status` is `confirmed` (a registration exists on chain), `pending` or `confirming` (a token launched through Chain Daddy whose registration is still being written; `owner` is its creator) or `available` (none). It answers with ONE registration, the first found; a ticker can be registered on several chains, each by the holder of its own token, so use list_registrations to see every chain. `available` here does not mean every chain is free.
只读 幂等
输入模式
{'type': 'object', 'required': ['symbol'], 'properties': {'symbol': {'type': 'string', 'examples': ['DOGE'], 'description': 'Token ticker, e.g. DOGE.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'owner': {'type': ['string', 'null'], 'description': "The holder; for a pending registration, the token's creator"}, 'status': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'txHash': {'type': ['string', 'null'], 'description': 'Pending transaction hash (only when isPending is true)'}, 'chainId': {'type': ['integer', 'null']}, 'tokenId': {'type': ['integer', 'null']}, 'isPending': {'type': ['boolean', 'null']}, 'tierCount': {'type': ['integer', 'null'], 'description': 'How many holder tiers the token page has set up'}, 'primaryType': {'type': ['string', 'null']}, 'primaryClaimedAt': {'type': ['string', 'null']}}}
get_store
Get a store by ID
A store's public catalog A creator store and its active items, by store ID (the `store.id` find_store returns). Same answer as find_store.
只读 幂等
输入模式
{'type': 'object', 'required': ['storeId'], 'properties': {'storeId': {'type': 'string', 'format': 'uuid', 'description': "The store's ID (a UUID)"}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'skus': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'sku': {'type': ['string', 'null'], 'description': 'Key, unique in the store'}, 'name': {'type': ['string', 'null']}, 'rule': {'type': ['object', 'null'], 'allOf': [{'type': ['object', 'null'], 'properties': {'all': {'type': ['array', 'null'], 'items': {'description': 'A nested IapRule.'}}, 'any': {'type': ['array', 'null'], 'items': {'description': 'A nested IapRule.'}}, 'not': {'description': 'A nested IapRule.'}, 'hold': {'type': ['object', 'null'], 'properties': {'min': {'type': ['string', 'null'], 'description': 'Minimum balance in base units'}, 'token': {'type': ['string', 'null']}, 'chainId': {'type': ['string', 'null']}}}, 'owns': {'type': ['object', 'null'], 'properties': {'min': {'type': ['integer', 'null']}, 'sku': {'type': ['string', 'null']}}}}, 'description': "One node of the rule language shared by purchase gates, unlocks and drop audiences. Each node has\nexactly one key: `all` or `any` (a list of rules), `not` (a rule), `hold` (`{min, token?, chainId?}`:\na balance of at least `min` base units of the store's token, or of `token` on `chainId`), or `owns`\n(`{sku, min?}`: holds at least `min` of an item, default 1). Up to 4 levels deep and 32 nodes.\n"}], 'description': 'A purchase gate, or for `unlock` the condition that holds it'}, 'sold': {'type': ['integer', 'null']}, 'type': {'type': ['string', 'null'], 'description': '`consumable` adds to a balance; `non_consumable` is owned once; `timed` extends an expiry by\n`durationSeconds` per unit; `unlock` is never sold and is held while its `rule` holds.\n'}, 'price': {'type': ['string', 'null'], 'description': "Price in base units of the SKU's currency. Null means not for sale (reward-only or unlock).\nOn a dollar-priced SKU this is null in the creator's reads; in the public catalog it is the\namount for one unit at the current rate (`priceIsEstimate: true`; exact for `usdc`), or null\nwhen no price is available right now.\n"}, 'grants': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'sku': {'type': ['string', 'null']}, 'quantity': {'type': ['integer', 'null']}}}, 'description': 'A bundle. Buying it grants these items instead of itself.'}, 'splits': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'bps': {'type': ['integer', 'null']}, 'amount': {'type': ['string', 'null'], 'description': 'On an order and a receipt only, the base units this split was paid'}, 'address': {'type': ['string', 'null'], 'description': "A wallet on the store's chain; not the store payout, the fee recipient or the checkout"}}, 'description': "A revenue split: `bps` of the creator's share of each sale (the price after any platform fee), paid to `address` in the buyer's same payment. At most 2 per SKU (3 when the store pays no fee), together at most 9999."}, 'description': 'Revenue splits; absent or null when there are none. On an update, null clears them.'}, 'status': {'type': ['string', 'null']}, 'currency': {'type': ['string', 'null'], 'description': "What the SKU is paid in: `token`, the store's own token (the default); `native`, the chain's coin;\nor `usdc`, the chain's dollar stable (USDG on Robinhood Chain).\n"}, 'imageUrl': {'type': ['string', 'null']}, 'maxPrice': {'type': ['string', 'null'], 'description': "With `priceUsdMicros`, the most one unit may cost, in base units of the SKU's currency"}, 'metadata': {'type': ['object', 'null'], 'description': 'Free-form JSON for your app'}, 'minPrice': {'type': ['string', 'null'], 'description': "With `priceUsdMicros`, the least one unit may cost, in base units of the SKU's currency"}, 'createdAt': {'type': ['string', 'null']}, 'maxSupply': {'type': ['integer', 'null']}, 'sortOrder': {'type': ['integer', 'null']}, 'updatedAt': {'type': ['string', 'null']}, 'saleEndsAt': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'maxPerWallet': {'type': ['integer', 'null']}, 'saleStartsAt': {'type': ['string', 'null']}, 'currencySymbol': {'type': ['string', 'null']}, 'priceUsdMicros': {'type': ['integer', 'null'], 'description': "A USD price per unit in millionths of a dollar ($5 = 5000000), instead of `price`. Each order\nconverts it to an exact amount of the SKU's currency and locks it: exactly for `usdc`; for\n`token` or `native` at the live price (mean of the last 2 minutes of 15-second readings), rounded\nup to 4 significant figures and clamped to `minPrice`/`maxPrice`.\n"}, 'currencyAddress': {'type': ['string', 'null'], 'description': "The currency's address (the zero address for an EVM coin, `11111111111111111111111111111111` for SOL)"}, 'durationSeconds': {'type': ['integer', 'null'], 'description': 'For `timed` SKUs'}, 'priceIsEstimate': {'type': ['boolean', 'null'], 'description': 'Public catalog only, and only on a dollar-priced SKU paid in the token or the coin: `price` is an\nindicative conversion, not a quote. The order locks the amount the buyer pays.\n'}, 'currencyDecimals': {'type': ['integer', 'null']}}}, 'description': 'Active SKUs only'}, 'store': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'live': {'type': ['boolean', 'null'], 'description': 'False when the wallet that opened the store no longer has a Developer plan; the store then takes no new orders'}, 'name': {'type': ['string', 'null']}, 'price': {'type': ['object', 'null'], 'properties': {'asOf': {'type': ['string', 'null'], 'description': 'When the newest reading was taken'}, 'source': {'type': ['string', 'null']}, 'unavailable': {'type': ['string', 'null']}, 'usdPerToken': {'type': ['string', 'null'], 'description': 'USD per whole token, a decimal string'}, 'usdPerNative': {'type': ['string', 'null'], 'description': "USD per whole unit of the chain's coin (ETH, BNB, POL, SOL…), a decimal string: what a\ndollar-priced SKU paid in the coin would convert at now. Left out when no current rate is\navailable, independently of the token's rate; `source`, `asOf` and `unavailable` describe\nthe token's rate only.\n"}}, 'description': "The token's live dollar rate: what a dollar-priced SKU paid in the token would convert at now.\nEither `usdPerToken`, `source` and `asOf`, or `unavailable` with the reason an order would be\nrefused `PRICE_UNAVAILABLE`. Separately, `usdPerNative` is the chain's coin's rate when a\ncurrent one is available.\n"}, 'feeBps': {'type': ['integer', 'null'], 'description': 'What Chain Daddy takes from each sale, in basis points (0 on tokens launched in a Chain Daddy launchpad pool)'}, 'status': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'chainId': {'type': ['string', 'null']}, 'crownId': {'type': ['integer', 'null'], 'description': 'Token page registration id'}, 'chainKey': {'type': ['string', 'null']}, 'createdAt': {'type': ['string', 'null']}, 'tokenOrigin': {'type': ['string', 'null']}, 'ownerAddress': {'type': ['string', 'null']}, 'tokenAddress': {'type': ['string', 'null'], 'description': "The token the store is priced in (the token page's own token)"}, 'payoutAddress': {'type': ['string', 'null'], 'description': 'Where sales pay out (default the token page owner)'}, 'tokenDecimals': {'type': ['integer', 'null']}}}}}
get_store_config
Get creator store settings
Store configuration How creator stores work right now: whether they are switched on, the chains a store can run on, what an item on each chain can be priced in besides the store's own token (the chain's coin, a dollar stablecoin), and where the receipt signing keys are published.
只读 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'chains': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'chainId': {'type': ['string', 'null'], 'description': 'CAIP-2 chain id'}, 'chainKey': {'type': ['string', 'null']}, 'checkout': {'type': ['string', 'null'], 'description': 'The checkout contract address. Absent on Solana.'}, 'currencies': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'symbol': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null'], 'description': "The zero address for an EVM chain's coin, `11111111111111111111111111111111` for SOL, otherwise\nthe stable's contract or mint\n"}, 'currency': {'type': ['string', 'null']}, 'decimals': {'type': ['integer', 'null']}}}, 'description': "What a SKU on this chain may be paid in besides the store's own token (always allowed, and the\ndefault): the chain's coin and, where the chain has one, its dollar stable.\n"}, 'confirmations': {'type': ['integer', 'null'], 'description': 'Confirmations an order waits for before it is `confirmed`'}}}}, 'enabled': {'type': ['boolean', 'null']}, 'jwksUrl': {'type': ['string', 'null']}, 'solanaStaticKey': {'type': ['string', 'null'], 'description': 'The read-only account every Solana store payment references'}}}
get_token
Get a token
Get a token by ticker on one chain The leading token with this ticker on one chain: market data (price, market cap, liquidity, holders), links, and its registration if it has one (`hasCrown`, `registration.owner`). When several tokens share a ticker on a chain, this returns the registered one if there is one, else the largest; pass `tokenAddress` to name the contract you mean, and use search_tokens to see every token with the ticker.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'required': ['chain', 'symbol'], 'properties': {'chain': {'enum': ['eth', 'arbitrum', 'arbitrum-sepolia', 'base', 'polygon', 'bnb', 'avax', 'robinhood', 'solana', 'solana-devnet'], 'type': 'string', 'examples': ['arbitrum'], 'description': 'Chain key identifier'}, 'symbol': {'type': 'string', 'examples': ['PEPE'], 'description': 'Token ticker, e.g. PEPE (case-insensitive).'}, 'tokenAddress': {'type': 'string', 'description': "The token's contract address (or Solana mint), when the chain has several tokens with this ticker."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'token': {'type': ['object', 'null'], 'properties': {'fdv': {'type': ['number', 'null'], 'description': 'Fully diluted valuation'}, 'name': {'type': ['string', 'null']}, 'venue': {'type': ['string', 'null'], 'description': 'Where it trades'}, 'buyTax': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null'], 'description': 'Token contract address (or Solana mint)'}, 'copycat': {'type': ['object', 'null'], 'properties': {'signals': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'imitatesName': {'type': ['string', 'null']}, 'imitatesChain': {'type': ['string', 'null']}, 'imitatesAddress': {'type': ['string', 'null']}}, 'description': 'Present when the token imitates a better-known one'}, 'discord': {'type': ['string', 'null']}, 'holders': {'type': ['integer', 'null']}, 'logoUrl': {'type': ['string', 'null']}, 'sellTax': {'type': ['string', 'null']}, 'twitter': {'type': ['string', 'null']}, 'website': {'type': ['string', 'null']}, 'contract': {'type': ['string', 'null'], 'description': 'The contract or launchpad the token was created with'}, 'decimals': {'type': ['integer', 'null']}, 'operator': {'type': ['string', 'null'], 'description': 'Who created it (a launchpad or deployer platform)'}, 'priceUsd': {'type': ['number', 'null']}, 'telegram': {'type': ['string', 'null']}, 'bannerUrl': {'type': ['string', 'null'], 'description': 'Header/banner image URL'}, 'createdAt': {'type': ['string', 'null']}, 'liquidity': {'type': ['number', 'null']}, 'marketCap': {'type': ['number', 'null']}, 'volume24h': {'type': ['number', 'null']}, 'isHoneypot': {'type': ['boolean', 'null'], 'description': 'Set when a scanner flagged that the token cannot be sold'}, 'description': {'type': ['string', 'null']}, 'priceChange1h': {'type': ['number', 'null'], 'description': '1-hour price change, in percent'}, 'priceChange24h': {'type': ['number', 'null'], 'description': '24-hour price change, in percent'}}}, 'source': {'type': ['string', 'null']}, 'chainId': {'anyOf': [{'type': ['integer', 'null']}, {'type': ['string', 'null']}], 'description': 'The EVM chain ID, or `solana:mainnet`'}, 'chainKey': {'type': ['string', 'null']}, 'hasCrown': {'type': ['boolean', 'null']}, 'chainName': {'type': ['string', 'null']}, 'registration': {'allOf': [{'type': ['object', 'null'], 'properties': {'owner': {'type': ['string', 'null'], 'description': 'The wallet holding the registration'}, 'status': {'type': ['string', 'null'], 'description': 'Registration status:\n- `available`: No token exists on this chain\n- `unclaimed`: Token exists but no registration minted\n- `grace_period`: New registration in 30-day grace period\n- `claimed`: Registration exists (owned by someone else)\n- `owned`: Factory-created token (you own it)\n- `inactive`: Registration exists but heartbeat below 60%\n'}, 'tokenId': {'type': ['integer', 'null'], 'description': 'Registration token ID (null if unclaimed)'}, 'mintTimestamp': {'type': ['integer', 'null'], 'description': 'When the registration was written (unix seconds)'}, 'verificationMethod': {'type': ['string', 'null'], 'description': 'Method used to verify ownership'}, 'crownContractAddress': {'type': ['string', 'null'], 'description': 'The registry contract the registration lives in'}}, 'description': "The token's registration"}]}, 'launchpadOrigin': {'type': ['boolean', 'null'], 'description': 'The token was launched through Chain Daddy'}}}
get_token_holder_snapshot
Get a token's holder snapshot
Get a token's holder snapshot How concentrated a token's holders are: the total holder count, the share of supply held by the top 10/50/100/200 wallets, how many wallets hold half the supply, and counts of snipers, bundlers, insiders and sandwich traders. Refreshed about daily from a market-data vendor; `fetchedAt` says when. Use it to judge distribution or risk. It never lists wallet addresses; for the people who subscribed to a token's updates, use the community member routes instead. The mistake to avoid: a token page id is unique per chain, not across chains. Check that `symbol` and `chainId` in the answer are the token you meant. `404` means no token page, or no snapshot yet.
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'integer', 'format': 'int64', 'minimum': 1, 'description': "The token page's id (the registration's numeric token id)"}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'source': {'type': ['string', 'null'], 'description': 'The data vendor'}, 'symbol': {'type': ['string', 'null']}, 'chainId': {'type': ['integer', 'null']}, 'quality': {'type': ['object', 'null'], 'properties': {'snipersCount': {'type': ['integer', 'null']}, 'bundlersCount': {'type': ['integer', 'null']}, 'insidersCount': {'type': ['integer', 'null']}, 'sandwichCount': {'type': ['integer', 'null']}, 'suspiciousRatio': {'type': ['number', 'null'], 'description': 'Share of holders flagged suspicious, 0-1'}}}, 'success': {'type': ['boolean', 'null']}, 'tokenId': {'type': ['integer', 'null']}, 'fetchedAt': {'type': ['string', 'null']}, 'chainCAIP2': {'type': ['string', 'null']}, 'totalHolders': {'type': ['integer', 'null']}, 'concentration': {'type': ['object', 'null'], 'properties': {'top10Pct': {'type': ['number', 'null'], 'description': 'Percent of supply (0-100) held by the top 10 wallets'}, 'top50Pct': {'type': ['number', 'null']}, 'breakdown': {'type': ['object', 'null'], 'description': 'How the figures were reached: the source, the share of supply left out (pool reserves, burn)\nand named balances (team, fee address). Labels and percentages only, no addresses.\n'}, 'top100Pct': {'type': ['number', 'null']}, 'top200Pct': {'type': ['number', 'null']}, 'walletsForHalf': {'type': ['integer', 'null'], 'description': 'How many of the largest wallets together hold half the supply'}}}}}
get_token_metrics_summary
How a token's metrics moved
How a token's metrics moved this period The latest snapshot plus, for holders, volume, liquidity, concentration, heartbeat, price and market cap, the average over the last `period` days against the `period` before it, with the change and percentage change. Public. Use this for "how is my token doing this week". A metric with no data in either period is left out, and `change`/`pctChange` appear only when both periods have data. The id is `<symbol>.<chainKey>`; an unknown id answers 200 with nothing in it.
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'examples': ['pepe.base'], 'description': 'The token as `<symbol>.<chainKey>` in lower case, e.g. `pepe.base` (not the numeric token id)'}, 'period': {'type': 'integer', 'default': 7, 'maximum': 365, 'minimum': 1, 'description': 'Days per period'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'price': {'type': ['object', 'null'], 'properties': {'change': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null'], 'description': 'Average over the latest period'}, 'previous': {'type': ['number', 'null'], 'description': 'Average over the period before'}, 'pctChange': {'type': ['number', 'null']}}}, 'latest': {'type': ['object', 'null'], 'properties': {'date': {'type': ['string', 'null']}, 'tokenId': {'type': ['string', 'null']}, 'priceUsd': {'type': ['number', 'null']}, 'marketCap': {'type': ['number', 'null']}, 'holderCount': {'type': ['integer', 'null']}, 'heartbeatScore': {'type': ['integer', 'null']}, 'liquidityDepth': {'type': ['number', 'null']}, 'tradingVolume24h': {'type': ['number', 'null']}, 'walletConcentrationTop10Pct': {'type': ['number', 'null']}}}, 'period': {'type': ['integer', 'null']}, 'volume': {'type': ['object', 'null'], 'properties': {'change': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null'], 'description': 'Average over the latest period'}, 'previous': {'type': ['number', 'null'], 'description': 'Average over the period before'}, 'pctChange': {'type': ['number', 'null']}}}, 'holders': {'type': ['object', 'null'], 'properties': {'change': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null'], 'description': 'Average over the latest period'}, 'previous': {'type': ['number', 'null'], 'description': 'Average over the period before'}, 'pctChange': {'type': ['number', 'null']}}}, 'success': {'type': ['boolean', 'null']}, 'tokenId': {'type': ['string', 'null']}, 'heartbeat': {'type': ['object', 'null'], 'properties': {'change': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null'], 'description': 'Average over the latest period'}, 'previous': {'type': ['number', 'null'], 'description': 'Average over the period before'}, 'pctChange': {'type': ['number', 'null']}}}, 'liquidity': {'type': ['object', 'null'], 'properties': {'change': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null'], 'description': 'Average over the latest period'}, 'previous': {'type': ['number', 'null'], 'description': 'Average over the period before'}, 'pctChange': {'type': ['number', 'null']}}}, 'marketCap': {'type': ['object', 'null'], 'properties': {'change': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null'], 'description': 'Average over the latest period'}, 'previous': {'type': ['number', 'null'], 'description': 'Average over the period before'}, 'pctChange': {'type': ['number', 'null']}}}, 'concentration': {'type': ['object', 'null'], 'properties': {'change': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null'], 'description': 'Average over the latest period'}, 'previous': {'type': ['number', 'null'], 'description': 'Average over the period before'}, 'pctChange': {'type': ['number', 'null']}}}}}
list_active_alerts
List my open alerts
List your open alerts Returns the alerts your rules have fired that are still open — status `triggered` (new) or `acknowledged` (seen, not yet resolved) — newest first. Use it to answer "what needs my attention right now". Optionally narrow to one token with BOTH `chainId` and `tokenAddress` (never `symbol`). Resolved alerts are not here; read `GET /api/v2/alerts/history` for those. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'properties': {'chainId': {'type': 'string', 'examples': ['base'], 'description': 'Narrow to one token. Chain key (`base`), numeric id or CAIP-2 id. Send together with `tokenAddress`.'}, 'tokenAddress': {'type': 'string', 'description': 'Narrow to one token (0x address on EVM, mint on Solana). Send together with `chainId`.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'alerts': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'body': {'type': ['string', 'null']}, 'title': {'type': ['string', 'null']}, 'status': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'rule_id': {'type': ['string', 'null'], 'description': 'The rule that fired it; absent once that rule is deleted'}, 'chain_id': {'type': ['string', 'null']}, 'metadata': {'type': ['object', 'null']}, 'severity': {'type': ['string', 'null']}, 'alert_type': {'type': ['string', 'null'], 'description': 'What the rule watches, and the lowest plan that may create it: `heartbeat_score` (Free, EVM only, needs a\ntoken page), `copycat_detected` (Free, needs a token page), `holder_count_drop`, `liquidity_drop`,\n`volume_anomaly`, `price_change` (Pro), `top10_concentration` (Pro+).\n'}, 'created_at': {'type': ['string', 'null']}, 'resolved_at': {'type': ['string', 'null']}, 'metric_value': {'type': ['number', 'null'], 'description': 'The measured value that crossed the threshold'}, 'triggered_at': {'type': ['string', 'null']}, 'token_address': {'type': ['string', 'null']}, 'wallet_address': {'type': ['string', 'null']}, 'acknowledged_at': {'type': ['string', 'null']}, 'resolved_reason': {'type': ['string', 'null']}, 'threshold_value': {'type': ['number', 'null']}, 'notification_sent': {'type': ['boolean', 'null']}}, 'description': 'One alert a rule fired.'}}}}
list_alert_rules
List my alert rules
List your alert rules Returns the alert rules owned by the signed-in wallet, newest first, each with its token, alert type, threshold, cooldown and whether it is enabled. Use it before creating a rule (to avoid a duplicate) and to find a rule's `id` for update, toggle or delete. Optionally narrow to one token with BOTH `chainId` and `tokenAddress`. Common mistakes: sending `symbol` (refused with 400 `invalid_filter`, because one ticker can name several tokens), or sending only one of the pair. Rules belong to the wallet you signed in with, not to the whole account: a rule made from another linked wallet is not listed here. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'properties': {'chainId': {'type': 'string', 'examples': ['base'], 'description': 'Narrow to one token. Chain key (`base`), numeric id or CAIP-2 id. Send together with `tokenAddress`.'}, 'tokenAddress': {'type': 'string', 'description': 'Narrow to one token (0x address on EVM, mint on Solana). Send together with `chainId`.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'rules': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null'], 'description': "The token's ticker, for display only (may be empty when unreadable)"}, 'enabled': {'type': ['boolean', 'null']}, 'chain_id': {'type': ['string', 'null'], 'description': 'CAIP-2 chain id, e.g. `eip155:8453`'}, 'alert_type': {'type': ['string', 'null'], 'description': 'What the rule watches, and the lowest plan that may create it: `heartbeat_score` (Free, EVM only, needs a\ntoken page), `copycat_detected` (Free, needs a token page), `holder_count_drop`, `liquidity_drop`,\n`volume_anomaly`, `price_change` (Pro), `top10_concentration` (Pro+).\n'}, 'created_at': {'type': ['string', 'null']}, 'updated_at': {'type': ['string', 'null']}, 'tier_required': {'type': ['string', 'null'], 'description': 'Lowest plan this alert type needs'}, 'token_address': {'type': ['string', 'null']}, 'wallet_address': {'type': ['string', 'null'], 'description': 'The owning wallet (lowercased)'}, 'threshold_value': {'type': ['number', 'null']}, 'cooldown_minutes': {'type': ['integer', 'null'], 'description': 'Minutes before this rule may fire again'}, 'threshold_operator': {'type': ['string', 'null'], 'description': '`gt` / `lt`: the metric is above / below `thresholdValue`. `pct_drop` / `pct_spike`: the metric fell / rose by\nat least `thresholdValue` percent. `top10_concentration` accepts only `gt` and `pct_spike`.\n'}, 'time_window_minutes': {'type': ['integer', 'null'], 'description': 'Look-back window for percentage operators'}}}}}}
list_community_members
List your community members
List your community members The wallets in your token's community, with email, holder group, verification time and any handles they shared (X, Discord, Telegram, ENS, SNS). The token page's owner is always listed first on page one. Owner or manager; wallet session only. Contains personal contact data: show it only to the creator. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'required': ['chain', 'id'], 'properties': {'id': {'type': 'integer', 'format': 'int64', 'minimum': 1, 'description': "The token page's id (the registration's numeric token id)"}, 'tier': {'type': 'string', 'description': 'A holder group id, or `all`'}, 'chain': {'type': 'string', 'examples': ['base'], 'description': "The token page's chain: a key (`base`, `arbitrum`, `solana`), a numeric chain id or CAIP-2. Required because a token id names a different token page on every chain; the role check and the data both stay on this chain."}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0}, 'status': {'enum': ['all', 'verified', 'unverified'], 'type': 'string', 'default': 'all'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'total': {'type': ['integer', 'null']}, 'members': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'x': {'type': ['string', 'null']}, 'ens': {'type': ['string', 'null']}, 'sns': {'type': ['string', 'null']}, 'email': {'type': ['string', 'null']}, 'reason': {'type': ['string', 'null'], 'description': 'Why the wallet is (or is not) verified, e.g. `manager_upload`, `Crown owner`'}, 'tierId': {'type': ['string', 'null']}, 'wallet': {'type': ['string', 'null']}, 'discord': {'type': ['string', 'null']}, 'telegram': {'type': ['string', 'null']}, 'uploadedAt': {'type': ['string', 'null']}, 'verifiedAt': {'type': ['string', 'null']}}}}}}
list_developer_apps
List my apps
List your apps Every app the developer owns, whatever its status (draft, in review, published, suspended, removed), newest change first, each with its latest build's submission state and how many violations are open. The `id` here is what every `/api/v2/developer/apps/{appId}` route takes. `wallet` is required and must be the signed-in wallet. For the public Apps directory use `GET /api/v2/apps` instead. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'required': ['wallet'], 'properties': {'wallet': {'type': 'string', 'pattern': '^0x[0-9a-fA-F]{40}$', 'description': "Your EVM wallet address (`0x` + 40 hex). Must be the signed-in wallet; any other wallet is refused with 403. It selects nothing: the route only ever reads the caller's own data."}}, 'additionalProperties': False}
list_holder_broadcast_history
Read a token's broadcasts
A token's past broadcasts The broadcasts a token page has sent, newest first, with `total` for paging. Anyone gets the public record: sent, not limited to a holder group. The page's owner or a manager, signed in, also gets holder-group sends and unsent scheduled drafts. Pass `crownChain` when the token id exists on more than one chain, or you may see another token's messages.
只读 幂等
输入模式
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'integer', 'format': 'int64', 'minimum': 1, 'description': "The token page's id (the registration's numeric token id)"}, 'type': {'enum': ['update', 'alert'], 'type': 'string'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0}, 'crownChain': {'type': 'string', 'description': 'Chain key of the token (e.g. `base`)'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'total': {'type': ['integer', 'null']}, 'notifications': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'body': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'title': {'type': ['string', 'null']}, 'sent_at': {'type': ['string', 'null'], 'description': 'Absent until the broadcast has gone out'}, 'tokenId': {'type': ['string', 'null'], 'description': 'The token page id'}, 'link_url': {'type': ['string', 'null']}, 'metadata': {'type': ['object', 'null'], 'description': '`channels`, `tier_ids`, `segments`, `chain_scope`, `crown_chain` as sent'}, 'image_url': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'source_type': {'type': ['string', 'null']}, 'rich_content': {'type': ['object', 'null']}, 'scheduled_at': {'type': ['string', 'null']}, 'sender_wallet': {'type': ['string', 'null']}, 'access_tier_id': {'type': ['string', 'null']}, 'recipient_count': {'type': ['integer', 'null']}}}}}}
list_launch_venues
Compare launch venues
Compare the contracts a token can be launched on The ranked catalog of every place Chain Daddy can launch a token: our own Uniswap v4 pool on EVM or Meteora DBC on Solana, our plain-token factory, and third-party launchpads (Clanker, Zora and others). For each venue and chain: whether it can be launched from Chain Daddy now (`launchable`), the contract the token ends up in, and the trading-fee economics in basis points of volume (`traderFeeBps`, `creatorBps`, `chainDaddyBps` and where that cut comes from, `venueBps`), plus pool-observed fees where measured, capabilities, dated sources and confidence. A creator picks a contract, not a product tier. Every launch from this list gets its registration free (`freeCrown`). Chain Daddy's own cut depends on the viewer's plan (20% free, 15% annual Pro/Pro+/Developer, 5% annual Partner/Enterprise), so send the caller's credentials for their real numbers. Third-party figures are dated research, not quotes.
只读 幂等
输入模式
{'type': 'object', 'properties': {'chainId': {'type': 'integer', 'format': 'int64', 'description': 'Narrow to one chain (numeric EVM id, or 900900 for Solana mainnet)'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'sort': {'type': ['string', 'null']}, 'venues': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null'], 'description': 'Wire id; never match on the display name'}, 'name': {'type': ['string', 'null']}, 'notes': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'chains': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'chainId': {'type': ['integer', 'null'], 'description': 'EVM chain id, or 900900 / 900901 for Solana mainnet / devnet'}, 'contract': {'type': ['string', 'null'], 'description': 'The contract the token ends up in; empty for a third-party venue, whose name is the contract'}, 'observed': {'type': ['object', 'null'], 'properties': {'method': {'type': ['string', 'null']}, 'observedAt': {'type': ['string', 'null']}, 'sampleSize': {'type': ['integer', 'null']}, 'traderFeeBps': {'type': ['object', 'null'], 'properties': {'max': {'type': ['integer', 'null']}, 'min': {'type': ['integer', 'null']}, 'default': {'type': ['integer', 'null']}}, 'description': 'Basis points of trade volume (100 = $1 of every $100 traded)'}}}, 'economics': {'type': ['object', 'null'], 'properties': {'otherBps': {'type': ['integer', 'null']}, 'venueBps': {'type': ['integer', 'null']}, 'phaseNote': {'type': ['string', 'null']}, 'creatorBps': {'type': ['integer', 'null']}, 'upfrontCost': {'type': ['string', 'null']}, 'traderFeeBps': {'type': ['object', 'null'], 'properties': {'max': {'type': ['integer', 'null']}, 'min': {'type': ['integer', 'null']}, 'default': {'type': ['integer', 'null']}}, 'description': 'Basis points of trade volume (100 = $1 of every $100 traded)'}, 'chainDaddyBps': {'type': ['integer', 'null']}, 'feeSetPerToken': {'type': ['boolean', 'null']}, 'chainDaddySource': {'type': ['string', 'null']}}}, 'launchable': {'type': ['boolean', 'null']}}}}, 'sources': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'url': {'type': ['string', 'null']}, 'label': {'type': ['string', 'null']}, 'checkedAt': {'type': ['string', 'null']}}}}, 'operator': {'type': ['string', 'null']}, 'checkedAt': {'type': ['string', 'null']}, 'freeCrown': {'type': ['boolean', 'null']}, 'confidence': {'type': ['string', 'null']}, 'integration': {'type': ['string', 'null']}, 'capabilities': {'type': ['object', 'null'], 'properties': {'devBuy': {'type': ['string', 'null']}, 'feeClaim': {'type': ['string', 'null']}, 'antiSnipe': {'type': ['string', 'null']}, 'graduation': {'type': ['string', 'null']}, 'liquidityModel': {'type': ['string', 'null']}}}, 'supportsVesting': {'type': ['boolean', 'null']}}}}, 'generatedAt': {'type': ['string', 'null']}}}
list_my_deals
List my deals
Your deals, with their agreed terms Lists every deal the signed-in account is a party to, across all its linked wallets: offers you made, deals you accepted, and offers waiting for YOUR answer as a registration holder. This is the only list that includes each deal's agreed `terms`, and each row carries `actions` (what you may do now) and `stage`. Use it for "what's happening with my deals" and "what do I need to answer". Filter with `deal_type` and `status`; an unknown value is a 400, not an empty list. Paginate with `limit`/`offset` against `total`. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'description': 'Page size.'}, 'offset': {'type': 'integer', 'default': 0, 'description': 'Rows to skip.'}, 'status': {'enum': ['draft', 'pending', 'announced', 'paused', 'payment_pending', 'executing', 'completed', 'failed', 'cancelled', 'migrating', 'closed'], 'type': 'string'}, 'deal_type': {'enum': ['buyout', 'merge', 'project_sale', 'collab'], 'type': 'string'}}, 'additionalProperties': False}
list_oauth_clients
List your Sign in with Chain Daddy clients
List your sign-in clients The Sign in with Chain Daddy clients you registered as a developer, newest first, deleted ones left out. Each shows its redirect URIs, whether it is confidential (and the first characters of its secret), the token page it is bound to, which redirect hosts the consent screen marks Verified right now, and whether support has suspended it. The secret itself is never shown again after creation. Needs a developer account (403 `DEVELOPER_AGREEMENT_REQUIRED` without one), not current membership. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'entries': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'crown': {'allOf': [{'type': ['object', 'null'], 'properties': {'crownId': {'type': ['integer', 'null'], 'description': "The token page's registration id"}, 'chainKey': {'type': ['string', 'null']}}}]}, 'createdAt': {'type': ['string', 'null']}, 'suspended': {'type': ['boolean', 'null'], 'description': 'Support turned the client off; it signs nobody in until support lifts it'}, 'updatedAt': {'type': ['string', 'null']}, 'clientSecret': {'type': ['string', 'null'], 'description': '`cd_oauth_` + 64 hex. Only in the create response, and only for a confidential client.'}, 'confidential': {'type': ['boolean', 'null']}, 'redirectUris': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'secretPrefix': {'type': ['string', 'null'], 'description': "First characters of a confidential client's secret (`cd_oauth_` + 6)"}, 'verifiedHosts': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}, 'description': 'Redirect hosts the consent screen marks Verified right now'}}}}}}
list_registrations
List a ticker's registrations
List a ticker's registrations on every chain Every registration of a ticker, on every chain, including ones still pending: for each, the chain (`primaryChainId`), the token contract it covers (`tokenAddress`), the holder (`owner`), whether it is active, and its heartbeat. One ticker can carry several registrations because each covers one token contract on one chain; an empty `tokens` list means the ticker has none.
只读 幂等
输入模式
{'type': 'object', 'required': ['symbol'], 'properties': {'symbol': {'type': 'string', 'examples': ['DOGE'], 'description': 'Token ticker, e.g. DOGE.'}, 'excludeEvm': {'type': 'string', 'examples': ['0x1234567890abcdef1234567890abcdef12345678'], 'description': 'Leave out registrations held by this EVM address.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'symbol': {'type': ['string', 'null']}, 'tokens': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'owner': {'type': ['string', 'null'], 'description': 'The wallet holding it'}, 'status': {'type': ['string', 'null']}, 'txHash': {'type': ['string', 'null']}, 'tokenId': {'type': ['integer', 'null'], 'description': "The registration's token ID on its chain (null while pending)"}, 'crownPda': {'type': ['string', 'null'], 'description': "The Solana registration's account address"}, 'isActive': {'type': ['boolean', 'null']}, 'isLinked': {'type': ['boolean', 'null']}, 'chainType': {'type': ['string', 'null']}, 'isPending': {'type': ['boolean', 'null']}, 'ownerType': {'type': ['string', 'null']}, 'peerIndex': {'type': ['integer', 'null']}, 'ownerGroup': {'type': ['string', 'null'], 'description': 'Groups registrations whose owners are linked wallets of one account'}, 'tokenAddress': {'type': ['string', 'null'], 'description': 'The token contract (or Solana mint) this registration covers'}, 'mintTimestamp': {'type': ['integer', 'null'], 'description': 'When it was written (unix seconds)'}, 'chainPeerIndex': {'type': ['integer', 'null']}, 'primaryChainId': {'anyOf': [{'type': ['integer', 'null']}, {'type': ['string', 'null']}], 'description': "The registration's chain, an EVM chain ID or a Solana cluster name"}, 'deploymentCount': {'type': ['integer', 'null']}, 'sharedMetadataCid': {'type': ['string', 'null']}, 'heartbeatComposite': {'type': ['integer', 'null'], 'description': "The health score, 0-100, from the token's age, trading and holders. A registration expires when it stays below 60 for 30 days in a row."}}}, 'description': 'One entry per registration; empty when the ticker has none'}}}
list_skills
List the skills
List Chain Daddy's skills: step-by-step workflows for launching or finding a token, checking its health, exporting a listing, selling items for it, signing users in, verifying receipts and building Crown Apps. Read one with read_skill before doing that task. The same skills are this server's prompts.
只读 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'skills': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Pass to read_skill.'}, 'title': {'type': 'string'}, 'description': {'type': 'string'}}}}}}
list_supported_chains
List the supported chains
List the supported chains The chains a token can be registered on, each with its ID, name and type (evm or solana), and the registry protocol in use. Use it to check a chain is supported before telling someone they can launch or register there.
只读 幂等
输入模式
{'type': 'object', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'success': {'type': ['boolean', 'null']}, 'protocol': {'type': ['string', 'null'], 'description': 'Registry protocol identifier'}, 'isOpenCrown': {'type': ['boolean', 'null']}, 'protocolVersion': {'type': ['string', 'null'], 'description': 'Registry protocol version'}, 'supportedChains': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'anyOf': [{'type': ['integer', 'null']}, {'type': ['string', 'null']}], 'description': 'The EVM chain ID, or a Solana cluster name such as `solana-mainnet`'}, 'name': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'enabled': {'type': ['boolean', 'null']}}}, 'description': 'Chains supported by the registry'}}}
list_wallet_registrations
List a wallet's registrations
List the registrations a wallet holds The registrations held by a wallet, without signing in. Only the wallet's 100 most recently minted registrations are considered; `limit`/`offset` page within those and `total` never exceeds 100. Each row has a v3 `id` (`crown-{symbol}-{chainKey}-{tokenId}`), `chainId`, `tokenId`, `tokenAddress` and `isActive`. Caveats: `mintTimestamp` is the time of your request, not the mint; `caip2` is always written `eip155:{chainId}`, even for Solana (chain id 900900/900901); `owner` echoes the address you sent. Response is wrapped in `{success, data, timestamp}`.
只读 幂等
输入模式
{'type': 'object', 'required': ['address'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 200}, 'offset': {'type': 'integer', 'default': 0}, 'address': {'type': 'string', 'description': 'EVM address (`0x` + 40 hex) or Solana address'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'data': {'type': ['object', 'null'], 'properties': {'limit': {'type': ['integer', 'null']}, 'total': {'type': ['integer', 'null']}, 'offset': {'type': ['integer', 'null']}, 'tokens': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null'], 'description': '`crown-{symbol}-{chainKey}-{tokenId}`'}, 'caip2': {'type': ['string', 'null']}, 'owner': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'chainId': {'type': ['integer', 'null']}, 'tokenId': {'type': ['integer', 'null']}, 'isActive': {'type': ['boolean', 'null']}, 'symbolType': {'type': ['string', 'null']}, 'tokenAddress': {'type': ['string', 'null']}, 'mintTimestamp': {'type': ['integer', 'null']}, 'verificationType': {'type': ['string', 'null']}}}}}}, 'success': {'type': ['boolean', 'null']}, 'timestamp': {'type': ['integer', 'null']}}}
read_doc
Read a docs page
Read one page of Chain Daddy's documentation as Markdown. Pass the path search_docs returned (e.g. "developer/store-and-rewards.md"); a docs.chaindaddy.io URL works too. Only pages listed in the docs index can be read.
只读 幂等
输入模式
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'A page path from search_docs, or its docs.chaindaddy.io URL.'}}, 'additionalProperties': False}
read_skill
Read a skill
Read one Chain Daddy skill in full, as Markdown: the workflow, the tools it uses and the rules it keeps. Pass a name from list_skills, and follow it for that task.
只读 幂等
输入模式
{'type': 'object', 'required': ['name'], 'properties': {'name': {'enum': ['add-crypto-to-your-game', 'build-a-crown-app', 'check-token-health', 'export-a-listing', 'find-and-check-a-token', 'launch-a-token', 'sell-items-in-your-app', 'sign-in-with-chain-daddy', 'verify-receipts-and-sessions'], 'type': 'string', 'description': 'A skill name from list_skills.'}}, 'additionalProperties': False}
resolve_token_page
Resolve a ticker to its token page
Resolve a ticker to its token page The token page's own lookup (it backs `{symbol}.crown.info` and `chaindaddy.io/{symbol}`): the one registration that page shows for a ticker, with its profile metadata, market data, DEX pair and on-chain trust row (LP lock or burn, authorities). Narrow it with `chain` (a chain key such as `base`, a chain name, or a CAIP-2 id) and `idx`. When nothing is registered it may still return an unregistered token for the ticker (`crown.status: unclaimed`). A 200 with no `crown` object at all means there is no token page for the ticker. `canonicalPath` is the URL path (`/{chain}`) the page should live at. `totalCrowns` / `chainCrowns` count the ticker's registrations overall and on the chain. Cached up to 30 minutes; `cached: true` marks a cached answer. Needs an API key unless called from the Chain Daddy website.
只读 幂等
输入模式
{'type': 'object', 'required': ['symbol'], 'properties': {'idx': {'type': 'integer', 'minimum': 1, 'description': "1-based position among the ticker's registrations (within `chain` when given), to pick one peer."}, 'chain': {'type': 'string', 'description': 'Chain key (`base`), chain name, or CAIP-2 id (`eip155:8453`).'}, 'symbol': {'type': 'string', 'examples': ['PEPE'], 'description': 'Token ticker, case-insensitive (e.g. `PEPE`).'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'crown': {'type': ['object', 'null'], 'properties': {'name': {'type': ['string', 'null']}, 'owner': {'type': ['string', 'null']}, 'price': {'type': ['number', 'null']}, 'trust': {'type': ['object', 'null'], 'description': 'On-chain trust row (LP lock/burn, mint and freeze authorities, team lock).'}, 'dexUrl': {'type': ['string', 'null']}, 'status': {'type': ['string', 'null'], 'description': '`claimed`, `grace_period`, `unclaimed`, …'}, 'dexName': {'type': ['string', 'null']}, 'holders': {'type': ['integer', 'null']}, 'logoUrl': {'type': ['string', 'null']}, 'tokenId': {'type': ['integer', 'null']}, 'chainKey': {'type': ['string', 'null']}, 'lpStatus': {'type': ['object', 'null'], 'description': 'Older LP-only view of `trust`. Present when the LP is locked or burned.'}, 'metadata': {'type': ['object', 'null'], 'properties': {'name': {'type': ['string', 'null']}, 'tags': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'github': {'type': ['string', 'null']}, 'medium': {'type': ['string', 'null']}, 'reddit': {'type': ['string', 'null']}, 'tiktok': {'type': ['string', 'null']}, 'discord': {'type': ['string', 'null']}, 'ensName': {'type': ['string', 'null']}, 'logoUrl': {'type': ['string', 'null']}, 'website': {'type': ['string', 'null']}, 'xdotcom': {'type': ['string', 'null'], 'description': 'X (Twitter) handle or URL.'}, 'youtube': {'type': ['string', 'null']}, 'facebook': {'type': ['string', 'null']}, 'linkedin': {'type': ['string', 'null']}, 'telegram': {'type': ['string', 'null']}, 'bannerUrl': {'type': ['string', 'null']}, 'instagram': {'type': ['string', 'null']}, 'extensions': {'type': ['object', 'null'], 'description': 'Page layout and theme settings.'}, 'whitepaper': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'contactEmail': {'type': ['string', 'null']}, 'shortDescription': {'type': ['string', 'null']}, 'circulatingSupply': {'type': ['number', 'null']}, 'ownershipRenounced': {'type': ['boolean', 'null']}, 'mintAuthorityRenounced': {'type': ['boolean', 'null']}}, 'description': "A token page's profile as its owner set it. Every field is optional."}, 'shareUrl': {'type': ['string', 'null']}, 'bannerUrl': {'type': ['string', 'null']}, 'chainName': {'type': ['string', 'null']}, 'liquidity': {'type': ['number', 'null']}, 'marketCap': {'type': ['number', 'null']}, 'volume24h': {'type': ['number', 'null']}, 'description': {'type': ['string', 'null']}, 'pairAddress': {'type': ['string', 'null']}, 'tokenAddress': {'type': ['string', 'null']}, 'mintTimestamp': {'type': ['integer', 'null']}, 'heartbeatScore': {'type': ['integer', 'null'], 'description': '0-100. 0 is fully decayed (at risk), not "unknown".'}, 'priceChange24h': {'type': ['number', 'null']}}}, 'cached': {'type': ['boolean', 'null']}, 'symbol': {'type': ['string', 'null']}, 'success': {'type': ['boolean', 'null']}, 'resolvedAt': {'type': ['string', 'null']}, 'chainCrowns': {'type': ['integer', 'null']}, 'totalCrowns': {'type': ['integer', 'null']}, 'defaultChain': {'type': ['string', 'null']}, 'canonicalPath': {'type': ['string', 'null'], 'description': '`/{chainKey}` of the resolved page.'}, 'prominenceShift': {'type': ['object', 'null'], 'properties': {'newChain': {'type': ['string', 'null']}, 'newOwner': {'type': ['string', 'null']}, 'newScore': {'type': ['integer', 'null']}, 'expiresAt': {'type': ['string', 'null']}, 'shiftedAt': {'type': ['string', 'null']}, 'newAddress': {'type': ['string', 'null']}, 'displacedUrl': {'type': ['string', 'null']}, 'previousChain': {'type': ['string', 'null']}, 'previousOwner': {'type': ['string', 'null']}, 'previousScore': {'type': ['integer', 'null']}, 'previousAddress': {'type': ['string', 'null']}}, 'description': "Present while the ticker's most prominent page recently moved to another chain."}}}
search_docs
Search the docs
Search Chain Daddy's documentation (docs.chaindaddy.io): guides for launching and running a token, token pages, alerts, creator stores, Crown Apps, and the developer API, CLI and SDKs. Returns the best-matching pages with a one-line summary each. Read a page in full with read_doc, passing its path. Use this before answering how-to questions about Chain Daddy rather than relying on memory: features and prices change.
只读 幂等
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 1, 'description': 'How many pages to return (1-20, default 5).'}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'What to look for, in plain words (e.g. "store keys", "launch fees").'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'query': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'The page on docs.chaindaddy.io.'}, 'path': {'type': 'string', 'description': 'Pass to read_doc.'}, 'title': {'type': 'string'}, 'description': {'type': 'string'}}}}}}
search_tokens
Search tokens
Search tokens across all chains Find tokens by ticker, name or contract address on every supported chain, ranked by relevance, with live market data. A result whose `type` is `crown` has a registration: its creator proved control of it on Chain Daddy, and `crown.owner` is the wallet holding it. A ticker is not unique: one symbol usually matches several unrelated tokens on different chains, so tell them apart by `chainKey` and `token.address`, never by symbol alone, and read a `token.copycat` block as a warning that the token imitates a better-known one. Leave `q` out to browse the newest tokens, on one chain with `chain`.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', 'properties': {'q': {'type': 'string', 'examples': ['PEPE'], 'maxLength': 64, 'description': 'A ticker (PEPE), a token name, or a contract address (an EVM 0x address or a Solana mint). Up to 64 characters.'}, 'page': {'type': 'integer', 'default': 1, 'minimum': 1, 'description': 'Page number, from 1.'}, 'sort': {'enum': ['relevance', 'market_cap', 'volume', 'liquidity', 'holders', 'price', 'pricechange24h', 'createdat', 'heartbeatscore', 'name'], 'type': 'string', 'description': 'Sort key. Defaults to `relevance` with a query and `createdat` (newest first) when browsing.'}, 'chain': {'enum': ['eth', 'base', 'arbitrum', 'polygon', 'bnb', 'avax', 'robinhood', 'solana'], 'type': 'string', 'description': 'Only results on this chain.'}, 'exact': {'type': 'boolean', 'default': False, 'description': 'Only exact ticker matches, without fuzzy expansion (PEPE but not PEPE2). Ignored for an address.'}, 'order': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'desc'}, 'pageSize': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Results per page.'}, 'crownsOnly': {'type': 'boolean', 'default': False, 'description': 'Only tokens that have a registration.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'page': {'type': ['integer', 'null']}, 'sort': {'type': ['string', 'null']}, 'query': {'type': ['string', 'null'], 'description': 'The query as searched (a ticker or name upper-cased, an address as given)'}, 'facets': {'type': ['object', 'null'], 'description': 'Counts across the whole result set, by chain (`chains`), status and type'}, 'results': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'type': {'type': ['string', 'null'], 'description': '`crown`: the token has a registration. `token`: a token with no registration.\n`available`: no token with this ticker on this chain.\n'}, 'crown': {'type': ['object', 'null'], 'properties': {'owner': {'type': ['string', 'null'], 'description': 'The wallet holding the registration'}, 'status': {'type': ['string', 'null'], 'description': 'Registration status:\n- `available`: No token exists on this chain\n- `unclaimed`: Token exists but no registration minted\n- `grace_period`: New registration in 30-day grace period\n- `claimed`: Registration exists (owned by someone else)\n- `owned`: Factory-created token (you own it)\n- `inactive`: Registration exists but heartbeat below 60%\n'}, 'tokenId': {'type': ['integer', 'null'], 'description': 'Registration token ID (null if unclaimed)'}, 'mintTimestamp': {'type': ['integer', 'null'], 'description': 'When the registration was written (unix seconds)'}, 'verificationMethod': {'type': ['string', 'null'], 'description': 'Method used to verify ownership'}, 'crownContractAddress': {'type': ['string', 'null'], 'description': 'The registry contract the registration lives in'}}, 'description': "The token's registration"}, 'token': {'type': ['object', 'null'], 'properties': {'fdv': {'type': ['number', 'null'], 'description': 'Fully diluted valuation'}, 'name': {'type': ['string', 'null']}, 'venue': {'type': ['string', 'null'], 'description': 'Where it trades'}, 'buyTax': {'type': ['string', 'null']}, 'symbol': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null'], 'description': 'Token contract address (or Solana mint)'}, 'copycat': {'type': ['object', 'null'], 'properties': {'signals': {'type': ['array', 'null'], 'items': {'type': ['string', 'null']}}, 'imitatesName': {'type': ['string', 'null']}, 'imitatesChain': {'type': ['string', 'null']}, 'imitatesAddress': {'type': ['string', 'null']}}, 'description': 'Present when the token imitates a better-known one'}, 'discord': {'type': ['string', 'null']}, 'holders': {'type': ['integer', 'null']}, 'logoUrl': {'type': ['string', 'null']}, 'sellTax': {'type': ['string', 'null']}, 'twitter': {'type': ['string', 'null']}, 'website': {'type': ['string', 'null']}, 'contract': {'type': ['string', 'null'], 'description': 'The contract or launchpad the token was created with'}, 'decimals': {'type': ['integer', 'null']}, 'operator': {'type': ['string', 'null'], 'description': 'Who created it (a launchpad or deployer platform)'}, 'priceUsd': {'type': ['number', 'null']}, 'telegram': {'type': ['string', 'null']}, 'bannerUrl': {'type': ['string', 'null'], 'description': 'Header/banner image URL'}, 'createdAt': {'type': ['string', 'null']}, 'liquidity': {'type': ['number', 'null']}, 'marketCap': {'type': ['number', 'null']}, 'volume24h': {'type': ['number', 'null']}, 'isHoneypot': {'type': ['boolean', 'null'], 'description': 'Set when a scanner flagged that the token cannot be sold'}, 'description': {'type': ['string', 'null']}, 'priceChange1h': {'type': ['number', 'null'], 'description': '1-hour price change, in percent'}, 'priceChange24h': {'type': ['number', 'null'], 'description': '24-hour price change, in percent'}}}, 'listed': {'type': ['boolean', 'null'], 'description': "Whether the result clears the site's quality bar; listed results come first"}, 'source': {'type': ['string', 'null'], 'description': 'Where the market data came from'}, 'chainId': {'anyOf': [{'type': ['integer', 'null']}, {'type': ['string', 'null']}], 'description': 'The EVM chain ID, or `solana:mainnet`'}, 'chainKey': {'type': ['string', 'null'], 'description': 'Short chain identifier (eth, base, solana, …)'}, 'hasCrown': {'type': ['boolean', 'null']}, 'chainName': {'type': ['string', 'null'], 'description': 'Human-readable chain name'}}}}, 'success': {'type': ['boolean', 'null']}, 'pageSize': {'type': ['integer', 'null']}, 'searchMode': {'type': ['string', 'null'], 'description': 'How the query was read'}, 'totalPages': {'type': ['integer', 'null']}, 'totalResults': {'type': ['integer', 'null']}}}
send_holder_broadcast
Message your token's holders
Send a message to your token's holders Sends a message from the token page `id` to its subscribed holders: in-app always, plus whichever of `push`, `email`, `sms`, `telegram`, `discord` and `xmtp` you list and each holder has turned on. It goes out at once unless you set `scheduledAt`. A sent message cannot be recalled. Only the page's owner or a manager can send; there is nothing to sign. Before sending, call `GET /api/v2/broadcasts/{id}/limits` (how many sends are left) and `GET /api/v2/broadcasts/{id}/delivery` (whether Telegram and Discord also post publicly). With no holder group and no segment, `telegram`/`discord` also post once in the token's public community room and Discord webhook; with either, they are DMs only. Limits: the Free plan sends 1 per rolling 7 days per token; paid plans have no plan limit, but every token is held to a safety ceiling (3 an hour and 10 a day by default, 1 a day in a token's first week), and both answer 429 with `resetsAt`. Up to 50,000 recipients per send, largest holders first. A new token's first send to more than 500 holders is held for review: it answers 200 with `recipientCount: 0` and goes out once released. Common mistakes: `wallet` must be one of your own signed-in wallets (it is recorded as the sender); `channels` must include `inapp`; pass `crownChain` whenever the same token id exists on more than one chain, or the message can reach the wrong token's holders or none. Every link and image is screened: links on a blocklist and images not on IPFS or Arweave answer 422. Needs Sign in with Chain Daddy, allowing changes (scope api:write).
可能执行破坏性操作 可访问外部资源
输入模式
{'type': 'object', 'required': ['body', 'id', 'title', 'type', 'wallet'], 'properties': {'id': {'type': 'integer', 'format': 'int64', 'minimum': 1, 'description': "The token page's id (the registration's numeric token id)"}, 'body': {'type': 'string', 'maxLength': 2000}, 'type': {'enum': ['update', 'alert'], 'type': 'string'}, 'title': {'type': 'string', 'maxLength': 100}, 'wallet': {'type': 'string', 'description': "The sender; must be one of the caller's signed-in wallets"}, 'linkUrl': {'type': 'string', 'description': 'HTTPS'}, 'tierIds': {'type': 'array', 'items': {'type': 'string'}, 'description': "Holder groups to send to (any of them). Omit for every subscribed holder; an empty list is refused. Needs the page owner's paid plan."}, 'channels': {'type': 'array', 'items': {'enum': ['inapp', 'push', 'email', 'xmtp', 'sms', 'telegram', 'discord'], 'type': 'string'}, 'description': 'Must include `inapp`. Defaults to `["inapp"]`.'}, 'imageUrl': {'type': 'string', 'description': 'HTTPS, on IPFS or Arweave'}, 'segments': {'type': 'array', 'items': {'enum': ['all', 'new_7d', 'churned', 'reduced_50', 'whales', 'top_10', 'top_25', 'top_50', 'top_100'], 'type': 'string'}, 'description': 'Narrow to holders in ANY of these segments (within the holder group, if one is set)'}, 'signature': {'type': 'string', 'deprecated': True, 'description': 'Ignored'}, 'timestamp': {'type': 'integer', 'format': 'int64', 'deprecated': True, 'description': 'Ignored'}, 'chainScope': {'type': 'string', 'pattern': '^[a-z0-9-]{1,32}$', 'description': 'Chain key the broadcast is anchored on; omit for off-chain'}, 'crownChain': {'type': 'string', 'pattern': '^[a-z0-9-]{1,32}$', 'description': 'Chain key of the token page. Send it whenever the token id exists on more than one chain.'}, 'sourceType': {'type': 'string', 'default': 'manual'}, 'richContent': {'type': 'object', 'description': 'Rich-text body as the composer produces it'}, 'scheduledAt': {'type': 'string', 'format': 'date-time', 'description': 'Send later instead of now; at least 5 minutes ahead'}, 'accessTierId': {'type': ['string', 'null'], 'description': "Make the message holders-only for this holder group on the token page's feed. Needs the page owner's paid plan."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'success': {'type': ['boolean', 'null']}, 'scheduled': {'type': ['boolean', 'null']}, 'broadcastId': {'type': ['string', 'null']}, 'recipientCount': {'type': ['integer', 'null'], 'description': 'Holders queued now. 0 when scheduled, or when the send is held for review.'}}}
validate_app_manifest
Validate an app manifest
Validate an app manifest Checks a `capp.json` manifest against the manifest schema and the platform's rules and returns every problem by field, without submitting anything. An invalid manifest still answers 200 with `is_valid: false`: read the body, not the status. Errors block a submission; warnings do not. Needs Sign in with Chain Daddy (scope api:read).
只读 幂等
输入模式
{'type': 'object', 'required': ['manifest'], 'properties': {'manifest': {'type': 'object', 'description': 'The manifest object (the contents of `capp.json`)', 'additionalProperties': True}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'errors': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'field': {'type': ['string', 'null']}, 'message': {'type': ['string', 'null']}, 'severity': {'type': ['string', 'null']}}}}, 'is_valid': {'type': ['boolean', 'null']}}}
verify_receipt
Verify a store receipt
Verify a receipt online Checks a creator store receipt's signature and returns what it records (the item, quantity, wallet, amount paid, when) with its current status. A refunded order's receipt reads `revoked`: offline verification proves a receipt was issued, this proves it still stands. Pass the receipt exactly as issued (a compact JWS, three base64url parts joined by dots).
只读 幂等
输入模式
{'type': 'object', 'required': ['receipt'], 'properties': {'receipt': {'type': 'string', 'description': 'The receipt JWS'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'status': {'type': ['string', 'null'], 'description': '`revoked` once the order is refunded'}, 'payload': {'type': ['object', 'null'], 'properties': {'iat': {'type': ['integer', 'null']}, 'iss': {'type': ['string', 'null']}, 'sku': {'type': ['string', 'null']}, 'typ': {'type': ['string', 'null']}, 'amount': {'type': ['string', 'null']}, 'wallet': {'type': ['string', 'null']}, 'chainId': {'type': ['string', 'null']}, 'crownId': {'type': ['integer', 'null']}, 'orderId': {'type': ['string', 'null']}, 'payment': {'type': ['object', 'null'], 'properties': {'payer': {'type': ['string', 'null']}, 'txHash': {'type': ['string', 'null']}, 'logIndex': {'type': ['integer', 'null']}, 'blockNumber': {'type': ['integer', 'null']}}}, 'skuType': {'type': ['string', 'null']}, 'storeId': {'type': ['string', 'null']}, 'currency': {'type': ['object', 'null'], 'properties': {'symbol': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null']}, 'decimals': {'type': ['integer', 'null']}}, 'description': "What the buyer actually paid in (the store token, the chain's coin or the dollar stable)"}, 'quantity': {'type': ['integer', 'null']}, 'expiresAt': {'type': ['string', 'null']}, 'feeAmount': {'type': ['string', 'null']}, 'receiptId': {'type': ['string', 'null']}, 'confirmedAt': {'type': ['string', 'null']}, 'purchasedAt': {'type': ['string', 'null']}, 'usdPerToken': {'type': ['string', 'null'], 'description': 'Present only on a dollar-priced order, the USD price of one whole unit of `currency` the quote used'}, 'priceUsdMicros': {'type': ['integer', 'null'], 'description': 'Present only on a dollar-priced order, per unit'}, 'appAccountToken': {'type': ['string', 'null']}}, 'description': "The receipt's decoded claims"}}}
已添加
verify_receipt
2026年10月4日 02:40
已添加
validate_app_manifest
2026年10月4日 02:40
已添加
send_holder_broadcast
2026年10月4日 02:40
已添加
search_tokens
2026年10月4日 02:40
已添加
search_docs
2026年10月4日 02:40
已添加
resolve_token_page
2026年10月4日 02:40
已添加
read_skill
2026年10月4日 02:40
已添加
read_doc
2026年10月4日 02:40
已添加
list_wallet_registrations
2026年10月4日 02:40
已添加
list_supported_chains
2026年10月4日 02:40
已添加
list_skills
2026年10月4日 02:40
已添加
list_registrations
2026年10月4日 02:40
已添加
list_oauth_clients
2026年10月4日 02:40
已添加
list_my_deals
2026年10月4日 02:40
已添加
list_launch_venues
2026年10月4日 02:40
已添加
list_holder_broadcast_history
2026年10月4日 02:40
已添加
list_developer_apps
2026年10月4日 02:40
已添加
list_community_members
2026年10月4日 02:40
已添加
list_alert_rules
2026年10月4日 02:40
已添加
list_active_alerts
2026年10月4日 02:40
已添加
get_token_metrics_summary
2026年10月4日 02:40
已添加
get_token_holder_snapshot
2026年10月4日 02:40
已添加
get_token
2026年10月4日 02:40
已添加
get_store_config
2026年10月4日 02:40
已添加
get_store
2026年10月4日 02:40
已添加
get_registration
2026年10月4日 02:40
已添加
get_holder_segments
2026年10月4日 02:40
已添加
get_fees
2026年10月4日 02:40
已添加
get_developer_program_status
2026年10月4日 02:40
已添加
get_developer_app
2026年10月4日 02:40