Register your webhook endpoint to receive real-time notifications when new Cardano assets are discovered.

Test Receiver → Use our test endpoint to verify webhook delivery
+

Register Webhook

</>

Integration Guide

Event Type

Your endpoint will receive POST requests with new_asset_discovered events whenever a new Cardano native asset matching our criteria is found.

Request Headers

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

Payload Structure

JSON
{
  "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"]
  }
}

Signature Verification

Verify the X-Hub-Signature-256 header by computing an HMAC-SHA256 hash of the raw request body using your shared secret.

Python
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)
Node.js
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)
    );
}
Go
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))
}

Test Your Signature

Verify your HMAC implementation is correct by testing against our server.