Two ways to connect your product to Ding! — a REST API for sending broadcasts from your backend, and an embeddable web widget that drops a live notification bell onto any website.
Go to your dashboard and create a channel. You'll get a unique Channel ID and API Key instantly.
My channelsUse the REST API to send broadcasts, or drop the web widget onto any page. Both use your Channel ID and API Key.
One <script> tag is all it takes. It renders a notification bell icon in your page. Visitors can subscribe to your channel directly from your site and receive messages in real-time — no page refresh, no polling.
Zero dependencies
Plain JavaScript. No React, no Vue, no framework required.
Real-time delivery
Messages appear instantly via WebSocket — no polling needed.
Subscribe flow built-in
Visitors can subscribe to your channel directly from the widget.
<!-- Paste before </body> --> <script src="/widget.js" data-channel="YOUR_CHANNEL_KEY" ></script>
Attributes
data-channel
Your 10-character channel key — found on your channel settings page. Required.
Trigger a broadcast to all channel subscribers — or target a specific user — with a single authenticated HTTP request. Works with any language or framework. No SDK required.
Any language, any framework
Node, Python, Go, PHP, Ruby — if it can send HTTP, it works.
Broadcast or target
Send to all subscribers, or target specific user IDs in the payload.
Rich content support
Plain text, HTML body, image URLs, and file attachment URLs.
/api/external/channels/{channel_id}/send
curl -X POST \ https://ding.app/api/external/channels/{channel_id}/send \ -H "X-API-KEY: your_api_key" \ -H "Content-Type: application/json" \ -d '{ "title": "Deploy complete 🚀", "body": "v2.1 is now live in production." }'
Request body fields
title
Notification title. Shown as the push notification headline. Required.
body
Main message content. Supports plain text or HTML.
image_url
URL of an image to attach inline to the message.
target_user_id
Send to a single subscriber. Omit to broadcast to all.
Your API key is available in your channel settings. Keep it secret — treat it like a password.
Same API, any language. Pick your stack.
Node.js (fetch)
await fetch( `https://ding.app/api/external/channels/${channelId}/send`, { method: 'POST', headers: { 'X-API-KEY': process.env.DING_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ title: 'Deploy complete 🚀', body: 'v2.1 is now live.', }), } );
Python (requests)
import requests requests.post( f"https://ding.app/api/external/channels/{channel_id}/send", headers={ "X-API-KEY": os.environ["DING_API_KEY"], "Content-Type": "application/json", }, json={ "title": "Deploy complete 🚀", "body": "v2.1 is now live.", }, )
Create an account, make a channel, and send your first broadcast in under 5 minutes.