Chain Daddy MCP
An official MCP server provided by Chain Daddy that allows AI agents to interact with the Chain Daddy platform. It enables searching for tokens, checking registrations, launching tokens, managing creator stores, and verifying payments without requiring API keys for public reads.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://api.chaindaddy.io/mcpWhat its tools do
45 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (40)
call_read_operationcheck_heartbeatfind_api_operationsfind_storeget_creator_recordget_dealget_developer_appget_developer_program_statusget_feesget_holder_segmentsget_my_accountget_registrationget_storeget_store_configget_tokenget_token_holder_snapshotget_token_metrics_summarylist_active_alertslist_alert_ruleslist_community_memberslist_developer_appslist_holder_broadcast_historylist_launch_venueslist_my_dealslist_oauth_clientslist_registrationslist_skillslist_supported_chainslist_wallet_registrationsprepare_token_launchprepare_token_registrationread_docread_skillresolve_token_pagesearch_docssearch_tokensshop_list_productsshop_quotevalidate_app_manifestverify_receipt
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to chaindaddy.io ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for tokens and check their registrations
- Launch a new token or verify an existing one
- Run a creator store and manage orders
- Verify payments and receipts on a server
Source and maintenance
Protocol and capabilities
- Server
- chaindaddy 0.1.0-93d0fb7d
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 45 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 9 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
45 advertised
call_read_operation — Run a read operation
Runs one read-only operation of the Chain Daddy REST API, documented at https://docs.chaindaddy.io/api-reference/explorer (OpenAPI: https://docs.chaindaddy.io/openapi.yaml), by its tool name and arguments, and returns the API's JSON answer. An operation marked as needing sign-in requires Sign in with Chain Daddy and reads only the signed-in user's own data.
{
"type": "object",
"required": [
"tool"
],
"properties": {
"tool": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{0,63}$",
"description": "The read-only operation's tool name, as the operation search lists it."
},
"arguments": {
"type": "object",
"description": "The operation's arguments, matching its input schema. Omit or {} when it takes none.",
"additionalProperties": true
}
},
"additionalProperties": false
}{
"title": "Run a read operation",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}call_write_operation — Run a change
Makes one change through the Chain Daddy REST API, documented at https://docs.chaindaddy.io/api-reference/explorer (OpenAPI: https://docs.chaindaddy.io/openapi.yaml), by the operation's tool name and arguments: for example editing a token page, an alert rule or a holder group, or sending holders a message. Acts as the signed-in user and needs Sign in with Chain Daddy allowing changes (scope api:write). Some changes notify people or cannot be undone. It does not pay, mint, launch, claim or trade. 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 changing operation's tool name, as the operation search lists it."
},
"arguments": {
"type": "object",
"description": "The operation's arguments, matching its input schema. Omit or {} when it takes none.",
"additionalProperties": true
}
},
"additionalProperties": false
}{
"title": "Run a change",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}check_heartbeat — Check a token's heartbeat
Get heartbeat score for a registration A registered token's health on one chain: the heartbeat score (0-100) the oracle published for it in the latest daily epoch, the status derived from it, the three parts it is built from (age, DEX volume, holder health) and how many epochs in a row it has been under 60. A registration whose heartbeat stays under 60 for 30 epochs can lapse and become claimable again, so the score tells a live token page from a dormant one. Answers 404 for a symbol that has no registration on that chain, and for a registration past its 30-day grace period that no epoch has scored yet. `outlook` reads that published leaf forward: the first daily count projected under 60, the day the name can be registered by anyone who proves the same contract, and the least trading (or the fewest more holders) that holds 60. The coin's health notices say the same.
{
"type": "object",
"required": [
"chain",
"symbol"
],
"properties": {
"chain": {
"type": "string",
"examples": [
"arbitrum"
],
"description": "Chain key (e.g. `arbitrum`, `base`, `solana`). A Solana registration is answered from its committed leaf alone (`chainId` 0)."
},
"symbol": {
"type": "string",
"examples": [
"PEPE"
],
"description": "Token symbol"
},
"tokenAddress": {
"type": "string",
"description": "The token's contract address, when several tokens on the chain share the ticker."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"epoch": {
"type": [
"integer",
"null"
],
"description": "The daily epoch whose leaf this is. Absent for a new registration no epoch has scored yet."
},
"score": {
"type": [
"number",
"null"
],
"description": "Composite heartbeat score (0-100), the weighted sum of timestamp + volume + holder-health rounded to a whole number, as published in the epoch's leaf."
},
"status": {
"type": [
"string",
"null"
],
"description": "Heartbeat status derived from the score: `grace_period`, `healthy`, `moderate`, `at_risk` or `inactive`"
},
"symbol": {
"type": [
"string",
"null"
]
},
"chainId": {
"type": [
"integer",
"null"
]
},
"outlook": {
"type": [
"object",
"null"
],
"properties": {
"parts": {
"type": [
"object",
"null"
],
"properties": {
"age": {
"type": [
"integer",
"null"
],
"description": "The age part (0-100, weight 50%); steps down at 30, 90, 180, 365 and 730 days."
},
"holders": {
"type": [
"integer",
"null"
],
"description": "The holder part (0-100, weight 20%)."
},
"trading": {
"type": [
"integer",
"null"
],
"description": "The trading part (0-100, weight 30%)."
}
}
},
"score": {
"type": [
"integer",
"null"
]
},
"takes": {
"type": [
"object",
"null"
],
"properties": {
"moreHolders": {
"type": [
"integer",
"null"
],
"description": "The fewest more holders that do it by count alone, everything else as it is; null when they cannot within 1,000."
},
"dailyVolumeUSD": {
"type": [
"integer",
"null"
],
"description": "The least trading, in whole US dollars a day, that does it from the next count; null when trading alone cannot (out of reach, or capped by the pool's liquidity at 100 times it)."
}
},
"description": "What keeps the score at 60 or over, while the countdown runs or one is projected (against the parts projected for the crossing). Both null when 60 is not in question."
},
"status": {
"type": [
"string",
"null"
],
"description": "`healthy` 80+, `moderate` 65-79, `at_risk` 60-64, `inactive` under 60 (the 30-day countdown runs), `grace` while the leaf carries the 30-day grace score."
},
"atRiskDays": {
"type": [
"integer",
"null"
],
"description": "Consecutive daily counts under 60 (30 make the name reclaimable)."
},
"reclaimableFrom": {
"type": [
"string",
"null"
],
"description": "When anyone who proves the same contract can register the name if the score stays under 60 through the countdown (the day after its 30th count); counted from the projected crossing for a coin not yet under 60. Null when neither applies."
},
"projectedInactiveAt": {
"type": [
"string",
"null"
],
"description": "The first daily count projected under 60 if trading and holders stay as they are (an age step, or the end of the grace period); null when none is, or the score already is."
}
},
"description": "The latest committed leaf read forward; null while the registration has no leaf. Dates are\ndaily counts (00:00 UTC, 4 PM PT in winter): a leaf is scored at its epoch's start.\n"
},
"atRiskDays": {
"type": [
"integer",
"null"
],
"description": "Consecutive epochs the score has been under 60. At 30 the name can be registered again."
},
"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"
],
"description": "When the epoch was scored (its start, 00:00 UTC). For a new registration no epoch has scored yet, when it was registered."
}
}
}{
"title": "Check a token's heartbeat",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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 and is delivered on the wallet's notification channels; it does not fire again for `cooldownMinutes` (default 60). `alertType` picks the metric, and `thresholdOperator` + `thresholdValue` the condition: `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. The token is named by `chainId` + `tokenAddress`; a ticker is not accepted. A type above the caller's plan is 403, naming the plan, with `upgrade_url`; a token-page type on a token with no page is 400 `crown_required`. Each call creates a new rule, so the same request twice makes two rules. 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
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Optional. A key chosen for this one change, such as a UUID. Sent again with the same key and the same arguments within 24 hours, it returns the earlier answer instead of making the change again."
},
"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"
]
}
}
}{
"title": "Create an alert rule",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}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` is for a server that can keep a secret: the response carries `clientSecret` (`cd_oauth_` + 64 hex) once, and it is not shown again and cannot be rotated here. `false` suits 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 the caller holds or manages. 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
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Optional. A key chosen for this one change, such as a UUID. Sent again with the same key and the same arguments within 24 hours, it returns the earlier answer instead of making the change again."
}
},
"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"
}
}
}{
"title": "Register a Sign in with Chain Daddy client",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}find_api_operations — Find API operations
Searches the operations of the Chain Daddy REST API, documented at https://docs.chaindaddy.io/api-reference/explorer (OpenAPI: https://docs.chaindaddy.io/openapi.yaml) that 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 (`callWith`), whether it needs sign-in, and its input schema. No operation 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 to do or read (e.g. \"holder segments\", \"alert rules\", \"my deals\")."
}
},
"additionalProperties": false
}{
"title": "Find API operations",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": 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. It looks 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. A ticker can name several coins; this answers the store of the coin chaindaddy.io/{symbol} shows when that coin has one, else the newest live store with the ticker. To name one coin, pass chainKey and crownId instead."
},
"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."
},
"operator": {
"type": "string",
"description": "An operator store's slug, e.g. chaindaddy: a store the operator owns rather than a coin (its shop). With chainKey, it answers only on that chain. Available where operator stores are switched on."
}
},
"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"
},
"kind": {
"type": [
"string",
"null"
],
"description": "Physical items are sold only by Chain Daddy's own store for now. A physical item is a good its seller ships. It is bought only through a checkout session the seller's own site opens, and a coin's physical items are not listed in the public catalog."
},
"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 not sold and is held while its `rule` holds.\n"
},
"appId": {
"type": [
"string",
"null"
],
"description": "On an item an installed app sells on the page: the app's id. Such an item is locked: the page's managers\nand store keys cannot change, grant or archive it (409 `APP_ITEM_LOCKED`). Its `sku` starts with\n`app.`, a prefix no other item may use.\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"
},
"appBps": {
"type": [
"integer",
"null"
],
"description": "On an app's item, the developer's share of each sale after the fee, in basis points, as the page's owner accepted it"
},
"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. Only the store owner's session may change them (403 SPLITS_OWNER_ONLY otherwise); sending them back unchanged is allowed."
},
"status": {
"type": [
"string",
"null"
]
},
"appRole": {
"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"
]
},
"appItemKey": {
"type": [
"string",
"null"
],
"description": "On an app's item, the app's own key for it"
},
"saleEndsAt": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"maxAppSpend": {
"type": [
"integer",
"null"
],
"description": "Consumables only. Lets apps on the token page spend this item for the wallet that holds it (the `iap-consume` app action), at most this many in one request. `null`, the default: no app can spend it, only a store key."
},
"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"
},
"appTermsVersion": {
"type": [
"integer",
"null"
],
"description": "On an app's item, the version of its terms the page's owner accepted"
},
"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"
]
},
"acceptedCurrencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"description": "Every currency the buyer may pay this dollar-priced item in, `currency` among them. Absent when the\nitem takes only `currency`. Which of them an order would be taken in right now is the item's\ncurrencies read (`getIapSkuCurrencies`)\n"
}
}
},
"description": "Active SKUs only"
},
"store": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": [
"string",
"null"
]
},
"kind": {
"type": [
"string",
"null"
],
"description": "\"operator\" on an operator store (a store the operator owns rather than a coin); absent on a coin's store"
},
"live": {
"type": [
"boolean",
"null"
],
"description": "False when the wallet that opened the store no longer has a paid plan. The store then takes no new orders\nfor its own items; items from apps installed on the page keep selling.\n"
},
"mode": {
"type": [
"string",
"null"
],
"description": "`test` for a test store: its orders are paid by the test-pay call instead of a wallet, nothing is sent\non chain and no fee is taken. Unrelated to `live` above.\n"
},
"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"
]
},
"sellerName": {
"type": [
"string",
"null"
],
"description": "Who an operator store's checkout says sells it"
},
"sellerType": {
"type": [
"string",
"null"
],
"description": "How the store's owner declares it sells; absent when it has not said"
},
"tokenOrigin": {
"type": [
"string",
"null"
]
},
"operatorSlug": {
"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"
]
},
"returnsPolicyUrl": {
"type": [
"string",
"null"
]
},
"shippingPolicyUrl": {
"type": [
"string",
"null"
]
}
}
}
}
}{
"title": "Find a token's store",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_creator_record — Get a coin's creator record
Get a verified coin's creator record The creator record of a verified coin: how many coins its creator launched before, how many are still trading and how many died within a week, when they first launched, how old the wallet is and who funded it, plus what the creator has done with this coin since (events) and "Bundled at open". Read from chains and kept by Chain Daddy; the answer can lag the chain by up to a day. `state` is `pending` until the record is first computed, and `offPlatformPending` stays `true` while launches on other platforms are still being read. Answers 404 for a ticker with no verified page on that chain, for a page Chain Daddy removed, and everywhere while the creator record is off. Keyless, the same for every caller, and cached for about a minute. The token address may stand where the ticker goes: a verified coin's address answers the same record as its ticker. Any coin: the address of a coin nobody registered with Chain Daddy answers its creator record too. The answer then also names the creator (`creator`) and where the chain names them (`creatorSource`). It is `pending` until the creator and their launches have been read (seconds to minutes; cached for seconds, so it can be asked again), and `unknown` when the chain does not name a creator Chain Daddy can read. Reading a new coin's creator starts only for a request from a web browser; any other caller gets what is already known, or `pending`.
{
"type": "object",
"required": [
"chain",
"symbol"
],
"properties": {
"chain": {
"type": "string",
"examples": [
"base"
],
"description": "Chain key, lowercase, as in the page's own address (e.g. `base`, `solana`). A numeric chain ID answers 404."
},
"symbol": {
"type": "string",
"examples": [
"FLUXGP"
],
"description": "The coin's ticker (letters and digits, any case), or the token address of a coin nobody registered"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"state": {
"type": [
"string",
"null"
],
"description": "`pending` (not read yet), `first_launch` (no earlier launch found), `on_record` (earlier\nlaunches found), `serial` (many launches, most dead within a week), `blocked` (refused new\nlaunches here) or, for a coin read by its address, `unknown` (the chain names no creator\nChain Daddy can read).\n"
},
"backed": {
"type": [
"object",
"null"
],
"properties": {
"state": {
"type": [
"string",
"null"
]
},
"heldPct": {
"type": [
"number",
"null"
],
"description": "The wallets' own balance as a share of what they committed, as last read"
},
"cliffEnd": {
"type": [
"integer",
"null"
],
"description": "Nothing is paid before this (unix seconds)"
},
"committed": {
"type": [
"boolean",
"null"
],
"description": "The wallets' holding is on record in the vault"
},
"forfeited": {
"type": [
"boolean",
"null"
],
"description": "The hold broke and the creator's fees go to holders for good"
},
"holdUntil": {
"type": [
"integer",
"null"
],
"description": "The obligation ends here (unix seconds); absent means no end"
},
"minHoldPct": {
"type": [
"number",
"null"
],
"description": "Share of the committed holding the wallets must keep"
},
"committedCoins": {
"type": [
"number",
"null"
]
},
"committedPctSupply": {
"type": [
"number",
"null"
]
}
},
"description": "The coin's own Backed vault, as its Terms card states it: the creator's fee share is held and paid\nout only while their wallets keep what they committed. Absent when the launch has no vault.\n"
},
"events": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"at": {
"type": [
"string",
"null"
]
},
"kind": {
"type": [
"string",
"null"
],
"description": "`sell` (into the coin's pool), `moved_out` (to any other wallet), `creator_exited` (holds 10% or\nless of what they launched with). Counts only the creator's own wallets.\n"
},
"pctOfHoldings": {
"type": [
"number",
"null"
]
}
}
},
"description": "What the creator did with this coin, newest first"
},
"labels": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": [
"string",
"null"
],
"description": "`new_identity`, `flagged`, `creator_sold`, `creator_exited`, `exempt_wallets`, `funded_together`, `same_name_launches`, …"
},
"category": {
"type": [
"string",
"null"
],
"description": "On `flagged` only, the category Chain Daddy set after reviewing reports."
},
"definition": {
"type": [
"string",
"null"
],
"description": "The label's one line, built from this coin's facts"
}
}
}
},
"creator": {
"type": [
"string",
"null"
],
"description": "The creator's wallet, on a coin read by its address (absent on a registered coin)"
},
"ruleHit": {
"type": [
"string",
"null"
],
"description": "On a `blocked` record, the category of rule that blocked the creator; `definitions.rule` is the one line shown with it"
},
"evidence": {
"type": [
"object",
"null"
],
"properties": {
"sharedWith": {
"type": [
"object",
"null"
],
"properties": {
"image": {
"type": [
"integer",
"null"
],
"description": "The same image, by perceptual hash"
},
"template": {
"type": [
"integer",
"null"
],
"description": "The same website template"
},
"analyticsId": {
"type": [
"integer",
"null"
],
"description": "The same analytics or pixel id on their sites"
},
"certificate": {
"type": [
"integer",
"null"
],
"description": "The same TLS certificate on their sites"
},
"pinningAccount": {
"type": [
"integer",
"null"
],
"description": "The same pinning or gateway account behind their metadata"
}
},
"description": "How many other coins have the same thing as this coin; a thing no other coin shares is absent"
},
"namedOnCoins": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"kind": {
"type": [
"string",
"null"
],
"description": "As in identityLinks"
},
"name": {
"type": [
"string",
"null"
],
"description": "As in identityLinks"
},
"coins": {
"type": [
"integer",
"null"
],
"description": "How many coins name it, this one included"
}
}
},
"description": "The sites and accounts in identityLinks that other coins' metadata also names, as read in the last 7 days"
},
"identityLinks": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"kind": {
"type": [
"string",
"null"
],
"description": "`site`, or the account's platform (`x`, `telegram`, `discord`, …)"
},
"name": {
"type": [
"string",
"null"
],
"description": "The site's host, or the account (`@name` on X and Telegram)"
},
"ageDays": {
"type": [
"integer",
"null"
],
"description": "How old the account, channel or site is, in days, where known"
},
"linksBack": {
"type": [
"boolean",
"null"
],
"description": "Points back at the coin or its creator (`true`), was read and does not (`false`), or not read yet (`null`)"
}
}
},
"description": "The sites and accounts the coin's metadata names"
},
"classifierLabels": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"kind": {
"type": [
"string",
"null"
],
"description": "What the label says"
},
"version": {
"type": [
"string",
"null"
],
"description": "The pinned classifier version that answered"
},
"questionId": {
"type": [
"string",
"null"
],
"description": "The typed question it answers"
},
"probability": {
"type": [
"number",
"null"
],
"description": "How sure the classifier is, from 0 to 1"
}
}
},
"description": "Labels from a pinned classifier, each answering one typed question"
}
},
"description": "What the coin's own metadata names and whether it points back, what the coin shares with other\ncoins, and labels from a pinned classifier. Each line's definition is in `definitions`\n(`links_back`, `named_on_coins`, `shared_with_coins`, `shared_template`, `shared_analytics_id`,\n`shared_certificate`, `age_days`). Absent until there is something to show;\neach part is absent when empty. Not part of the block rule.\n"
},
"holdings": {
"type": [
"object",
"null"
],
"properties": {
"asOf": {
"type": [
"string",
"null"
]
},
"team": {
"type": [
"object",
"null"
],
"properties": {
"pctSupply": {
"type": [
"number",
"null"
]
}
},
"description": "Wallets the creator named (team, fee, fee sharers), shown apart"
},
"pctSupply": {
"type": [
"number",
"null"
],
"description": "Percent of supply the creator's own wallets hold"
},
"launchPctSupply": {
"type": [
"number",
"null"
],
"description": "Percent of supply they held at the watch's first reading of the coin"
}
},
"description": "What the creator holds of this coin. Absent until the coin is watched (it traded in the last 7 days)."
},
"identity": {
"type": [
"object",
"null"
],
"properties": {
"x": {
"type": [
"object",
"null"
],
"properties": {
"since": {
"type": [
"string",
"null"
],
"description": "YYYY-MM"
},
"handle": {
"type": [
"string",
"null"
]
}
},
"description": "The creator's verified X account and the month it was created"
},
"coinbaseVerified": {
"type": [
"boolean",
"null"
],
"description": "The creator's wallet holds Coinbase's \"Verified Account\" attestation on Base, as last\nchecked by the creator. Absent when not.\n"
}
},
"description": "What the creator proved about who they are. Absent when nothing is proved."
},
"openBlock": {
"type": [
"object",
"null"
],
"properties": {
"asOf": {
"type": [
"string",
"null"
],
"description": "When the figure was computed"
},
"buyers": {
"type": [
"integer",
"null"
],
"description": "Wallets that bought in the opening blocks"
},
"bundledPct": {
"type": [
"number",
"null"
],
"description": "Percent of supply bought in the opening blocks by bundled wallets (3 or more buying in one block, or 2 or more in one block with the same funder)"
},
"linkedPending": {
"type": [
"boolean",
"null"
],
"description": "Links between the buyers and the creator are still being read"
},
"linkedWallets": {
"type": [
"integer",
"null"
],
"description": "How many opening buyers are linked to the creator"
},
"bundledWallets": {
"type": [
"integer",
"null"
],
"description": "How many wallets bought in those blocks"
},
"creatorLinkedPct": {
"type": [
"number",
"null"
],
"description": "Percent of supply bought in the opening blocks by wallets linked to the creator (wallets the creator controls, or funded by the creator or the creator's funder)"
}
},
"description": "\"Bundled at open\": who bought in the coin's opening blocks (EVM: the launch block and the next 3; Solana: the first 30 slots). Absent when the opening blocks were not seen."
},
"promoters": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"handle": {
"type": [
"string",
"null"
],
"description": "Shown only when the promoter verified it"
},
"wallet": {
"type": [
"string",
"null"
]
},
"sharePct": {
"type": [
"number",
"null"
],
"description": "The share of the creator's fees this coin pays them, in percent"
},
"ownLaunches": {
"type": [
"integer",
"null"
],
"description": "Coins the promoter launched themselves, when any"
},
"paidLaunches": {
"type": [
"integer",
"null"
],
"description": "Launches here that paid them a share"
},
"stillTrading": {
"type": [
"integer",
"null"
],
"description": "Of those, how many still trade"
},
"ownStillTrading": {
"type": [
"integer",
"null"
]
},
"stoppedWithin7d": {
"type": [
"integer",
"null"
],
"description": "Of those, how many stopped trading within 7 days of launch"
}
}
},
"description": "Wallets this coin pays a share of its creator fees to (paid promotion), each with its record\nfrom launches here. Omitted when the coin pays none. Not part of the block rule.\n"
},
"computedAt": {
"type": [
"string",
"null"
],
"description": "When the record was last computed; absent while `pending`"
},
"definitions": {
"type": [
"object",
"null"
],
"description": "The definition of each word the record uses, by key",
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"funderLabel": {
"type": [
"string",
"null"
],
"description": "Who first funded the creator's wallet, when the funder is a known operator (e.g. an exchange)"
},
"supportEmail": {
"type": [
"string",
"null"
],
"description": "On a `blocked` record, where the creator contests the block"
},
"creatorSource": {
"type": [
"string",
"null"
],
"description": "Where the chain names the creator, on a coin read by its address: `launchpad_record` (the\nlaunch program's own record of its creator), `fee_share` (the coin's creator-fee config),\n`launch_pool` (the pool the coin launched in), `mint_authority` (the mint's authority),\n`creation_tx` (sent the creation transaction), `factory_call` (called the contract that\ncreated it) or `payout_recipient` (the coin's payout recipient).\n"
},
"exemptWallets": {
"type": [
"integer",
"null"
],
"description": "How many wallets this coin's launch transaction exempted from the venue's opening-trade tax,\nread from the launch's own input. Absent when the venue has no such list;\n0 when the list was empty. Those wallets are shown, not counted as the creator's.\n"
},
"firstLaunchAt": {
"type": [
"string",
"null"
]
},
"launchesAlive": {
"type": [
"integer",
"null"
],
"description": "Of those, how many still trade (a trade in the last 7 days)"
},
"launchesTotal": {
"type": [
"integer",
"null"
],
"description": "Coins this creator launched, here and on other platforms"
},
"walletAgeDays": {
"type": [
"integer",
"null"
]
},
"fundedTogether": {
"type": [
"object",
"null"
],
"properties": {
"at": {
"type": [
"string",
"null"
]
},
"tx": {
"type": [
"string",
"null"
],
"description": "The transaction's hash"
},
"funder": {
"type": [
"string",
"null"
],
"description": "The wallet that signed it (not the contract it called)"
},
"otherWallets": {
"type": [
"integer",
"null"
],
"description": "How many wallets it paid besides the creator and the funder"
},
"upstreamFunder": {
"type": [
"string",
"null"
],
"description": "The wallet that last paid the funder before it signed"
},
"minutesBeforeLaunch": {
"type": [
"integer",
"null"
],
"description": "How long before the launch it was mined, in whole minutes"
},
"paidExemptOrFirstBuyers": {
"type": [
"boolean",
"null"
],
"description": "It also paid wallets among this coin's exempt wallets or first buyers"
}
},
"description": "The transaction that paid the creator's wallet together with many other wallets before this launch\n(an airdrop batch, for one). Absent when there was none, or when the wallet that signed it is a\nservice (an exchange, a bridge, a bot) or one of Chain Daddy's own.\n"
},
"launchesDead7d": {
"type": [
"integer",
"null"
],
"description": "Of those, how many stopped trading within 7 days of launch"
},
"backedForfeited": {
"type": [
"integer",
"null"
],
"description": "How many of the creator's other launches forfeited their Backed vault. Absent when none."
},
"launchesUnknown": {
"type": [
"integer",
"null"
],
"description": "Of those, how many are neither still trading nor known to have stopped (no trade on record and no word on whether they left their launch curve). Stopped is launchesTotal − launchesAlive − launchesUnknown."
},
"offPlatformPending": {
"type": [
"boolean",
"null"
],
"description": "Launches on other platforms are still being read; counts may grow"
},
"sameNameLaunches24h": {
"type": [
"integer",
"null"
],
"description": "Coins with this name or ticker launched on this chain within a day of this one that name the same\nX account or website, or come from linked wallets (this one included). Shown, not counted as the\ncreator's launches. Absent when there is no other.\n"
}
},
"description": "A coin creator's record, as Chain Daddy reads it from chains. Facts and counts only; every label\ncarries its definition.\n"
}{
"title": "Get a coin's creator record",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_deal — Get a deal
Get one deal with its history Returns one deal with its event history, attestations and payment records; `stage`, `deadline` and `deadline_kind` say where it stands and which clock is running. Public: anyone with the id can read it. With a wallet session the answer also carries `actions` (what that wallet 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; it is only on the parties' own list of their deals.
{
"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 in the list of the caller's own deals, which only returns deals the caller is 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"
]
}
}
}{
"title": "Get a deal",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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 (a UUID), as the developer's app list gives it. 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"
}{
"title": "Get one of my apps",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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` = the current agreement is not signed yet, `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`). It explains a developer route's `DEVELOPER_AGREEMENT_REQUIRED` or `PAID_PLAN_REQUIRED` refusal. 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": {
"beta": {
"type": [
"boolean",
"null"
],
"description": "Present and true when `tier` is a plan in beta the wallet switched on over the plan it pays for"
},
"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"
]
},
"paid_tier": {
"type": [
"string",
"null"
],
"description": "The plan the wallet pays for, when `beta` is true. `expires_at` is that plan's."
},
"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 this wallet's signature counts: the current version, or an earlier one for 30\ndays after the current version was published (then `resign_by` is set)\n"
},
"resign_by": {
"type": [
"string",
"null"
],
"description": "Present while an earlier version still counts: sign the current version by then, or the\nportal and the program's actions are refused until you do\n"
},
"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"
}
}
},
"developer_plan_beta": {
"type": [
"object",
"null"
],
"properties": {
"on": {
"type": [
"boolean",
"null"
],
"description": "This account is on it"
},
"tier": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
],
"description": "Why it cannot be switched on, when `available` and `on` are both false: `DEVELOPER_AGREEMENT_REQUIRED`,\n`PAID_PLAN_REQUIRED`, `ALREADY_INCLUDED` (the account's plan is Developer or above) or `NOT_IN_BETA`.\n"
},
"in_beta": {
"type": [
"boolean",
"null"
],
"description": "The Developer plan is still in beta, and free while it is"
},
"available": {
"type": [
"boolean",
"null"
],
"description": "This account can switch it on now"
}
},
"description": "The Developer plan in beta, for this wallet"
}
}
}{
"title": "Get my developer program status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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 one token's own price can be lower than `crownFee`. 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"
]
}
}
}
}
}
}{
"title": "Get current fees",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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 selected: `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. The audience size is who a broadcast or a reward to that selection would reach. A token page id repeats across chains, so `chain` decides which 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"
]
}
}
}
}
}
}{
"title": "Size your holder segments",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_my_account — Get my account
Your account at a glance, and what needs you Returns the signed-in account's wallet, every wallet on the account and its linked wallets, its plan, and two lists of plain sentences addressed to the person. `must_act` is what only the person can do: answer a deal offer (or deposit, consent or launch for one already agreed), register a token page they launched, a token page whose health is falling toward expiry, a pending CLI sign request, the updated Developer Program agreement to sign. `warnings` is what is close to going wrong: the API key's daily quota nearly used, a failing or disabled webhook (store webhooks included), a trial or canceled plan about to end. Each item ends with the chaindaddy.io link where the person acts, in their own wallet. `token_pages` lists the token pages the account runs and its `role` on each: `owner` (a wallet on the account holds the registration), `manager` (the holder made one of its wallets the page's manager on chain, who can edit the page and publish on chain) or `maintainer` (can edit the page's details). Managers and maintainers are read on chain, on EVM chains; a Solana page is listed when held. At most 50, owners first. `unchecked` names any source that could not be read this time; when it is empty, everything was checked. Needs Sign in with Chain Daddy (scope api:read).
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"properties": {
"plan": {
"type": [
"object",
"null"
],
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"paid": {
"type": [
"boolean",
"null"
]
},
"tier": {
"type": [
"string",
"null"
],
"description": "free, pro, pro_plus, developer, partner or enterprise"
},
"trial": {
"type": [
"boolean",
"null"
]
},
"cancelled": {
"type": [
"boolean",
"null"
],
"description": "The plan will not renew"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"billing_cycle": {
"type": [
"string",
"null"
],
"description": "monthly or yearly, for a paid plan"
}
},
"description": "The account's plan; null when it could not be read"
},
"wallet": {
"type": [
"string",
"null"
],
"description": "The wallet the person is signed in with"
},
"wallets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"description": "Every wallet on the account, the signed-in one first"
},
"must_act": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "Where on chaindaddy.io the person acts"
},
"kind": {
"type": [
"string",
"null"
],
"description": "must_act: deal_offer, deal_deposit, deal_burn_consent, collab_launch, register_token_page,\ntoken_page_health, sign_request, developer_agreement. warnings: api_key_quota, webhook_failing,\nwebhook_disabled, plan_ending.\n"
},
"text": {
"type": [
"string",
"null"
]
}
},
"description": "One thing to relay to the person, as a plain sentence that ends with its link"
}
},
"warnings": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "Where on chaindaddy.io the person acts"
},
"kind": {
"type": [
"string",
"null"
],
"description": "must_act: deal_offer, deal_deposit, deal_burn_consent, collab_launch, register_token_page,\ntoken_page_health, sign_request, developer_agreement. warnings: api_key_quota, webhook_failing,\nwebhook_disabled, plan_ending.\n"
},
"text": {
"type": [
"string",
"null"
]
}
},
"description": "One thing to relay to the person, as a plain sentence that ends with its link"
}
},
"unchecked": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"description": "Sources that could not be read this time (plan, deals, token_page_health, ...)"
},
"token_pages": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "The token page on chaindaddy.io"
},
"role": {
"type": [
"string",
"null"
]
},
"chain": {
"type": [
"string",
"null"
],
"description": "The chain's name"
},
"symbol": {
"type": [
"string",
"null"
]
},
"wallet": {
"type": [
"string",
"null"
],
"description": "The account's wallet that has the role"
},
"chain_id": {
"type": [
"string",
"null"
],
"description": "The chain as a CAIP-2 id (eip155:4663)"
},
"token_id": {
"type": [
"integer",
"null"
],
"description": "The registration's token ID on that chain"
},
"token_address": {
"type": [
"string",
"null"
]
}
}
},
"description": "The token pages the account runs, owners first, then managers, then maintainers"
},
"linked_wallets": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"address": {
"type": [
"string",
"null"
]
},
"chain_type": {
"type": [
"string",
"null"
],
"description": "evm or solana"
},
"wallet_type": {
"type": [
"string",
"null"
],
"description": "How the wallet was made (social, app, hardware), when known"
}
}
}
}
}
}{
"title": "Get my account",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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, and the others are not in this answer. `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"
]
}
}
}{
"title": "Get a ticker's registration",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_store — Get a store by ID
A store's public catalog A creator store and its active items, by store ID (`store.id` in a store lookup's answer). The same answer as looking the store up by ticker or token page.
{
"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"
},
"kind": {
"type": [
"string",
"null"
],
"description": "Physical items are sold only by Chain Daddy's own store for now. A physical item is a good its seller ships. It is bought only through a checkout session the seller's own site opens, and a coin's physical items are not listed in the public catalog."
},
"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 not sold and is held while its `rule` holds.\n"
},
"appId": {
"type": [
"string",
"null"
],
"description": "On an item an installed app sells on the page: the app's id. Such an item is locked: the page's managers\nand store keys cannot change, grant or archive it (409 `APP_ITEM_LOCKED`). Its `sku` starts with\n`app.`, a prefix no other item may use.\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"
},
"appBps": {
"type": [
"integer",
"null"
],
"description": "On an app's item, the developer's share of each sale after the fee, in basis points, as the page's owner accepted it"
},
"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. Only the store owner's session may change them (403 SPLITS_OWNER_ONLY otherwise); sending them back unchanged is allowed."
},
"status": {
"type": [
"string",
"null"
]
},
"appRole": {
"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"
]
},
"appItemKey": {
"type": [
"string",
"null"
],
"description": "On an app's item, the app's own key for it"
},
"saleEndsAt": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"maxAppSpend": {
"type": [
"integer",
"null"
],
"description": "Consumables only. Lets apps on the token page spend this item for the wallet that holds it (the `iap-consume` app action), at most this many in one request. `null`, the default: no app can spend it, only a store key."
},
"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"
},
"appTermsVersion": {
"type": [
"integer",
"null"
],
"description": "On an app's item, the version of its terms the page's owner accepted"
},
"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"
]
},
"acceptedCurrencies": {
"type": [
"array",
"null"
],
"items": {
"type": [
"string",
"null"
]
},
"description": "Every currency the buyer may pay this dollar-priced item in, `currency` among them. Absent when the\nitem takes only `currency`. Which of them an order would be taken in right now is the item's\ncurrencies read (`getIapSkuCurrencies`)\n"
}
}
},
"description": "Active SKUs only"
},
"store": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": [
"string",
"null"
]
},
"kind": {
"type": [
"string",
"null"
],
"description": "\"operator\" on an operator store (a store the operator owns rather than a coin); absent on a coin's store"
},
"live": {
"type": [
"boolean",
"null"
],
"description": "False when the wallet that opened the store no longer has a paid plan. The store then takes no new orders\nfor its own items; items from apps installed on the page keep selling.\n"
},
"mode": {
"type": [
"string",
"null"
],
"description": "`test` for a test store: its orders are paid by the test-pay call instead of a wallet, nothing is sent\non chain and no fee is taken. Unrelated to `live` above.\n"
},
"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"
]
},
"sellerName": {
"type": [
"string",
"null"
],
"description": "Who an operator store's checkout says sells it"
},
"sellerType": {
"type": [
"string",
"null"
],
"description": "How the store's owner declares it sells; absent when it has not said"
},
"tokenOrigin": {
"type": [
"string",
"null"
]
},
"operatorSlug": {
"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"
]
},
"returnsPolicyUrl": {
"type": [
"string",
"null"
]
},
"shippingPolicyUrl": {
"type": [
"string",
"null"
]
}
}
}
}
}{
"title": "Get a store by ID",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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. It also says whether test stores are available here (`testMode`) and whether checkout sessions are (`checkoutSessions`, with the limits on how long one may stay open).
{
"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 an order with a fee is paid through. Absent on Solana. A hint only: the\ncontract to pay is always the one in the order's own `payment` block.\n"
},
"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"
},
"checkoutNoFee": {
"type": [
"string",
"null"
],
"description": "The checkout contract an order with no fee is paid through (a store whose `feeBps` is 0). Absent on\nSolana and where the chain has none. A hint only, like `checkout`.\n"
},
"confirmations": {
"type": [
"integer",
"null"
],
"description": "Confirmations an order waits for before it is `confirmed`"
}
}
}
},
"demoKey": {
"type": [
"boolean",
"null"
],
"description": "Present and true when the demo test key printed in the developer guide works here. Absent, that key answers 401 like an unknown key"
},
"enabled": {
"type": [
"boolean",
"null"
]
},
"jwksUrl": {
"type": [
"string",
"null"
]
},
"paidApps": {
"type": [
"object",
"null"
],
"properties": {
"maxQuantity": {
"type": [
"integer",
"null"
],
"description": "The most units in one order through an app"
},
"ordersPerMinute": {
"type": [
"integer",
"null"
],
"description": "The most orders one buyer wallet may open through one app in a minute"
},
"maxOrderUsdMicros": {
"type": [
"integer",
"null"
],
"description": "The most one purchase through an app may cost; an app item priced above it cannot be saved"
},
"confirmAboveUsdMicros": {
"type": [
"integer",
"null"
],
"description": "Above this, the purchase sheet asks the buyer to press and hold"
},
"walletAppDayUsdMicros": {
"type": [
"integer",
"null"
],
"description": "The most one buyer wallet may pay one app in any 24 hours"
}
},
"description": "The limits on what an app can make a buyer pay (paid apps). Chain Daddy may change them at any time.\nAmounts are in millionths of a dollar.\n"
},
"testMode": {
"type": [
"boolean",
"null"
],
"description": "Whether test stores are available here: a store's test store, its `cd_iap_test_` keys, and paying a\ntest order with no money\n"
},
"solanaStaticKey": {
"type": [
"string",
"null"
],
"description": "The read-only account every Solana store payment references"
},
"checkoutSessions": {
"type": [
"object",
"null"
],
"properties": {
"testOnly": {
"type": [
"boolean",
"null"
],
"description": "When true, only a test store's key can open a checkout session here"
},
"discounts": {
"type": [
"boolean",
"null"
],
"description": "True where a session for a physical item takes `discountUsdMicros`; absent otherwise"
},
"fulfilment": {
"type": [
"boolean",
"null"
],
"description": "True where a store's server may report a physical order's fulfilment; absent otherwise"
},
"shippingAndTax": {
"type": [
"boolean",
"null"
],
"description": "True where a session for a physical item takes `shippingUsdMicros` and `taxUsdMicros`; absent otherwise"
},
"maxExpiresInSeconds": {
"type": [
"integer",
"null"
],
"description": "The most `expiresInSeconds` a session may ask for"
},
"minExpiresInSeconds": {
"type": [
"integer",
"null"
],
"description": "The least `expiresInSeconds` a session may ask for"
},
"fulfilmentReplacement": {
"type": [
"boolean",
"null"
],
"description": "True where a fulfilment report may carry a replacement (a reprint or a new order for a canceled one); absent otherwise"
},
"defaultExpiresInSeconds": {
"type": [
"integer",
"null"
],
"description": "How long a session stays open when it does not say"
}
},
"description": "Present only where checkout sessions are switched on"
}
}
}{
"title": "Get creator store settings",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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 one the ticker's page shows: the registration ranked first on that chain (the oldest live one until it is ranked), else the largest unregistered token; `tokenAddress` names the exact contract. Other tokens with the same ticker are not in this answer.
{
"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)"
},
"auction": {
"type": [
"object",
"null"
],
"properties": {
"endsAt": {
"type": [
"string",
"null"
]
},
"raised": {
"type": [
"string",
"null"
],
"description": "Raised so far, in base units of the paired coin"
},
"minimumRaise": {
"type": [
"string",
"null"
],
"description": "The minimum raise, in base units of the paired coin"
},
"numeraireSymbol": {
"type": [
"string",
"null"
],
"description": "The paired coin's ticker (ETH, USDC)"
},
"numeraireDecimals": {
"type": [
"integer",
"null"
],
"description": "The paired coin's decimals; scale both amounts by it"
}
},
"description": "A coin's launch auction while it runs (a Doppler dynamic auction, \"Protected open\"). If it has not raised minimumRaise by endsAt, buying closes for good and holders can only sell. Absent when no auction is running."
},
"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"
},
"priceChange6h": {
"type": [
"number",
"null"
],
"description": "6-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"
},
"manager": {
"type": [
"string",
"null"
],
"description": "A wallet the owner delegated page management to, if any"
},
"tokenId": {
"type": [
"integer",
"null"
],
"description": "Registration token ID (null if unclaimed)"
},
"verifiedAt": {
"type": [
"string",
"null"
],
"description": "When ownership was proven"
},
"tokenAddress": {
"type": [
"string",
"null"
],
"description": "The token contract (or Solana mint) the registration points at"
},
"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"
}
}
}{
"title": "Get a token",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}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 and how many wallets hold half the supply. Refreshed about daily from a market-data vendor; `fetchedAt` says when. It lists no wallet addresses. Counts of flagged wallets (snipers, bundlers, insiders) are unavailable, so `quality` is empty. For a coin launched on Chain Daddy, `openBlock` says who bought in its opening blocks ("bundled at open"); it is absent when those blocks were not seen. A token page id is unique per chain, not across chains; `symbol` and `chainId` in the answer say which token it describes. `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"
}
},
"description": "Flagged-wallet counts, each present only when measured. Unavailable today, so empty."
},
"success": {
"type": [
"boolean",
"null"
]
},
"tokenId": {
"type": [
"integer",
"null"
]
},
"fetchedAt": {
"type": [
"string",
"null"
]
},
"openBlock": {
"type": [
"object",
"null"
],
"properties": {
"asOf": {
"type": [
"string",
"null"
],
"description": "When the figure was computed"
},
"buyers": {
"type": [
"integer",
"null"
],
"description": "Wallets that bought in the opening blocks"
},
"bundledPct": {
"type": [
"number",
"null"
],
"description": "Percent of supply bought in the opening blocks by bundled wallets (3 or more buying in one block, or 2 or more in one block with the same funder)"
},
"linkedPending": {
"type": [
"boolean",
"null"
],
"description": "Links between the buyers and the creator are still being read"
},
"linkedWallets": {
"type": [
"integer",
"null"
],
"description": "How many opening buyers are linked to the creator"
},
"bundledWallets": {
"type": [
"integer",
"null"
],
"description": "How many wallets bought in those blocks"
},
"creatorLinkedPct": {
"type": [
"number",
"null"
],
"description": "Percent of supply bought in the opening blocks by wallets linked to the creator (wallets the creator controls, or funded by the creator or the creator's funder)"
}
},
"description": "\"Bundled at open\": who bought in the coin's opening blocks (EVM: the launch block and the next 3; Solana: the first 30 slots). Absent when the opening blocks were not seen."
},
"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"
}
}
}
}
}{
"title": "Get a token's holder snapshot",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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. 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"
]
}
}
}
}
}{
"title": "How a token's metrics moved",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_active_alerts — List my open alerts
List your open alerts Returns the alerts the signed-in wallet's rules have fired that are still open, status `triggered` (new) or `acknowledged` (seen, not yet resolved), newest first. Narrows to one token with BOTH `chainId` and `tokenAddress` (a `symbol` is not accepted). Resolved alerts are not included. 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."
}
}
}
}{
"title": "List my open alerts",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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. A rule's `id` is what update, toggle and delete take. Narrows to one token with BOTH `chainId` and `tokenAddress`; a `symbol` is refused with 400 `invalid_filter` (one ticker can name several tokens), and narrowing needs both of the pair. Rules belong to the wallet 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"
}
}
}
}
}
}{
"title": "List my alert rules",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_community_members — List your community members
List your community members The wallets in the 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 listed first on page one. Owner or manager; wallet session only. Returns personal contact data of community members. 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"
]
}
}
}
}
}
}{
"title": "List your community members",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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. Each `id` is the app's id in every other developer app operation. `wallet` is required and must be the signed-in wallet. The public Apps directory is not part of this list. 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
}{
"title": "List my apps",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": 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. A signed-in member of a holder group also gets the sends to that group (with `crownChain`; the answer is then `Cache-Control: private, no-store`). The page's owner or a manager, signed in, also gets every holder-group and segment send and unsent scheduled drafts. When the token id exists on more than one chain, `crownChain` picks the token; without it the answer can be 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"
]
}
}
}
}
}
}{
"title": "Read a token's broadcasts",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_launch_venues — List Chain Daddy's launch options
Chain Daddy's launchpad and what it pays, per chain. The launchpad (`chaindaddy-launchpad`) creates the token together with its own locked trading pool, on EVM chains and on Solana (Meteora DBC): nothing up front, and the token's registration is free. For each chain: whether it can launch now (`launchable`), the contract the token ends up in, and the trading-fee economics in basis points of volume (`traderFeeBps` what traders pay, `creatorBps` what reaches the creator, `chainDaddyBps`). Chain Daddy's cut is set by the creator's plan when the token launches and fixed for that token (20% free, 15% annual Pro/Pro+/Developer, 5% annual Partner/Enterprise); these figures are the free plan's. For a plain token with no pool, Chain Daddy's token factory (`chaindaddy-classic`, a one-time fee with the registration included) is the other option.
{
"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 on this chain"
},
"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"
]
}
}
}{
"title": "List Chain Daddy's launch options",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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 it made, deals it accepted, and offers waiting for its answer as a registration holder. This is the only list that includes each deal's agreed `terms`, and each row carries `actions` (what the account may do now) and `stage`. `deal_type` and `status` filter it; an unknown value is a 400, not an empty list. `limit`/`offset` page through `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
}{
"title": "List my deals",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": 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"
}
}
}
}
}
}{
"title": "List your Sign in with Chain Daddy clients",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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"
]
},
"metadataUnpinned": {
"type": [
"boolean",
"null"
],
"description": "This chain has unpublished profile changes with no IPFS copy yet (they came through the profile API), so `sharedMetadataCid` does not carry them"
},
"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"
}
}
}{
"title": "List a ticker's registrations",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_skills — List the skills
Lists Chain Daddy's guides: launching or finding a token, checking its health, exporting a listing, selling items for it, signing users in, verifying receipts and building Crown Apps. Returns each guide's name, title and description. The same guides are this server's prompts.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"properties": {
"skills": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The guide's name."
},
"title": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
}{
"title": "List the skills",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"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"
}
}
}{
"title": "List the supported chains",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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"
]
}
}
}{
"title": "List a wallet's registrations",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}prepare_token_launch — Prepare a token launch link
Get a link that opens a token launch on chaindaddy.io, filled in Returns only a chaindaddy.io `url` that opens the launch form with the token's name, ticker, chain and launch contract filled in, and a `summary` of it. It creates nothing: nothing is launched, stored, paid for or signed by this call. The person reviews every field on the page and confirms the launch in their own wallet there. `venue` is `chaindaddy-launchpad`, the default: Chain Daddy's launchpad, which launches the token with its own locked trading pool, nothing up front and its registration free, on EVM chains and Solana. Or `chaindaddy-classic`: a plain token from Chain Daddy's factory (no pool, a one-time fee, registration included). Any other venue is refused (400). A launchpad launch on an EVM chain can keep part of the supply for a team, locked: `teamPercent` (up to 20), split with other people (`teamMember`), on one schedule or up to four (`teamSchedule`). The link fills the form's team row in, and the person checks every wallet and schedule there before confirming; none of it can be changed once the token is created. One the launch would refuse is refused here (400). Solana's team share and schedule are fixed, and a plain token has none at launch, so both refuse these three.
{
"type": "object",
"required": [
"symbol"
],
"properties": {
"name": {
"type": "string",
"maxLength": 64,
"description": "The token's name (default the ticker)"
},
"chain": {
"type": "string",
"maxLength": 64,
"description": "The chain to launch on, as a key (base, ethereum, solana, ...) or chain id; the person can add more on the page"
},
"venue": {
"enum": [
"chaindaddy-launchpad",
"chaindaddy-classic"
],
"type": "string",
"description": "chaindaddy-launchpad (the default, Chain Daddy's launchpad) or chaindaddy-classic (a plain token from Chain Daddy's factory)"
},
"symbol": {
"type": "string",
"maxLength": 17,
"minLength": 1,
"description": "The ticker, up to 16 characters (a leading $ is dropped)"
},
"teamMember": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120
},
"maxItems": 9,
"description": "People the team's tokens are split with, up to 9, each as `<wallet or handle>:<percent of the team's tokens>`: `0xabc…:30`, `@name:20`, `discord:name:10`. The launching wallet keeps the rest. A handle works once its owner has signed in with that account on Chain Daddy. Needs `teamPercent`."
},
"teamPercent": {
"type": "number",
"maximum": 20,
"minimum": 0.01,
"description": "Percent of supply kept for the team, locked, from 0.01 to 20. Alone, all of it goes to the launching wallet, a part every month for 6 months"
},
"teamSchedule": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 4,
"description": "When the team's tokens unlock, up to 4 schedules. Each is `week:<weeks>` (a part every week, 4 weeks or more), `month:<months>` (a part every 30 days, 2 months or more) or `days:<wait>:<last day>` (nothing for `wait` days, 7 or more, then steadily until the last day, 28 or later). The first keeps the rest of the team's tokens; every other one adds `/share:<percent of the team's tokens>`. A schedule is for everyone, by their split, unless it adds `/for:<people>`, a comma list where 0 is the launching wallet and 1, 2, … are the `teamMember` entries in order. Example: `week:4` and `month:12/share:75/for:1` unlock a quarter every week for 4 weeks for everyone, and the rest every month for 12 months for the first `teamMember`. Needs `teamPercent`."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "The chaindaddy.io page to open, filled in. Nothing has been created."
},
"summary": {
"type": [
"string",
"null"
],
"description": "One line saying what the link opens"
}
}
}{
"title": "Prepare a token launch link",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}prepare_token_registration — Prepare a token registration link
Get a link that opens registering an existing token on chaindaddy.io For a token that already exists, launched anywhere: returns only a chaindaddy.io `url` that opens its registration, and a `summary` of it. With `symbol` the link opens the token's own page with its registration ready; without it, Add a token, which indexes the token first. It creates, stores, pays and signs nothing: the person opens the link, signs in with the wallet that deployed or owns the token, and confirms in their own wallet on the page.
{
"type": "object",
"required": [
"chain",
"tokenAddress"
],
"properties": {
"chain": {
"type": "string",
"maxLength": 64,
"description": "The token's chain, as a key (base, ethereum, solana, ...) or chain id"
},
"symbol": {
"type": "string",
"maxLength": 17,
"description": "The token's ticker, when known"
},
"tokenAddress": {
"type": "string",
"maxLength": 64,
"description": "The token's contract address (EVM) or mint (Solana)"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "The chaindaddy.io page to open, filled in. Nothing has been created."
},
"summary": {
"type": [
"string",
"null"
],
"description": "One line saying what the link opens"
}
}
}{
"title": "Prepare a token registration link",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}read_doc — Read a docs page
Returns one page of Chain Daddy's documentation as Markdown, by its path in the docs (e.g. "developer/sign-in-with-chain-daddy.md") or its docs.chaindaddy.io URL. 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's path in the docs, or its docs.chaindaddy.io URL."
}
},
"additionalProperties": false
}{
"title": "Read a docs page",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}read_skill — Read a skill
Returns one of Chain Daddy's guides in full, as Markdown: its steps, the tools it uses and the rules it keeps, by the guide's name.
{
"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": "The guide's name."
}
},
"additionalProperties": false
}{
"title": "Read a skill",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": 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). `chain` (a chain key such as `base`, a chain name, or a CAIP-2 id) and `idx` narrow it. 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 lives 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"
],
"properties": {
"terms": {
"type": [
"object",
"null"
],
"properties": {
"mint": {
"type": [
"string",
"null"
]
},
"team": {
"type": [
"object",
"null"
],
"properties": {
"pct": {
"type": [
"number",
"null"
]
},
"contract": {
"type": [
"string",
"null"
],
"description": "Holds the allocation (the token on EVM, the launch's Meteora config on Solana)."
},
"cliffDays": {
"type": [
"integer",
"null"
]
},
"unlockDays": {
"type": [
"integer",
"null"
]
}
},
"description": "The team allocation the launch was made with. `pct` 0 is a launch that kept none."
},
"owner": {
"type": [
"string",
"null"
]
},
"backed": {
"type": [
"object",
"null"
],
"properties": {
"state": {
"type": [
"string",
"null"
]
}
},
"description": "Reserved for Backed; not returned yet."
},
"devBuy": {
"type": [
"object",
"null"
],
"properties": {
"pct": {
"type": [
"number",
"null"
]
},
"vesting": {
"type": [
"boolean",
"null"
]
}
},
"description": "The creator's own buy in the launch transaction, as a share of supply (simulated at build). `pct` 0 is a launch with no such buy."
},
"freeze": {
"type": [
"string",
"null"
]
},
"record": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "The public read that serves the bytes"
},
"hash": {
"type": [
"string",
"null"
],
"description": "`0x` + the hex SHA-256 of the record's bytes"
},
"onChain": {
"type": [
"boolean",
"null"
],
"description": "The coin's crown commits `hash` as its `verificationProofHash`"
},
"offChain": {
"type": [
"boolean",
"null"
],
"description": "The crown was minted before records went on chain; Chain Daddy keeps and signs the record"
}
},
"description": "The coin's launch record, for a coin launched on Chain Daddy"
},
"sources": {
"type": [
"object",
"null"
],
"properties": {
"mint": {
"type": [
"string",
"null"
]
},
"team": {
"type": [
"string",
"null"
]
},
"owner": {
"type": [
"string",
"null"
]
},
"venue": {
"type": [
"string",
"null"
]
},
"backed": {
"type": [
"string",
"null"
]
},
"devBuy": {
"type": [
"string",
"null"
]
},
"freeze": {
"type": [
"string",
"null"
]
},
"feeSplit": {
"type": [
"string",
"null"
]
},
"openMode": {
"type": [
"string",
"null"
]
},
"whaleCap": {
"type": [
"string",
"null"
]
},
"liquidity": {
"type": [
"string",
"null"
]
},
"feeDestination": {
"type": [
"string",
"null"
]
}
},
"description": "Where each stated line comes from, by line. `chain` is read from the coin's, the pool's or the launch platform's own contracts; `launch` is what the launch recorded when the coin was made here, true by how its contracts work; `provider` is a data provider's answer. A line with no entry has no stated source; omitted when no line has one."
},
"feeSplit": {
"type": [
"object",
"null"
],
"properties": {
"recipients": {
"type": [
"integer",
"null"
]
},
"fixedAtLaunch": {
"type": [
"boolean",
"null"
]
}
},
"description": "The pool fee's split. `fixedAtLaunch` means it was written into the pool when it launched and the pool has no function to change it."
},
"openMode": {
"type": [
"string",
"null"
]
},
"whaleCap": {
"type": [
"object",
"null"
],
"properties": {
"state": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"seconds": {
"type": [
"integer",
"null"
],
"description": "How long the cap held after launch."
},
"shareBps": {
"type": [
"integer",
"null"
],
"description": "The cap in basis points of supply."
}
},
"description": "The per-wallet cap at open. `reason` says why it is off; `shareBps` and `seconds` describe it when on."
},
"liquidity": {
"type": [
"object",
"null"
],
"properties": {
"pct": {
"type": [
"number",
"null"
],
"description": "Share (0-100) of the pool's LP in that state, when measured."
},
"state": {
"type": [
"string",
"null"
]
},
"until": {
"type": [
"integer",
"null"
],
"description": "Unlock date (unix seconds) when `state` is `locked_until`."
},
"locker": {
"type": [
"string",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
}
}
},
"ownerAddress": {
"type": [
"string",
"null"
],
"description": "What `owner()` read, when held."
},
"ownerContract": {
"type": [
"string",
"null"
],
"description": "Names a held owner we can identify. `doppler_airlock` while `owner()` is still the launch contract that created the coin."
},
"feeDestination": {
"type": [
"string",
"null"
],
"description": "`holders_time`: holders share by amount × days held, up to 90."
}
},
"description": "What the coin's creator locked in and opted out of, as the coin page's Terms card shows it. Built from\nthe trust row's own reads and what the launch recorded; omitted unless the operator turns the card on\n(`TERMS_CARD_ENABLED`). Every field is optional and an omitted field is unknown. A negative answer is a\nvalue (`held`, `enabled`, whale cap `off`), not an absence.\n"
},
"recordShare": {
"type": [
"object",
"null"
],
"properties": {
"chain": {
"type": [
"string",
"null"
],
"description": "CAIP-2 id of the coin's chain."
},
"state": {
"type": [
"string",
"null"
],
"description": "The creator record's state, with its counts. Absent (counts zero) while the record is pending or unknown, and while the creator's launches elsewhere are still being read unless what is read is already serial or blocked."
},
"token": {
"type": [
"string",
"null"
],
"description": "The coin's address; the facts are about this coin only."
},
"backed": {
"type": [
"string",
"null"
],
"description": "The coin's Backed state; `backed` only while its Backed badge shows."
},
"labels": {
"type": [
"array",
"null"
],
"items": {
"type": [
"object",
"null"
],
"properties": {
"key": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
],
"description": "A flagged label's category."
}
}
}
},
"launchPct": {
"type": [
"number",
"null"
],
"description": "What the creator held at launch, percent of supply."
},
"bundledPct": {
"type": [
"number",
"null"
],
"description": "Bundled at open, percent of supply bought by bundled wallets in the opening blocks."
},
"funderLabel": {
"type": [
"string",
"null"
],
"description": "Where the creator wallet received its first funds, as the chain shows it."
},
"holdingsPct": {
"type": [
"number",
"null"
],
"description": "What the creator holds of the coin now, percent of supply. Absent until the coin is watched."
},
"launchesAlive": {
"type": [
"integer",
"null"
]
},
"launchesTotal": {
"type": [
"integer",
"null"
]
},
"walletAgeDays": {
"type": [
"integer",
"null"
]
},
"launchesDead7d": {
"type": [
"integer",
"null"
],
"description": "Launches that stopped trading within 7 days of launching, or never left their launch curve."
},
"creatorLinkedPct": {
"type": [
"number",
"null"
],
"description": "Percent of supply bought in the opening blocks by wallets linked to the creator, once read."
}
},
"description": "The record as a pasted link of the coin shows it: the share card's record strip and the sentence after\nthe coin page's served description. Omitted unless the operator turns it on (`RECORD_SHARE_CARD_ENABLED`),\nor when nothing is known. Counts and the defined labels only; the full record is the public creator-record\nread.\n"
}
},
"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."
}
}
}{
"title": "Resolve a ticker to its token page",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_docs — Search the docs
Searches 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, each with its title, a summary, its path and its URL.
{
"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 (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": "The page's path in the docs."
},
"title": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
}{
"title": "Search the docs",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_tokens — Search tokens
Search tokens across all chains Finds 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, which `chainKey` and `token.address` tell apart, and a `token.copycat` block marks a token that imitates a better-known one. Without `q` it lists 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",
"pricechange1h",
"pricechange6h",
"pricechange24h",
"txns24h",
"age",
"createdat",
"deployedat",
"claimedat",
"heartbeatscore",
"tokenrank",
"name"
],
"type": "string",
"description": "Sort key, case-insensitive. Defaults to `relevance` with a query and `createdat` (newest first) when browsing. An unknown key falls back to the default."
},
"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"
},
"status": {
"type": "string",
"description": "Only results with this registration status: `registered` (any registration), `unregistered`, or one status value (`claimed`, `grace_period`, `inactive`, `unclaimed`, `available`)."
},
"include": {
"enum": [
"apps"
],
"type": "string",
"description": "`apps` attaches the apps installed on each result's token page."
},
"refresh": {
"type": "boolean",
"default": false,
"description": "Skip cached results, so a token created or registered a moment ago is found."
},
"pageSize": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page."
},
"maxVolume": {
"type": "number",
"minimum": 0,
"description": "24-hour volume at most this, in USD."
},
"minVolume": {
"type": "number",
"minimum": 0,
"description": "24-hour volume at least this, in USD."
},
"crownsOnly": {
"type": "boolean",
"default": false,
"description": "Only tokens that have a registration."
},
"maxHolders": {
"type": "integer",
"minimum": 0,
"description": "At most this many holders."
},
"minHolders": {
"type": "integer",
"minimum": 0,
"description": "At least this many holders."
},
"claimedAfter": {
"type": "string",
"description": "Registered (`crown.mintTimestamp`) on or after this time (ISO 8601, or `YYYY-MM-DD`)."
},
"createdAfter": {
"type": "string",
"description": "`token.createdAt` on or after this time (ISO 8601, or `YYYY-MM-DD`)."
},
"maxLiquidity": {
"type": "number",
"minimum": 0,
"description": "Liquidity at most this, in USD."
},
"maxMarketCap": {
"type": "number",
"minimum": 0,
"description": "Market cap at most this, in USD."
},
"minLiquidity": {
"type": "number",
"minimum": 0,
"description": "Liquidity at least this, in USD."
},
"minMarketCap": {
"type": "number",
"minimum": 0,
"description": "Market cap at least this, in USD."
},
"claimedBefore": {
"type": "string",
"description": "Registered on or before this time."
},
"createdBefore": {
"type": "string",
"description": "`token.createdAt` on or before this time."
},
"creatorRecord": {
"enum": [
"first_launch",
"on_record",
"no_serial",
"identified"
],
"type": "string",
"description": "Keep coins by their creator's record. `first_launch` keeps first launches, `on_record` creators who launched before, `no_serial` hides creators whose launches mostly stopped trading, `identified` keeps creators who proved an identity (an X account, or Coinbase's verification)."
},
"deployedAfter": {
"type": "string",
"description": "`token.deployedAt` on or after this time (ISO 8601, or `YYYY-MM-DD`)."
},
"deployedBefore": {
"type": "string",
"description": "`token.deployedAt` on or before this time."
},
"includeInactive": {
"type": "boolean",
"default": false,
"description": "Also return results normally hidden for low quality or inactivity."
}
},
"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"
},
"filters": {
"type": [
"object",
"null"
],
"description": "The filters applied, echoed back. Present when any filter was sent."
},
"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"
},
"manager": {
"type": [
"string",
"null"
],
"description": "A wallet the owner delegated page management to, if any"
},
"tokenId": {
"type": [
"integer",
"null"
],
"description": "Registration token ID (null if unclaimed)"
},
"verifiedAt": {
"type": [
"string",
"null"
],
"description": "When ownership was proven"
},
"tokenAddress": {
"type": [
"string",
"null"
],
"description": "The token contract (or Solana mint) the registration points at"
},
"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)"
},
"auction": {
"type": [
"object",
"null"
],
"properties": {
"endsAt": {
"type": [
"string",
"null"
]
},
"raised": {
"type": [
"string",
"null"
],
"description": "Raised so far, in base units of the paired coin"
},
"minimumRaise": {
"type": [
"string",
"null"
],
"description": "The minimum raise, in base units of the paired coin"
},
"numeraireSymbol": {
"type": [
"string",
"null"
],
"description": "The paired coin's ticker (ETH, USDC)"
},
"numeraireDecimals": {
"type": [
"integer",
"null"
],
"description": "The paired coin's decimals; scale both amounts by it"
}
},
"description": "A coin's launch auction while it runs (a Doppler dynamic auction, \"Protected open\"). If it has not raised minimumRaise by endsAt, buying closes for good and holders can only sell. Absent when no auction is running."
},
"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"
},
"priceChange6h": {
"type": [
"number",
"null"
],
"description": "6-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"
]
},
"shareUrl": {
"type": [
"string",
"null"
],
"description": "A link to the token's page on chaindaddy.io"
},
"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"
]
}
}
}{
"title": "Search tokens",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}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` are listed and each holder has turned on. It goes out at once unless `scheduledAt` is set. A sent message cannot be recalled. Only the page's owner or a manager can send; there is nothing to sign. 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. `wallet` must be one of the caller's signed-in wallets (it is recorded as the sender), and `channels` must include `inapp`. When the same token id exists on more than one chain, `crownChain` picks the token; without it 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. Needed 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."
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Optional. A key chosen for this one change, such as a UUID. Sent again with the same key and the same arguments within 24 hours, it returns the earlier answer instead of making the change again."
}
},
"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."
}
}
}{
"title": "Message your token's holders",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}shop_checkout_link — Open a pay link for a Chain Daddy Store order
Opens a checkout for a quote and returns payUrl, the link the PERSON opens to pay on Chain Daddy's pay page from their own wallet, and orderUrl, their order page (status and tracking). It moves no money, and an agent never pays. The name, email and shipping address go only to the store's server. Ask the person for them; never guess. Sold by Chain Daddy, ships in the US only.
{
"type": "object",
"required": [
"quoteId",
"name",
"email",
"address"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The recipient's full name."
},
"email": {
"type": "string",
"format": "email",
"maxLength": 200,
"description": "Where the order's notices go."
},
"phone": {
"type": "string",
"maxLength": 30,
"description": "Optional, for the carrier."
},
"address": {
"type": "object",
"required": [
"address1",
"city",
"state",
"zip"
],
"properties": {
"zip": {
"type": "string",
"maxLength": 10,
"minLength": 5
},
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"state": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"address1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"address2": {
"type": "string",
"maxLength": 200
}
},
"additionalProperties": false
},
"quoteId": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "From shop_quote."
}
},
"additionalProperties": false
}{
"title": "Open a pay link for a Chain Daddy Store order",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shop_list_products — List the Chain Daddy Store's products
Lists what the Chain Daddy Store (chaindaddy.store) sells: each product's slug, title, description, images, page URL and variants (id, title, USD price). Whether prices include shipping is in shippingIncluded. Sold by Chain Daddy, ships in the US only.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"title": "List the Chain Daddy Store's products",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shop_quote — Price a Chain Daddy Store order
Prices one product variant, in a quantity, for a US destination: items, shipping, sales tax and total in USD, with a quoteId to open a pay link with (shop_checkout_link) before expiresAt. One item (any quantity) per order. Tax may be null until a street address is given; the pay link's total is final. Sold by Chain Daddy, ships in the US only.
{
"type": "object",
"required": [
"slug",
"variant"
],
"properties": {
"zip": {
"type": "string",
"maxLength": 10,
"minLength": 5,
"description": "The US ZIP code."
},
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The product's slug, from shop_list_products."
},
"state": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "The US state's two-letter code."
},
"variant": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "The variant's id (e.g. \"11oz\")."
},
"quantity": {
"type": "integer",
"default": 1,
"maximum": 10,
"minimum": 1
}
},
"additionalProperties": false
}{
"title": "Price a Chain Daddy Store order",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}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` in the body. 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"
]
}
}
}{
"title": "Validate an app manifest",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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. The receipt is the compact JWS exactly as issued (three base64url parts joined by dots). The answer is `200` whatever the receipt is. Act on `valid`, which is true only for status `valid`. A string that is not a receipt Chain Daddy signed (a bad signature, a changed payload, an unknown key, not a JWS at all) answers `{"valid": false, "status": "invalid", "error": "…"}` with no `payload`.
{
"type": "object",
"required": [
"receipt"
],
"properties": {
"receipt": {
"type": "string",
"description": "The receipt JWS"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"error": {
"type": [
"string",
"null"
],
"description": "Why the receipt is `invalid`. Absent otherwise"
},
"valid": {
"type": [
"boolean",
"null"
],
"description": "True only when `status` is `valid`. Deliver on this"
},
"status": {
"type": [
"string",
"null"
],
"description": "`valid`: the receipt is ours and its order stands. `revoked`: a refund was recorded since.\n`invalid`: not a receipt Chain Daddy signed; `error` says why and there is no `payload`.\n`unknown`: the signature is ours, but this API has no record of the receipt.\n"
},
"payload": {
"type": [
"object",
"null"
],
"properties": {
"iat": {
"type": [
"integer",
"null"
]
},
"iss": {
"type": [
"string",
"null"
]
},
"sku": {
"type": [
"string",
"null"
]
},
"typ": {
"type": [
"string",
"null"
]
},
"kind": {
"type": [
"string",
"null"
],
"description": "Present only on an order made through an app"
},
"appId": {
"type": [
"string",
"null"
],
"description": "Present only on an order made through an app, the app"
},
"amount": {
"type": [
"string",
"null"
]
},
"wallet": {
"type": [
"string",
"null"
]
},
"appItem": {
"type": [
"string",
"null"
],
"description": "Present only on an app's own item, the app's key for it"
},
"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. Absent when `status` is `invalid`"
}
}
}{
"title": "Verify a store receipt",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
9 advertised
add-crypto-to-your-game — Add crypto to your game or app
The end-to-end path for putting a game, app or site on crypto with Chain Daddy - pick or launch a token, sell items for it, sign players in with their wallet, verify purchases on your server, and run it all on a no-money test store first. Use when someone wants to add a token, sell in-game items for crypto, give holders perks, or "add crypto" to a game, app or dApp.
build-a-crown-app — Build a Crown App
Build, test and publish a Crown App - an app any Chain Daddy token page can install - from a finished browser game (any web build, or a Godot or Unity web export) or as a sandboxed React widget. Covers the path from chaindaddy login to a reviewed app on a token page, capp.json and its permissions, the sandbox rules, selling with iap-purchase, session tokens, local testing, the boot check, preview, rollback, and paid apps. Use when someone wants to put a game, storefront, gallery or tool on a token page.
check-token-health — Check token health
Read the health of the tokens a wallet has registered on Chain Daddy - the 0-100 score, which registrations are at risk or counting down to expiry, why, and what the owner can do. Read-only. Use when someone asks how their tokens are doing, whether they could lose a ticker, or what their health score means.
export-a-listing — Export a listing
Prepare a registered token's details for listing and screener sites (CoinGecko, CoinMarketCap, DEX Screener, DEXTools, Birdeye) from its Chain Daddy page, check what is missing first, and explain the public Token List. Read-only; the human submits each form. Use when someone wants their token listed, or asks what a listing site needs.
find-and-check-a-token — Find and check a token
Read-only lookups on Chain Daddy - find a token by ticker, name or contract address on every supported chain, tell the verified token from copycats, read who registered it and how they proved ownership, read its creator's record (what they launched before, what they hold and sold), and check its health and holder spread. Use when someone asks "is this the real token", "who launched this", "what did this dev launch before", "who owns this ticker", "is this ticker free", "find the token for my game", or needs a token's chain key and crown id. Never buys, sells or signs anything.
launch-a-token — Launch a token
Help a human launch a new token with Chain Daddy, or bring one they already made - check the ticker, compare a launchpad pool against a one-time-fee token, explain fees and what is permanent, and prepare the launch. The agent never holds keys and never sends the launch - it prepares, the human signs on chaindaddy.io or runs the final CLI command. Use when someone wants to launch, create, mint or deploy a token.
sell-items-in-your-app — Sell items in your app
Run a Chain Daddy creator store - open it, add items priced in a token or in dollars, create orders from your server, have the buyer's wallet pay, wait for confirmed, deliver, read and spend what a wallet owns, drops and rewards, webhooks, refunds - and test the whole loop on a no-money test store first. Use when someone wants to sell credits, skins, passes or badges for their token, give items away, or unlock perks for holders.
sign-in-with-chain-daddy — Sign in with Chain Daddy
Add "Sign in with Chain Daddy" to any website, game or app with no registration - standard OpenID Connect (authorization code + PKCE, ES256 ID tokens) that tells your server who the visitor is, which wallets they control, which crowns they hold and whether they hold a coin. Covers the four copy-paste pieces (client.json, the button, the callback page, verifying the token), the stock-library setup, the claims to check, and how it differs from a Crown App session token. Use when someone wants wallet sign-in, "log in with Chain Daddy", or to link a player account to a wallet.
verify-receipts-and-sessions — Verify receipts, sessions and webhooks
Verify what Chain Daddy signs on your own server before acting on it - store purchase receipts (iap-receipt+v1), Crown App session tokens (app-session+v1), Sign in with Chain Daddy ID tokens (signin+v1), and webhook signatures - with the exact keys, claims and checks, plus published test vectors. Use when writing server code that grants items, credits a purchase, trusts a player's wallet, or receives Chain Daddy webhooks.
Resources
0 advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
- 2026-11-09: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1079 ms
- 95th percentile latency
- 1079 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1079 ms · metadata changed · 45 tool(s), 0 resource(s), 0 resource template(s), 9 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http chain-daddy-mcp https://api.chaindaddy.io/mcpCodex
codex mcp add chain-daddy-mcp --url https://api.chaindaddy.io/mcpCursor
{
"mcpServers": {
"chain-daddy-mcp": {
"url": "https://api.chaindaddy.io/mcp"
}
}
}Cline
{
"mcpServers": {
"chain-daddy-mcp": {
"type": "streamableHttp",
"url": "https://api.chaindaddy.io/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"chain-daddy-mcp": {
"type": "http",
"url": "https://api.chaindaddy.io/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http chain-daddy-mcp https://api.chaindaddy.io/mcpClaude Desktop
https://api.chaindaddy.io/mcpWindsurf
{
"mcpServers": {
"chain-daddy-mcp": {
"serverUrl": "https://api.chaindaddy.io/mcp"
}
}
}Let your agent find its tools
Find servers like Chain Daddy MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other ai and machine learning servers
Do you run Chain Daddy MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.