---
title: "POST /tracks"
method: POST
path: "/tracks"
tags: ["tracks"]
---

# POST /tracks

`POST /tracks`

Creates a new track

## Query parameters

- `user_id` string, required

## Request body

- CreateTrackRequestBody
  - `track_id` string — Optional track ID (will be generated if not provided)
  - `title` string, required — Track title
  - `genre` string, required — Music genre. Any string up to 100 characters is accepted. Known/canonical values (shown as autocomplete suggestions in clients): Electronic, Rock, Metal, Alternative, Hip-Hop/Rap, Experimental, Punk, Folk, Pop, Ambient, Soundtrack, World, Jazz, Acoustic, Funk, R&B/Soul, Devotional, Classical, Reggae, Podcasts, Country, Spoken Word, Comedy, Blues, Kids, Audiobooks, Latin, Lo-Fi, Hyperpop, Dancehall, Techno, Trap, House, Tech House, Deep House, Disco, Electro, Jungle, Progressive House, Hardstyle, Glitch Hop, Trance, Future Bass, Future House, Tropical House, Downtempo, Drum & Bass, Dubstep, Jersey Club, Vaporwave, Moombahton.
  - `description` string, nullable — Track description
  - `mood` 'Peaceful' | 'Romantic' | 'Sentimental' | 'Tender' | 'Easygoing' | 'Yearning' | 'Sophisticated' | 'Sensual' | 'Cool' | 'Gritty' | 'Melancholy' | 'Serious' | 'Brooding' | 'Fiery' | 'Defiant' | 'Aggressive' | 'Rowdy' | 'Excited' | 'Energizing' | 'Empowering' | 'Stirring' | 'Upbeat' | 'Other' — Music mood
  - `bpm` number, nullable — Beats per minute (tempo)
  - `musical_key` string, nullable — Musical key of the track
  - `tags` string, nullable — Comma-separated tags
  - `license` string, nullable — License type
  - `isrc` string, nullable — International Standard Recording Code
  - `iswc` string, nullable — International Standard Musical Work Code
  - `release_date` string, date — Release date
  - `track_cid` string, required — CID for the track audio file (required)
  - `orig_file_cid` string — CID for the original track file
  - `orig_filename` string — Original filename of the track
  - `cover_art_sizes` string — CID for the track cover art
  - `preview_cid` string — CID for the track preview
  - `preview_start_seconds` number, float — Preview start time in seconds
  - `duration` number, float — Track duration in seconds
  - `is_downloadable` boolean — Whether the track is downloadable
  - `is_unlisted` boolean — Whether the track is unlisted
  - `is_stream_gated` boolean, nullable — Whether streaming is restricted behind an access gate
  - `access_authorities` string[], nullable — Wallet addresses that can sign to authorize stream access (programmable distribution). When empty or omitted, the track is public and validator/creator nodes can serve it.
  - `allowed_api_keys` string[], nullable — API keys allowed to stream this track
  - `stream_conditions` union
    - TipGate
      - `tip_user_id` integer, required — Must tip the given user ID to unlock
    - FollowGate
      - `follow_user_id` integer, required — Must follow the given user ID to unlock
    - PurchaseGate
      - `usdc_purchase` UsdcGate, required
        - `price` integer, required — The price in USDC needed to unlock
        - `splits` PaymentSplit[], required
          - `user_id` integer, required
          - `percentage` number, required
    - TokenGate
      - `token_gate` ExtendedTokenGate, required
        - `token_mint` string, required — The mint of the token needed to unlock
        - `token_amount` integer, required — The amount of the token needed to unlock
  - `download_conditions` union
    - TipGate
      - `tip_user_id` integer, required — Must tip the given user ID to unlock
    - FollowGate
      - `follow_user_id` integer, required — Must follow the given user ID to unlock
    - PurchaseGate
      - `usdc_purchase` UsdcGate, required
        - `price` integer, required — The price in USDC needed to unlock
        - `splits` PaymentSplit[], required
          - `user_id` integer, required
          - `percentage` number, required
    - TokenGate
      - `token_gate` ExtendedTokenGate, required
        - `token_mint` string, required — The mint of the token needed to unlock
        - `token_amount` integer, required — The amount of the token needed to unlock
  - `field_visibility` FieldVisibility
    - `mood` boolean, required
    - `tags` boolean, required
    - `genre` boolean, required
    - `share` boolean, required
    - `play_count` boolean, required
    - `remixes` boolean, required
  - `placement_hosts` string — Placement hosts for the track
  - `stem_of` StemParent
    - `category` string, required
    - `parent_track_id` integer, required
  - `remix_of` RemixParentWrite
    - `tracks` TrackElementWrite[], required
      - `parent_track_id` string, required
  - `ddex_app` string, nullable — DDEX application identifier
  - `ddex_release_ids` object, nullable — DDEX release identifiers
  - `artists` object[], nullable — DDEX resource contributors / artists
  - `resource_contributors` DdexResourceContributor[], nullable — DDEX resource contributors
    - `name` string, required — Contributor name
    - `roles` string[], required — Contributor roles
    - `sequence_number` integer — Sequence number for ordering
  - `indirect_resource_contributors` DdexResourceContributor[], nullable — DDEX indirect resource contributors
    - `name` string, required — Contributor name
    - `roles` string[], required — Contributor roles
    - `sequence_number` integer — Sequence number for ordering
  - `rights_controller` DdexRightsController — DDEX rights controller
    - `name` string, required
    - `roles` string[], required
    - `rights_share_unknown` string — Optional
  - `copyright_line` DdexCopyright
    - `year` string, required — Copyright year (4 characters)
    - `text` string, required — Copyright text
  - `producer_copyright_line` DdexCopyright
    - `year` string, required — Copyright year (4 characters)
    - `text` string, required — Copyright text
  - `parental_warning_type` string, nullable — Parental warning type
  - `cover_original_song_title` string, nullable — Original song title for cover tracks
  - `cover_original_artist` string, nullable — Original artist for cover tracks
  - `is_owned_by_user` boolean — Whether the track is owned by the user
  - `territory_codes` string[], nullable — Territory codes for distribution
  - `no_ai_use` boolean — Whether AI use is prohibited

## Response `201`

Track created successfully

- CreateTrackResponse
  - `transaction_hash` string — The blockchain transaction hash
  - `block_hash` string — The blockchain block hash
  - `block_number` integer — The blockchain block number/height
  - `track_id` string — The ID of the created track

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `500` — Server error

---

[API](https://skmtc.dev/audius/apis/audius-api.md) · [All operations](https://skmtc.dev/audius/apis/audius-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/audius/audius-api/revisions/940230b2ed3d/schema)
