Aden
Features

Albums

Group tracks into a release — EPs, albums, mixtapes — with shared artwork, collaborators, and ordering.

An album is an ordered collection of tracks that ship together. Aden uses the same resource for EPs, albums, mixtapes, and singles-with-extras — anything where the unit of release is bigger than one song.

What an album represents

Albums sit between a team and its tracks. Adding a track to an album doesn't move it — tracks always belong to a team — but it does opt that track into the album's ordering, collaborator roster, and release status.

Albums carry the things a release needs as a whole: artwork, a release date, a tracklist order, and a shared set of collaborators.

Data model

FieldTypeNotes
idnumberStable numeric ID.
titlestringAlbum title.
statusAlbumStatusMirrors track status: ideareleased.
team_idnumberOwning team.
positionstringFractional index for the team's album shelf.
cover_urlstring | nullAlbum artwork.
cover_url_mediumstring | nullResized variant.
release_datestring | nullISO date. Drives the calendar release event.
created_atstringISO 8601.
updated_atstringISO 8601.

Album sub-resources:

  • Tracks — the tracklist, ordered by fractional position.
  • Collaborators — contacts credited on the album as a whole.
  • Links — DSP / streaming / store links surfaced on the public release page.

Lifecycle

Albums share the track status enum, but at the release level. A common pattern:

  1. Create the album, attach tracks (status: idea).
  2. Move the album to in_progress while tracks are being written.
  3. Move to mixing / mastering as masters land.
  4. Set release_date and flip to ready when everything's locked.
  5. Flip to released on release day — this also fires the calendar release event.

Album status is independent from track status; the product surfaces both so you can see, at a glance, "the album is mastering but track 4 is still in progress."

Tracklist ordering

Track order inside an album is stored as a fractional index on each track's album-scoped position. To reorder, you send the new position for the moved track only — never N positions at once.

Endpoints:

  • GET /albums/{id}/tracks — ordered tracklist.
  • POST /albums/{id}/tracks — attach an existing track.
  • DELETE /albums/{id}/tracks/{trackId} — detach (the track stays in the team).
  • POST /albums/{id}/tracks/reorder — move a single track.

Collaborators

Album-level collaborators are credited on the release as a whole — common for A&Rs, executive producers, art directors, or anyone whose contribution spans the whole record.

  • GET /albums/{id}/collaborators
  • POST /albums/{id}/collaborators
  • DELETE /albums/{id}/collaborators

Track-level collaborators stay on the track. Both are displayed on the release page.

Status

Status is its own endpoint so transitions can be audited:

PATCH /albums/{id}/status   { "status": "released" }

DSP and store links live on the album:

  • GET /albums/links — list links across the team.
  • POST /albums/links, PATCH /albums/links, DELETE /albums/links.

Recipes

Ship an album end-to-end

const { data: album } = await aden.api.v1.albums.post({
    teamId: 123,
    title: 'Late Bloomer',
    release_date: '2026-06-12',
})

for (const trackId of trackIds) {
    await aden.api.v1.albums({ id: album.id }).tracks.post({ trackId })
}

await aden.api.v1.albums({ id: album.id }).status.patch({ status: 'ready' })

Reorder track 4 to the top of the album

await aden.api.v1.albums({ id: albumId }).tracks.reorder.post({
    trackId,
    beforeTrackId: firstTrackId,
})

Pull a release page payload

const [{ data: album }, { data: tracks }] = await Promise.all([
    aden.api.v1.albums({ id: albumId }).get(),
    aden.api.v1.albums({ id: albumId }).tracks.get(),
])
  • Tracks — the units inside an album.
  • Team — who owns the release.
  • API reference — full schemas and parameters.
Was this helpful?

On this page