# Quickstart: MusicAPI Managed Transfers
URL: https://musicapi.com/docs/get-started/quickstart-managed-transfers.md

> Turn on Managed Transfers, open your hosted transfer flow, and watch a demo transfer land in Demoify.

Product: MusicAPI Managed Transfers. Section: Get started.

You open your own hosted transfer flow, move a few playlists into Demoify, and get the result as a webhook. You write no code until the last step.

1. **Sign up as transferring**

   Sign up at [app.musicapi.com/admin/signup](https://app.musicapi.com/admin/signup) and pick **transferring** libraries into your service. This turns Managed Transfers on, gives you ready-made source integrations, and sets the destination to Demoify.
2. **Open your transfer URL**

   Open `https://app.musicapi.com/{slug}/transfer` in a browser. Your slug is `{slug}`.
3. **Run a transfer**

   Pick a source service, sign in to it, pick a few playlists and confirm. Demoify, the destination, needs no sign-in.
4. **Watch the result**

   The progress page is live. The results page shows the match rate and every item that did not match.
5. **Get the webhook**

   Add a webhook endpoint and run a second transfer. Your backend gets `transfer.completed` and `match.report_ready`.

> **Signed up as integrating?:** Then Managed Transfers is off for your account, and the transfer URL opens no session. [Contact us](https://schedule.musicapi.com/) to turn it on.

## Your transfer URL

```url
https://app.musicapi.com/{slug}/transfer
```

Link your users to it from your app: a button, an email, a web view. With a [custom domain](https://musicapi.com/docs/managed-transfers/turn-on-and-brand.md#custom-domain) the same page answers on your own host.

## What Demoify is

Demoify is a pretend music service. It needs no account, keeps what the transfer writes, and lets you open the result like a real library. Use it to see the whole flow before your own service is connected. Read more in [Demoify](https://musicapi.com/docs/managed-transfers/demoify.md).

## Add a webhook

Open **API & webhooks** in the dashboard, add your endpoint URL, tick the events and copy the signing secret. The secret shows once. Then press **Send test event**: your endpoint gets a signed `transfer.completed` with `"test": true`.

```json
{
  "event": "transfer.completed",
  "createdAt": "2026-10-16T10:15:42.101Z",
  "data": {
    "transferUuid": "6a002d4b-f95b-471f-a27d-609a42e10cdb",
    "status": "completedWithErrors",
    "totalItems": 1204,
    "matchedItems": 1131,
    "unmatchedItems": 31,
    "resultsUrl": "https://api.musicapi.com/public/transfers/6a002d4b-f95b-471f-a27d-609a42e10cdb/unmatched"
  }
}
```

Verify the signature before you trust a delivery: [Set up and verify webhooks](https://musicapi.com/docs/webhooks/set-up-and-verify.md).

## Go to your own destination

1. Set up the integration of your own service under **Integrations**, with your developer app: see the [service setup pages](https://musicapi.com/docs/connect-users/how-sign-in-works.md#set-up-each-service).
2. Open **Transfer Branding** and pick it as the **Transfer destination**.
3. Brand the pages: logo, colours, fonts, custom domain. See [Turn it on and brand it](https://musicapi.com/docs/managed-transfers/turn-on-and-brand.md).

Your users already signed in to your service in your app? Skip the destination sign-in with a [pre-authorized session](https://musicapi.com/docs/managed-transfers/preauthorized-sessions.md).

## Next steps

- [How Managed Transfers works](https://musicapi.com/docs/managed-transfers/how-it-works.md): the wizard, sessions and limits.
- [Transfer results and unmatched items](https://musicapi.com/docs/managed-transfers/results-and-unmatched.md).
- [Billing](https://musicapi.com/docs/billing/billing-and-usage.md): how a transfer is metered.
