Appearance
SDKs
The REST API is the primary integration surface. It works from any language, and everything in this documentation — search, registration status, claims, token creation, webhooks — is expressed as plain HTTPS endpoints with API-key authentication.
No @chaindaddy/sdk package
Earlier drafts of these docs described @chaindaddy/sdk (JavaScript), chaindaddy (Python), and a Go client. Those packages do not exist — do not npm install or pip install them. Use the REST API below, the CLI for shell/CI workflows, or the TypeScript SDK once it reaches public release.
TypeScript SDK (beta)
An official TypeScript SDK exists and is currently in beta while it is being rebranded — the package name and install instructions will be published with the public release. It wraps the protocol read surface with typed helpers:
| Capability | What it does |
|---|---|
search(...) | Search symbols across chains |
getCrown(...) | Fetch a registration by id |
getSymbol(...) | Resolve a symbol's registration state |
getTokenList(...) | Fetch the verified Token List |
getDeal(...) / getDealsForCrown(...) | Read ownership-transfer deals |
createEvmProvider(...) | Construct an EVM provider wired to supported chains |
Want early access? Join the developer beta at chaindaddy.io/_developer.
Using the REST API directly
Grab an API key from the API dashboard, send it in the X-API-Key header, and call https://api.chaindaddy.io. Full endpoint documentation: Search, Registrations, Tokens, Claimable, Webhooks.
Minimal typed client (TypeScript)
typescript
const BASE_URL = 'https://api.chaindaddy.io';
const API_KEY = process.env.CHAINDADDY_API_KEY!;
async function api<T>(path: string, init: RequestInit = {}): Promise<T> {
const res = await fetch(`${BASE_URL}${path}`, {
...init,
headers: {
'X-API-Key': API_KEY,
'Content-Type': 'application/json',
...init.headers,
},
});
if (res.status === 429) {
const retryAfter = parseInt(res.headers.get('Retry-After') ?? '1', 10);
await new Promise((r) => setTimeout(r, retryAfter * 1000));
return api<T>(path, init);
}
if (!res.ok) throw new Error(`API error ${res.status}: ${await res.text()}`);
return res.json() as Promise<T>;
}
// Search a symbol across chains
const results = await api<{ results: any[] }>('/api/v2/search?symbol=DOGE&chain=arbitrum');
// Registration status for a symbol on a chain
const status = await api('/api/v2/registration/DOGE/arbitrum');
// Heartbeat health
const heartbeat = await api('/api/v2/heartbeat/DOGE/arbitrum');Python
python
import os
import time
import requests
BASE_URL = "https://api.chaindaddy.io"
SESSION = requests.Session()
SESSION.headers.update({"X-API-Key": os.environ["CHAINDADDY_API_KEY"]})
def api(path, **kwargs):
while True:
res = SESSION.request(kwargs.pop("method", "GET"), f"{BASE_URL}{path}", **kwargs)
if res.status_code == 429:
time.sleep(int(res.headers.get("Retry-After", "1")))
continue
res.raise_for_status()
return res.json()
results = api("/api/v2/search", params={"symbol": "DOGE", "chain": "arbitrum"})
status = api("/api/v2/registration/DOGE/arbitrum")
heartbeat = api("/api/v2/heartbeat/DOGE/arbitrum")Other languages
Any HTTP client works — there are no language-specific requirements beyond:
- Send
X-API-Key: cd_live_…on every request - Honor
Retry-Afteron429responses (see rate limiting) - Treat write endpoints as transaction builders: they return unsigned transaction data that you sign and broadcast with your own wallet/RPC tooling
Common Patterns
Check symbol availability
typescript
const data = await api<{ results: any[] }>(
'/api/v2/search?symbol=MYNEWTOKEN&chain=arbitrum'
);
const onChain = data.results.find((r) => r.chainKey === 'arbitrum');
const isAvailable =
!onChain || ['available', 'unclaimed'].includes(onChain.crown.status);Monitor registration health
typescript
const hb = await api<{ score: number; status: string }>(
'/api/v2/heartbeat/DOGE/arbitrum'
);
if (hb.score < 60) {
console.log(`DOGE on arbitrum is at risk (score: ${hb.score})`);
}Claim a registration
The claim pipeline is a four-step REST flow (message → sign → verify → claim) — see the full walkthrough in the Registration API reference.
Shell / CI
For scripts and CI pipelines, prefer the CLI — it wraps the same REST API with wallet management, --json output, and stable exit codes:
bash
npm install -g @chaindaddy/cli
chaindaddy status --symbol DOGE --chain arbitrum --json