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.
Requirement
Parameters
chainRequiredSupported EVM chain.
tokenRequiredEVM ERC-20 contract address.
limitRequiredHow many holders to return. 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": 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.
$0.054 USDC ~
/api/ting/sendSend a Base USDC 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 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.
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 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.
Requirement
Parameters
addressRequiredEVM wallet address to read inbox messages for.
Response
POST https://ting.openads.world/api/ting/inbox
{
"address": "0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18c"
}{
"address": "0x...",
"messages": [],
"unclaimedCount": 0,
"totalEarned": "0"
}