> ## Documentation Index
> Fetch the complete documentation index at: https://developer.ammdistro.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Catalog transfers

> Move releases that are already in stores from another distributor to AMM Distro.

A catalog transfer moves releases that are already in stores to AMM Distro. Each release keeps its existing UPC and ISRCs, so stores treat it as the same release and keep its play counts, playlists and history.

Releases in a transfer are grouped under a **transfer ID** you choose, and submitted together.

## What's different from a new release

A transfer release must have:

* `transfer`, naming the transfer it belongs to;
* `upc`: the release's existing UPC;
* `originalReleaseDate`: the date it first came out (not in the future);
* `isrc` on every track: each recording's existing ISRC.

```json theme={"dark"}
{
  "title": "First Light",
  "releaseDate": "2027-01-15",
  "originalReleaseDate": "2019-04-01",
  "upc": "4006381333931",
  "transfer": { "batch": "nova-2026-11", "previousDistributor": "Previous distributor name" },
  "genre": { "primary": "Electronic" },
  "artists": [{ "name": "Nova", "spotifyId": "0OdUWJ0sBjDrqHygGUXeCF",
                "legalFirstName": "Nora", "legalLastName": "Vance" }],
  "artwork": { "url": "https://your-bucket.s3.amazonaws.com/nova/first-light.jpg" },
  "tracks": [{
    "title": "First Light",
    "isrc": "USRC11900001",
    "audio": { "url": "https://your-bucket.s3.amazonaws.com/nova/first-light.wav" },
    "credits": [{ "firstName": "Nora", "lastName": "Vance", "roles": ["Composer", "Producer", "Vocals"] }]
  }]
}
```

`originalReleaseDate` is when it first came out. `releaseDate` is when it should go live through AMM Distro.

> [!WARNING]
>
> Send each artist's existing `spotifyId` and `appleMusicId`. Without them, a store may put the release on a new, empty artist profile instead of the artist's existing one.

## Steps

**1. Create the transfer (optional)**

```bash theme={"dark"}
curl -s -X PUT "$BASE/delivery/transfers/nova-2026-11" \
  -H "Authorization: Bearer $AMMD_API_KEY" -H "Content-Type: application/json" \
  -d '{ "name": "Nova back catalog", "previousDistributor": "Previous distributor name",
        "notes": "48 releases, takedown scheduled for 2027-01-20" }'
```

You can skip this: the transfer is created the first time a release names it.

**2. Send each release**

`PUT /delivery/releases/{releaseId}` with `transfer.batch` set to the transfer ID, as above.

**3. Check progress**

```bash theme={"dark"}
curl -s "$BASE/delivery/transfers/nova-2026-11" -H "Authorization: Bearer $AMMD_API_KEY"
```

```json theme={"dark"}
{
  "transfer": {
    "externalId": "nova-2026-11",
    "status": "open",
    "totals": { "releases": 48, "byStatus": { "draft": 48 } },
    "releases": [{ "externalId": "NOVA-001", "title": "First Light", "upc": "4006381333931", "status": "draft" }]
  }
}
```

Run [validate](/guides/validating-and-submitting.md) on each release to find what's still missing.

**4. Submit the transfer**

```bash theme={"dark"}
curl -s -X POST "$BASE/delivery/transfers/nova-2026-11/submit" -H "Authorization: Bearer $AMMD_API_KEY"
```

Every release in the transfer is submitted at once. If any release isn't ready, nothing is submitted and the response lists each release's problems:

```json theme={"dark"}
{
  "error": "not_ready",
  "message": "2 release(s) in this transfer are not ready.",
  "details": [
    { "externalId": "NOVA-017", "errors": [{ "severity": "error", "field": "artwork", "message": "Artwork is required" }] }
  ]
}
```

Once submitted, a transfer is closed. Send any further releases under a new transfer ID. Releases in a transfer can't be submitted one by one.

## Timing the switch

Plan `releaseDate` so the release is live through AMM Distro before your previous distributor takes it down. Schedule the takedown at your previous distributor only once the releases are `live` here, so they're never missing from stores. See the [transfer checklist](/guides/transfer-checklist.md).

## Codes that belong to someone else

If a UPC or ISRC is already used by a release outside your account, the release is refused with `409 upc_in_use` or `409 isrc_in_use`. Contact your AMM Distro representative if the codes are yours.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.