ONCHAIN MESSAGING PROTOCOL
Message token holders.
Attach token rewards.
Send reward-backed messages on eight supported networks. Eligible recipients claim rewards in Ting.
New Message
✓ 1,000 recipients in this preview
$TING
Planned stock rewards for $TING holders
30% of fees released by completed claims is tracked toward future stock rewards for $TING holders.
Loading latest activity
WHY TING
Reward-backed messages
For Senders
Scan a token, select up to 1,000 holders, and attach a reward.
For Receivers
Eligible recipients can claim an attached reward before its 30-day expiry.
Agent-Ready Protocol
Public endpoints support holder scans, Base USDC direct sends, status checks, and signed inbox reads.
One Inbox, Eight Networks
Ting messages from Base, Avalanche, Robinhood, Ethereum, Arbitrum, Optimism, Polygon, and BNB Chain appear in one inbox.
FOR AI AGENTS
Agent API
Scan holders, send Base USDC direct messages, check status, and read signed inboxes.
POST/api/ting/scanFind ERC-20 token holders.
$0.02 USDC
/api/ting/scanFind ERC-20 token holders.
Use this when an agent needs holders of an ERC-20 token contract before sending.
Requirement
Parameters
chainOptionalOptional. Default: base. Supported EVM chain.
tokenRequiredERC-20 token contract address. Do not use a wallet address here.
limitOptionalOptional. Default: 100. Range: 1-1000.
minBalanceRawOptionalOptional inclusive lower bound in raw token units.
maxBalanceRawOptionalOptional inclusive upper bound in raw token units.
Response
POST https://ting.openads.world/api/ting/scan
{
"chain": "base",
"token": "0x2867554B46E3b1Ea0bCa2aEc08973B24C8EB1977",
"limit": 100
}{
"holders": [
{
"address": "0x...",
"addressLabel": null,
"tokenAmount": 1000000,
"ownershipPercentage": null,
"valueUsd": null
}
],
"pagination": {
"nextCursor": null
},
"meta": {
"provider": "ting",
"chain": "base",
"token": "0x...",
"matched": 10,
"scanned": 100,
"completed": true
}
}POST/api/ting/sendSend a Base USDC direct reward message.
Reward + protocol fee
/api/ting/sendSend a Base USDC direct reward message.
Base USDC only. Direct recipients only. The response gives the requestId for status checks.
Requirement
Parameters
chainOptionalOptional fixed value. Base only.
tokenOptionalOptional fixed value. USDC only.
toRequired1-100 EVM wallet addresses.
rewardRequiredUSDC per recipient. Minimum 0.05.
messageRequiredMessage text. Max 1000 characters.
titleOptionalOptional card title. Max 80 characters.
imageUrlOptionalOptional image URL. Must start with https://.
senderNameOptionalOptional display name. Max 40 characters.
linkUrlOptionalOptional action URL. Must start with https://.
ctaTextOptionalOptional action label. Max 40 characters.
idempotencyKeyOptionalOptional retry key for the exact same request.
Response
POST https://ting.openads.world/api/ting/send
{
"chain": "base",
"token": "USDC",
"to": [
"0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18c"
],
"reward": "0.05",
"message": "Hello from Ting"
}{
"requestId": "req_...",
"status": "paid",
"message": "Payment accepted. Ting is sending the message on Base."
}GET/api/ting/send?requestId=...Check a send request.
Free
/api/ting/send?requestId=...Check a send request.
Use the requestId returned by Send message. This checks a send request, not received inbox messages.
Requirement
Parameters
requestIdRequiredReturned by POST /api/ting/send.
Response
GET https://ting.openads.world/api/ting/send?requestId=YOUR_REQUEST_ID{
"requestId": "req_...",
"status": "succeeded",
"campaignId": "12",
"txHash": "0x..."
}POST/api/ting/inboxRead a wallet inbox with a session signature.
Free
/api/ting/inboxRead a wallet inbox with a session signature.
Requires a Ting session signature for the same wallet. Sign `Ting:{lowercase address}:{sessionDate}`.
Requirement
Parameters
addressRequiredEVM wallet address to read inbox messages for.
signatureRequiredWallet signature over Ting:{lowercase address}:{sessionDate}.
sessionDateRequiredUTC date used in the signed Ting session message.
limitOptionalOptional. Default: 50. Maximum: 100.
offsetOptionalOptional pagination offset. Use nextOffset from the previous response.
Response
POST https://ting.openads.world/api/ting/inbox
{
"address": "0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18c",
"signature": "0x...",
"sessionDate": "YYYY-MM-DD",
"limit": 50,
"offset": 0
}{
"address": "0x...",
"messages": [],
"unclaimedCount": 0,
"totalEarned": "0",
"hasMore": false,
"nextOffset": null
}