Skip to main content

Uploading Audio Snippets

This guide walks you through uploading audio preview snippets and associating them with release items. This process requires three sequential API calls: getting a signed URL, uploading the audio file, and registering the snippet.

Prerequisites

  • A release item with a tracklist already created
  • The item's _id (itemRef)
  • Audio file in MP3 format (max 5MB)

Overview

The process involves:

  1. Get Signed URL: Request a signed URL for uploading your audio snippet
  2. Upload Audio File: Upload the audio file to the signed URL (direct to S3/storage)
  3. Register Snippet: Register the uploaded snippet with the release item

Step-by-Step Instructions

Step 1: Request Signed URL

Request a signed URL for uploading your audio snippet from the Admin API. You'll need the item's _id (itemRef) and the track position.

GraphQL Mutation:

mutation ItemAudioUpload($itemRef: ID!, $signedUrlInput: SignedUrlInput) {
itemAudioUpload(itemRef: $itemRef, signedUrlInput: $signedUrlInput) {
signedUrl
key
}
}

Variables:

{
"itemRef": "507f1f77bcf86cd799439011",
"signedUrlInput": {
"position": "A1"
}
}

Response:

{
"data": {
"itemAudioUpload": {
"signedUrl": "https://creators-audio-snippets-xxx.s3.amazonaws.com/path/to/file.mp3?X-Amz-Algorithm=...",
"key": "custom/1768154279/A1.mp3"
}
}
}

Step 2: Upload Audio File to S3

Upload your audio file directly to the signed URL from the previous step using a PUT request. The file must be MP3 format and under 5MB.

Request Parameters:

  • Method: PUT
  • URL: [signedUrl from Step 1]
  • Headers:
    • Content-Type: audio/mpeg
    • Cache-Control: max-age=31536000
    • x-amz-acl: public-read
  • Body: Binary audio file data

Success Response:

HTTP 200 OK

Status code 200 indicates a successful upload. Ensure you follow the request format and set the x-amz-acl value to public-read.

Step 3: Register the Uploaded Snippet

After successfully uploading the file, register the snippet with the release item using the key from Step 1, the same itemRef, and the track position.

GraphQL Mutation:

mutation ItemAudioUpload($itemRef: ID!, $registerAudioInput: RegisterAudioInput) {
itemAudioUpload(itemRef: $itemRef, registerAudioInput: $registerAudioInput) {
uri
}
}

Variables:

{
"itemRef": "507f1f77bcf86cd799439011",
"registerAudioInput": {
"key": "custom/1768154279/A1.mp3",
"position": "A1"
}
}

Response:

{
"data": {
"itemAudioUpload": {
"uri": "https://creators-audio-snippets...custom/1768154279/A1.mp3?version=1"
}
}
}

Error Handling

Common Errors

"Item not found" or "Release not found"

  • Ensure the release item exists and is saved
  • Verify you're using the correct item _id (itemRef)
  • Check that you have permission to access the item

"Track position must be filled"

  • Ensure the track position matches a track in the release's tracklist
  • Position format should match your tracklist (e.g., "A1", "1", "01")

"File rejected - Format allowed mp3 - File size max 5MB"

  • Ensure the file is in MP3 format
  • Check file size is under 5MB
  • Verify Content-Type header is audio/mpeg

Upload fails (403/404 on PUT request)

  • Signed URLs expire after a short time - get a new one if expired
  • Ensure you're using the exact signed URL from Step 1
  • Check that all required headers are included, especially x-amz-acl: public-read

"Invalid url response" or "Invalid key"

  • Ensure you're using the key from Step 1 in Step 3
  • Verify the key matches the uploaded file location
  • Use the same itemRef in both Step 1 and Step 3

Important Notes

The track position must match exactly with a track in your release's tracklist (common formats: "A1", "B1", "1", "01"). Only MP3 files are supported with a maximum size of 5MB. Use the same itemRef in both Step 1 and Step 3. Use the key returned from Step 1 in Step 3's registerAudioInput. You can upload multiple snippets for different tracks by repeating this process with different positions.

Uploading Image Files for Items

The same three-step process applies to uploading image files for items, with the following differences:

  • Use the itemImageSignedUrl mutation to get a signed URL
  • Use the itemImageRegister mutation to register the uploaded image

Next Steps