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
Returnsholders, pagination, meta
chainRequired

Supported EVM chain.

tokenRequired

EVM ERC-20 contract address.

0x2867554B46E3b1Ea0bCa2aEc08973B24C8EB1977
limitRequired

How many holders to return. Range: 1-1000.

minBalanceRawOptional

Optional inclusive lower bound in raw token units.

maxBalanceRawOptional

Optional inclusive upper bound in raw token units.

Request
POST https://ting.openads.world/api/ting/scan
{
  "chain": "base",
  "token": "0x2867554B46E3b1Ea0bCa2aEc08973B24C8EB1977",
  "limit": 10
}
Response
{
  "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/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
chainOptional

Optional. Base only.

base
tokenOptional

Optional. USDC only.

USDC
toRequired

1-100 EVM wallet addresses.

rewardRequired

USDC per recipient. Minimum 0.05.

messageRequired

Message text. Max 1000 characters.

titleOptional

Optional card title. Max 80 characters.

imageUrlOptional

Optional image URL. Must start with https://.

senderNameOptional

Optional display name. Max 40 characters.

linkUrlOptional

Optional action URL. Must start with https://.

ctaTextOptional

Optional action label. Max 40 characters.

idempotencyKeyOptional

Optional retry key for the exact same request.

Request
POST https://ting.openads.world/api/ting/send
{
  "chain": "base",
  "token": "USDC",
  "to": [
    "0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18c"
  ],
  "reward": "0.05",
  "message": "Hello from Ting"
}
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
requestIdRequired

Returned by POST /api/ting/send.

YOUR_REQUEST_ID
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
addressRequired

EVM wallet address to read inbox messages for.

0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18c
Request
POST https://ting.openads.world/api/ting/inbox
{
  "address": "0xb9a3faeb416580f4bc1c8f6e2d4773b580e9d18c"
}
Response
{
  "address": "0x...",
  "messages": [],
  "unclaimedCount": 0,
  "totalEarned": "0"
}