The Instagram Audio API allows you to retrieve and search for audio — both original sounds from Instagram Reels and music — and attach them to Reels at creation time. This API is available on the Instagram Platform with Facebook Login.
You need the following:
instagram_basicinstagram_content_publishSearch for audio assets to use in Reels. You can search for original sounds from existing Reels or music. If a search query is omitted, trending original sounds or music are returned by default.
GET /ig_audio?audio_type={audio-type}&user_id={user-id}&access_token={access-token}| Parameter | Type | Description |
|---|---|---|
| Enum | Required. The type of audio to search for. Values: |
| String | Required. The ID of the Instagram User performing the query. |
| String | Optional. A search string to filter results by keyword. |
| String | Required. A valid User access token. |
curl -X GET "https://graph.facebook.com/v22.0/ig_audio?audio_type=music&user_id={user-id}&access_token={access-token}"
{
"audio": [
{
"audio_id": "587784541076604",
"cover_artwork_thumbnail_uri": "https://scontent-...",
"display_artist": "Shuba",
"duration_in_ms": 153760,
"audio_type": "music",
"title": "Birthday Wish",
"download_url": "https://scontent-lga3..."
},
{
"audio_id": "587784541076614",
"display_artist": "Drake",
"duration_in_ms": 153760,
"audio_type": "music",
"title": "Birthday Wish",
"on_platform_audio_preview_link": "https://www.instagram.com...",
"is_ads_eligible": false
}
]
}
| Field | Type | Description |
|---|---|---|
| String | The unique identifier for the audio asset. |
| String | URL of the cover artwork thumbnail. Returned for music type only. May be null when no URL is available. |
| String | The display name of the artist. Returned for music type only. |
| Integer | Duration of the audio asset in milliseconds. |
| Integer | Type of the audio asset. |
| String | Title of the audio asset. |
| String | A temporary URL to preview the audio file. This URL expires after approximately 1.5 days. May be null when no preview URL is available. |
| String | The Instagram username of the creator. Returned for |
| String | URL of the creator's profile picture. Returned for |
| Boolean | Nullable boolean which shows if the audio asset can be used in ads. |
| String | URL to preview the audio. May be null when not available. |
Retrieve metadata for a specific audio asset by its ID.
GET /{ig-audio-id}?user_id={user-id}&access_token={access-token}| Parameter | Type | Description |
|---|---|---|
| String | Required. The unique identifier (FBID) of the audio asset. |
| Parameter | Type | Description |
|---|---|---|
| String | Required. The ID of the Instagram User performing the query. |
| String | Required. A valid User access token. |
curl -X GET "https://graph.facebook.com/v22.0/587784541076604?user_id={user-id}&access_token={access-token}"
{
"audio_id": "587784541076604",
"cover_artwork_thumbnail_url": "https://scontent-lga3-...",
"display_artist": "Shuba",
"duration_in_ms": 153760,
"audio_type": "music",
"title": "Birthday Wish",
"download_url": "https://scontent-lga3..."
}
| Field | Type | Description |
|---|---|---|
| String | The unique identifier for the audio asset. |
| String | URL of the cover artwork thumbnail. Returned for music type only. May be null when no URL is available. |
| String | The display name of the artist. Returned for music type only. |
| Integer | Duration of the audio track in milliseconds. |
| String | The type of audio: music or original_sound. |
| String | The title of the audio track. |
| String | A temporary URL to preview the audio file. This URL expires after approximately 1.5 days. May be null when no preview URL is available. |
| String | The Instagram username of the original audio creator. Returned for |
| String | URL of the creator's profile picture. Returned for |
| Boolean | Nullable boolean which shows if the audio asset can be used in ads. |
| String | URL to preview the audio. May be null when not available. |
Discover royalty-free Sound Collection tracks to replace copyrighted music in an Instagram Reel before promoting it as an ad. This uses the same /ig_audio endpoint with product=ADS.
Performing the swap: This endpoint only discovers replacement audio. To apply a discovered track to an Instagram Reels ad, see IG Audio Swap for Instagram Reels Ads.
Required permission: ads_management.
Availability: This feature is in limited release. Requests from apps without access return a 200-level permission error.
GET /ig_audio?product=ADS&purpose=AUDIO_COPYRIGHT_REPLACEMENT&audio_replacement_mode={mode}&ig_media_id={ig-media-id}&access_token={access-token}Note: ig_media_id is required for every mode and must reference a Reel that contains copyrighted music. Photos, carousels, and Reels without a copyright issue are rejected.
| Parameter | Type | Description |
|---|---|---|
| Enum | Required. Set to |
| Enum | Required. Set to |
| Enum | Required. How audio is discovered. |
| String | Required for all modes. The FBID (from |
| String | Required when |
| String | Required for partnership ad media. Also required for agency or multi-account tokens. Optional otherwise for |
| String | Optional. For partnership ads, the ad code authorizing access to the creator's media. Must correspond to the same media as |
| String | Required. A valid User access token with |
Results are returned in pages. default returns up to 30 tracks, search up to 25 per page, and auto returns a single track.
curl -X GET "https://graph.facebook.com/v22.0/ig_audio?product=ADS&purpose=AUDIO_COPYRIGHT_REPLACEMENT&audio_replacement_mode=default&ig_media_id={ig-media-id}&access_token={access-token}"
{
"audio": [
{
"audio_id": "587784541076604",
"cover_artwork_thumbnail_uri": "https://scontent-...",
"display_artist": "Shuba",
"duration_in_ms": 153760,
"title": "Birthday Wish",
"download_url": "https://scontent-lga3..."
}
]
}
Ads responses return royalty-free music only and include the following fields:
| Field | Type | Description |
|---|---|---|
| String | The unique identifier for the audio asset. Use this value as the |
| String | URL of the cover artwork thumbnail. |
| String | The display name of the artist. |
| Integer | Duration of the track in milliseconds. |
| String | The title of the track. |
| String | A temporary URL to preview the audio file. May be empty when no preview URL is available. |
See the Error Codes reference for error responses.
Attach an audio asset to a Reel during content creation. This uses the existing Content Publishing flow with an additional audio_configuration parameter.
POST /{ig-user-id}/mediaInclude the new audio_configuration object alongside your existing Reel parameters (video_url, media_type=REELS, etc.).
Note: New parameter: audio_configuration
| Field | Type | Description |
|---|---|---|
| String | Required. The unique identifier of the audio asset to attach, obtained from the Search Audio or Get Audio Metadata endpoints. |
| Integer | Optional. Volume level for the audio asset, from 0 (muted) to 100 (full volume). Defaults to 100. |
| Integer | Optional. Volume level for the video's original audio, from 0 (muted) to 100 (full volume). Defaults to 100. |
curl -X POST "https://graph.facebook.com/v22.0/{ig-user-id}/media" \
-d "media_type=REELS" \
-d "video_url={video-url}" \
-d 'audio_configuration={"audio_id":"587784541076604","audio_volume":80,"video_volume":50}' \
-d "access_token={access-token}"Once the container is created, publish it using the standard publishing endpoint:
POST /{ig-user-id}/media_publish?creation_id={creation-id}access_token={access-token}Refer to the Content Publishing documentation for full details on the two-step publishing flow.
Example workflow
Here is a complete example showing how to search for trending music and attach it to a Reel:
curl -X GET "https://graph.facebook.com/v22.0/ig_audio?audio_type=musicuser_id={user-id}access_token={access-token}"curl -X GET "https://graph.facebook.com/v22.0/{audio-id}?user_id={user-id}access_token={access-token}"curl -X POST "https://graph.facebook.com/v22.0/{ig-user-id}/media" \
-d "media_type=REELS" \
-d "video_url={video-url}" \
-d 'audio_configuration={"audio_id":"{audio-id}","audio_volume":100,"video_volume":60,"should_loop_audio":false}' \
-d "access_token={access-token}"curl -X POST "https://graph.facebook.com/v22.0/{ig-user-id}/media_publish?creation_id={creation-id}access_token={access-token}"