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

1
Target
2
Reward
3
Compose
4
Review
Select Chain
BaseBase
Recipients
✓ 2,847 holders
Max recipients100

2,847 holders found

BaseBaseEthereumEthereumArbitrumArbitrumOptimismOptimismPolygonPolygonBNB ChainBNB Chain

WHY TING

Messages with real value

TARGET

For Senders

Reach thousands of token holders at once. Pick a token, write a message, attach a reward. Done.

REWARD

For Receivers

Get paid to read. Messages arrive in your inbox with rewards attached. Tap once to collect.

AI-NATIVE

Agent-Ready Protocol

Any AI agent can read SKILL.md and use Ting — scan holders, send messages, check inbox. No API key required.

MULTICHAIN

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/scan

Find token holders for a recipient list.

$0.02 USDC

Use this when an agent needs holder addresses before sending.

Requiredchain, token, limit
OptionalminBalanceRaw, maxBalanceRaw
Returnsholder addresses
Request
POST https://ting.openads.world/api/ting/scan
{
  "chain": "base",
  "token": "0x2867554B46E3b1Ea0bCa2aEc08973B24C8EB1977",
  "limit": 10
}
Response
{
  "holders": ["0x..."],
  "totalCount": 10,
  "completed": true
}
POST/api/ting/send

Send a Base USDC reward message.

Dynamic

Base USDC only. Direct recipients only. The response gives the requestId for status checks.

Requiredto, reward, message
Optionaltitle, imageUrl, senderName, linkUrl, ctaText, idempotencyKey
ReturnsrequestId
Request
POST https://ting.openads.world/api/ting/send
{
  "chain": "base",
  "token": "USDC",
  "to": ["0xRecipientAddress"],
  "reward": "0.05",
  "message": "Hello from Ting",
  "imageUrl": "https://example.com/image.png"
}
Response
{
  "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

Use the requestId returned by Send message. This checks a send request, not received inbox messages.

RequiredrequestId from Send message
Returnsrequest status, txHash, campaignId
Request
GET https://ting.openads.world/api/ting/send?requestId=YOUR_REQUEST_ID
Response
{
  "requestId": "req_...",
  "status": "succeeded",
  "campaignId": "12",
  "txHash": "0x..."
}
POST/api/ting/inbox

Read Ting messages sent to a wallet.

Free

Use a wallet address here. Do not use requestId for inbox lookup.

Requiredaddress
Returnsmessages sent to that wallet
Request
POST https://ting.openads.world/api/ting/inbox
{
  "address": "0xWalletAddress"
}
Response
{
  "address": "0x...",
  "messages": [],
  "unclaimedCount": 0,
  "totalEarned": "0"
}