NormalDance Protocol · API reference

Interfaces: 21 MCP tools, oracle REST, public registry

The same interface three ways: agent tools over MCP, a fingerprint oracle over REST, and public read-only registry endpoints. Read-only sandbox keys are available for pilots.

MCP agent tools (21)

Endpoint: mcp.normaldance.ru (SSE + HTTP streamable, Bearer auth). Generated from the server source — mcp-server/src/tools/definitions.js. Read-only sandbox keys for AI-company pilots.

verify_artist

Verify an artist: search by name in the Stage 0 registry (tracks, rights) or by wallet address on instances with a blockchain layer

ParameterDescription
artist_nameArtist's stage name (primary method — Stage 0 registry, case-insensitive)
wallet_addressEthereum wallet address (0x...) — only for instances with a blockchain layer

get_artist_passport

Fetch the full artist passport record

ParameterDescription
wallet_addressArtist's wallet address
token_idSBT token ID

check_track_ownership

Check track ownership by ISRC

ParameterDescription
isrc requiredTrack ISRC (e.g. US-NDP-26-00001)

get_royalty_balance

Check the royalty balance for a track

ParameterDescription
isrc requiredTrack ISRC

get_label_info

Fetch label information

ParameterDescription
label_wallet requiredLabel wallet address

get_system_stats

Fetch overall NDP system statistics

No parameters.

check_artist_tracks

Fetch the number of tracks by an artist

ParameterDescription
wallet_address requiredArtist's wallet address

start_ucp_checkout

Start a track purchase via NDP Checkout (UCP-compatible)

ParameterDescription
isrc requiredTrack ISRC to purchase
currencyPayment currency (MATIC, USDC)

trigger_n8n_workflow

Trigger an n8n workflow (e.g. passport minting or verification)

ParameterDescription
action requiredAction (e.g. 'mint_pass', 'verify_track', 'test')
payloadAdditional workflow data

identify_track

Identify a track by its ADNA fingerprint (anti-plagiarism; verdict same/derivative/different) or fetch track data by ISRC from the Stage 0 registry. v2 (adna_v2) adds localization: offset_sec, coverage, attribution map for multi-sample tracks

ParameterDescription
adnaADNA v1 fingerprint (base64, 256 bytes ≈ 344 chars) — run through the oracle
adna_v2ADNA v2 fingerprint (base64, starts with QTI; windowed signatures, ~KB scale) — aligned identification: finds fragments, cut-offs, pitch ±8%
isrcTrack ISRC — registry data lookup

register_track

Register a track in the Stage 0 registry (registry-api + oracle, dual write): ISRC, ADNA, splits, optional derivative link (parent_isrc)

ParameterDescription
isrc requiredISRC (e.g. RU-NDP-26-00001)
title requiredTrack title
artist_nameArtist name (for the oracle record)
adna requiredADNA v1 fingerprint (base64, 256 bytes)
adna_v2ADNA v2 fingerprint (base64, starts with QTI) — optional, mirrored to the oracle for aligned identification
sha256SHA-256 of the reference audio file (optional)
parent_isrcISRC of the source track if this is a derivative (remix/sample)
ndtFull NDT manifest (optional)
splits requiredRoyalty shares, Σ=100; cascade: {role:'parent', wallet:'isrc:<ISRC>', share:N}

get_track_manifest

Fetch a track's NDT manifest (rights, splits, sonic-dna) from the Stage 0 registry

ParameterDescription
isrc requiredTrack ISRC

audience_superfans

SPEC §7.7 fan agent: an artist's superfans derived from protocol receipts (who listens / rewinds / pays). Requires an agent token issued by the artist via POST /subjects/{ndp_id}/scopes/issue (mandate with the read_audience scope)

ParameterDescription
agent_token requiredAgent JWT from scopes/issue (with the read_audience scope)
limitHow many listeners to return (1–100, default 20)

audience_summary

SPEC §7.7 fan agent: artist audience summary from receipts — listeners, events, rewinds, total paid, active in the last 30 days. Requires an agent token with the read_audience scope

ParameterDescription
agent_token requiredAgent JWT from scopes/issue

subject_mint

SPEC §1: mint an NDP passport (Proof of Humanity). Three verification paths: label / indie_kyc / community. Returns ndp_id, status, quarantine flag

ParameterDescription
verification_path requiredVerification path
identity_commitment requiredSHA-256 hash of a unique ID (64 hex chars)
initial_device_key requiredDevice public key (hex, 33/65 bytes)
authorization requiredArtist Bearer token

subject_status

SPEC §1: public check of an NDP passport by ndp_id — status, verification path, validity

ParameterDescription
ndp_id requiredNDP passport UUID

subject_keys

SPEC §1: manage a subject's device keys — list keys

ParameterDescription
authorization requiredArtist Bearer token
ndp_id requiredNDP passport UUID

receipt_batch

SPEC §7.1: batch submission of signed play receipts. Body — an array of objects {receipt_id, seq, ndp_id, device_key, isrc, action, occurred_at, signature}

ParameterDescription
receipts requiredArray of receipts

stats_journal

Daily event journal (play/rewind/purchase, totals, chart) from the unified receipt journal

ParameterDescription
daysPeriod in days (1–365, default 30)

opt_in

SPEC §7.7: toggle a listener's opt-in for audience segmentation (privacy-first: hidden by default)

ParameterDescription
enabled requiredtrue — visible, false — hidden
authorization requiredListener Bearer token (passport owner)

snapshot_epoch

SPEC §1: current epoch snapshot of subject statuses (signed with SNAPSHOT_SIGNING_KEY)

No parameters.

Identification oracle (REST)

POST /oracle/identify

Identify a work by fingerprint (v1 adna or v2 adna_v2). Returns the best match with a numeric verdict: same (≥0.90), derivative (0.75–0.90), different (<0.75), plus registry decision; v2 adds offset, coverage and per-source attribution.

curl -s https://normaldance.ru/oracle/identify \
  -H 'Content-Type: application/json' \
  -d '{"adna_v2": "QTI…"}'

POST /oracle/identify_file

Raw audio body (any ffmpeg format, up to 32 MB) → fingerprints v1+v2 → verdict. The file is deleted after processing.

curl -s https://normaldance.ru/oracle/identify_file \
  --data-binary @track.mp3

POST /oracle/compare

Compare two fingerprints {a, b} (same version) → verdict + similarity.

curl -s https://normaldance.ru/oracle/compare \
  -H 'Content-Type: application/json' \
  -d '{"a": "…", "b": "…"}'

GET /oracle/stats

Registry size and frozen thresholds.

curl -s https://normaldance.ru/oracle/stats

Public registry endpoints (read-only)

GET /registry/tracks/{isrc}

Rights card for a work: title, artist, splits, parent ISRC (derivative chain), NDT manifest, fingerprint.

curl -s https://normaldance.ru/registry/tracks/RU-NDP-26-91752

GET /registry/cards/{card_no}

Public verification of an artist ID card (§7.5 of the spec): validity, series, status, issue date.

curl -s https://normaldance.ru/registry/cards/NDP-XXXX-XXXX-XXXX

GET /registry/stats

Aggregate registry statistics.

curl -s https://normaldance.ru/registry/stats

Rate limits apply. Interactive version of the oracle: /verify.html. Sandbox keys and pilot agreements — @NORMALDANCE.