Sets DDEX ContainsAI and USCO copyright claim language.
▸ Optional Fields
International Standard Recording Code. Strongly recommended for Spotify and Apple Music ingestion.
ISO 8601 format — e.g. PT3M22S = 3 min 22 sec. Defaults to PT0S if omitted.
The distributor or platform's registered DDEX DPID. Leave blank for generic / unknown recipient.
Reference ID—
⚖️
Fill in the track details and click Generate.
DDEX ERN 4.3.2 XML — attach this to your DSP submission. The ContainsAI field triggers the AI badge on Spotify. Reference ID is embedded in the XML.
USCO eCO Standard Application — copy each section into the matching field when registering the copyright. These are the exact phrases the Copyright Office expects for AI-assisted works.
Jurisdiction Matrix — per-territory status. Green = distribute freely. Yellow = review before distributing. Red = blocked until resolved.
Paste CSV to import tracks (one per line): Artist, Title, disclosure_level, ISRC (optional), Duration (optional)
Distribution Territories (applies to all tracks)
#
Artist / Rights Holder
Track Title
Disclosure Level
ISRC
Duration
Results
Reference ID
Artist
Title
Disclosure
Risk
Rec.
Download
Submission History
🔍
Reference ID
Artist
Title
Disclosure
Territories
Risk
Time
📋
No submissions yet. Generate a track to see it here.
One endpoint. Everything back.
Integration is a single REST call. You send us the track metadata — we return schema-valid DDEX ERN 4.3.2 XML,
the USCO copyright registration document, and a per-territory compliance matrix. No DDEX expertise required on your end.
The endpoint
POST
Field
Type
Required
Description
asset_id
string
✓
Your unique track identifier (UUID or your internal ID)
owner
string
✓
Rights holder name
disclosure_level
string
✓
human_made · ai_assisted · fully_ai
isrc
string
ISRC (recommended for DSP ingestion)
duration
string
ISO 8601 duration, e.g. PT3M22S
recipient_dpid
string
Recipient platform DPID (e.g. Spotify's DPID)
curl
Shell
Python
Python
Batch endpoint — process your catalog
For catalog ingestion, use /batch/forensic for bulk event recording (up to 500 events per call),
then call /generate per track for the full compliance package.
Average throughput in production: ~200 tracks/minute on a single instance.
Horizontal scaling available for higher-volume distributors.
Python — catalog ingestion
Response — what you get back
Field
Description
asset_id
Your audit reference — links DDEX XML, USCO document, and the audit log
ddex_xml
Schema-valid DDEX ERN 4.3.2 XML, ready to attach to DSP submission
usco_text
Pre-filled eCO Standard Application text for US Copyright Office registration
usco_fields
Machine-readable eCO field values (author_created, material_excluded, note_to_co)
jurisdiction
Per-territory compliance status: EU AI Act, US USCO, CA SB 942, UK, Japan
overall_risk
clear · review · blocked
schema
"DDEX ERN 4.3.2"
Your usage — GET /my/usage
Check your tier, monthly track consumption, and 6-month history at any time.
Authenticated with your X-API-Key header — no separate login needed.
Field
Description
tier
Your current plan: trial · essentials · professional · scale · enterprise
calls_this_month
Tracks generated this month via POST /generate
monthly_track_limit
Your plan ceiling — null on Enterprise (unlimited)
usage_pct
Percentage of limit consumed — null on Enterprise
tracks_remaining
Tracks before overage — null on Enterprise
rate_limit_per_min
Your request ceiling per rolling 60-second window
monthly_history
Last 6 months of [month_bucket, call_count]
Shell
Live — check your key
Errors
Status
When
Body
400
Missing or invalid request field
{"error":"asset_id required"}
401
Missing, invalid, or revoked X-API-Key
{"detail":"Invalid or missing API key"}
403
Key does not own this asset (tenant isolation)
{"detail":"Forbidden — asset owned by another key"}
404
Asset ID not found
{"detail":"Asset not found"}
409
Duplicate — e.g. email already registered
{"error":"An account with this email already exists."}
429
Rate limit exceeded for your tier
{"detail":"Rate limit exceeded (60 req/min on essentials tier). Retry after 12s."} + Retry-After header
500
Internal server error
{"detail":"Internal Server Error"}
Rate limiting: sliding 60-second window per API key. On 429, read the Retry-After header and wait that many seconds before retrying.
Batch endpoints count as 1 request regardless of payload size. Tenant isolation: a key can only read assets it created. Passing another distributor's asset_id returns 403, not 404 — by design.
Pricing
See the
for full tier details, back-catalog rates, and enterprise options.
My Account
Loading…
Change Password
API Key
Your API key authenticates all POST /generate and other API calls.
If you've lost your key, regenerate it below — the new key is shown once.
Plans & Pricing
Annual subscriptions. All tiers include DDEX ERN 4.3.2, USCO documents, RFC 3161 timestamps,
and the full jurisdiction matrix. Free trial: 14 days · 200 tracks · all features · NDA required · no card.
Essentials
$12,000
per year
5,000 tracks / mo
$0.20 / track overage
60 req / min rate limit
1 API key
Email support — 48hr SLA
DDEX ERN 4.3.2
USCO eCO documents
RFC 3161 timestamps
Jurisdiction matrix
Professional
$48,000
per year
50,000 tracks / mo
$0.15 / track overage
300 req / min rate limit
5 API keys
Priority support — 24hr SLA
All Essentials features
Monthly usage reports
Scale
$120,000
per year
250,000 tracks / mo
$0.10 / track overage
1,000 req / min rate limit
Unlimited API keys
Slack + phone support
All Professional features
Custom reporting
Enterprise
$200,000+
per year
Unlimited tracks
Custom overage terms
Custom rate limits
Unlimited API keys
Named account manager
Custom SLA
On-prem / VPC option
Custom jurisdiction modules
Back-Catalog Ingestion — One-Time
Bring an existing catalog into compliance before the EU AI Act enforcement deadline of August 2, 2026.
Bulk pricing: $0.001 – $0.002 / track.
A distributor with 1M tracks pays $1,000 – $2,000 for full catalog compliance.
Back-catalog ingestion is separate from the monthly subscription track limit.
Target Distributors
Believe
FUGA
IDOL
Amuse
Zebralution
Rate limits enforced as a sliding 60-second window. Exceeding returns HTTP 429 with a Retry-After header.