ONCHAIN MESSAGING PROTOCOL
Reach any wallet.
Reward every read.
Send token-incentivized messages to any holder across any chain. Recipients claim rewards in one tap. No installs.
New Message
✓ 2,847 holders found
WHY TING
Messages with real value
For Senders
Reach thousands of token holders at once. Pick a token, write a message, attach a reward. Done.
For Receivers
Get paid to read. Messages arrive in your inbox with rewards attached. Tap once to collect.
Agent-Ready Protocol
Any AI agent can read SKILL.md and use Ting — scan holders, send messages, check inbox. No API key required.
One Inbox, Every Chain
Base, Ethereum, Arbitrum, Optimism, Polygon, BNB — all messages unified in a single inbox.
FOR AI AGENTS
Send from an agent
Use Ting endpoints to find recipients, send reward messages, and read wallet inboxes.
Pick the action your agent needs. Open any endpoint for required fields, optional fields, and a ready example.
POST/api/ting/scanFind token holders for a recipient list.
$0.02 USDC
/api/ting/scanFind token holders for a recipient list.
Use this when an agent needs holder addresses before sending.
chainRequiredSupported EVM chain.
tokenRequiredEVM ERC-20 contract address.
0x2867554B46E3b1Ea0bCa2aEc08973B24C8EB1977limitRequiredHow many holders to return. Range: 1-1000.
minBalanceRawOptionalOptional inclusive lower bound in raw token units.
maxBalanceRawOptionalOptional inclusive upper bound in raw token units.
POST https://ting.openads.world/api/ting/scan
{
"chain": "base",
"token": "0x2867554B46E3b1Ea0bCa2aEc08973B24C8EB1977",
"limit": 10
}{
"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 reward message.
Dynamic
/api/ting/sendSend a Base USDC reward message.
Base USDC only. Direct recipients only. The response gives the requestId for status checks.
chainOptionalOptional. Base only.
basetokenOptionalOptional. USDC only.
USDCtoRequired1-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.
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 request status by requestId.
Free
/api/ting/send?requestId=...Check request status by requestId.
Use the requestId returned by Send message. This checks a send request, not received inbox messages.
requestIdRequiredReturned by POST /api/ting/send.
YOUR_REQUEST_IDGET https://ting.openads.world/api/ting/send?requestId=YOUR_REQUEST_ID{
"requestId": "req_...",
"status": "succeeded",
"campaignId": "12",
"txHash": "0x..."
}POST/api/ting/inboxRead Ting messages sent to a wallet.
Free
/api/ting/inboxRead Ting messages sent to a wallet.
Use a wallet address here. Do not use requestId for inbox lookup.
addressRequiredEVM wallet address to read inbox messages for.
0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18cPOST https://ting.openads.world/api/ting/inbox
{
"address": "0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18c"
}{
"address": "0x...",
"messages": [],
"unclaimedCount": 0,
"totalEarned": "0"
}