Register your webhook endpoint to receive real-time notifications when new Cardano assets are discovered.
Test Receiver → Use our test endpoint to verify webhook deliveryYour endpoint will receive POST requests with new_asset_discovered events whenever a new Cardano native asset matching our criteria is found.
| Header | Description |
|---|---|
| Content-Type | application/json |
| User-Agent | TB3/1.0 |
| X-Bot-Event | asset_discovered |
| X-Bot-Timestamp | Unix timestamp of the request |
| X-Hub-Signature-256 | HMAC-SHA256 signature for verification |
{
"event_type": "new_asset_discovered",
"timestamp": "2025-01-15T10:30:45.123Z",
"bot_version": "1.0",
"asset": {
"id": 1,
"policy_id": "6dc3db01cae96a57baff...",
"asset_name_hex": "5465737441737365744e616d65",
"asset_name_ascii": "TestAssetName",
"first_seen_block_height": 12172120,
"first_seen_tx_hash": "abc123...",
"metadata_name": "Test Token",
"metadata_description": "A test token",
"metadata_ticker": "TEST",
"metadata_image": "ipfs://..."
},
"metadata": {
"has_metadata": true,
"metadata_fields_present": ["name", "ticker"]
}
}
Verify the X-Hub-Signature-256 header by computing an HMAC-SHA256 hash of the raw request body using your shared secret.
import hmac
import hashlib
def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
expected = 'sha256=' + hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
)
func verifySignature(payload []byte, signature, secret string) bool {
mac := hmac.New(sha256.New, []byte(secret))
mac.Write(payload)
expected := "sha256=" + hex.EncodeToString(mac.Sum(nil))
return hmac.Equal([]byte(expected), []byte(signature))
}
Verify your HMAC implementation is correct by testing against our server.