# Audio Tracks ## List additional audio tracks on a video `client.Stream.AudioTracks.Get(ctx, identifier, query) (*SinglePage[Audio], error)` **get** `/accounts/{account_id}/stream/{identifier}/audio` Lists additional audio tracks on a video. Note this API will not return information for audio attached to the video upload. ### Parameters - `identifier string` A Cloudflare-generated unique identifier for a media item. - `query AudioTrackGetParams` - `AccountID param.Field[string]` The account identifier tag. ### Returns - `type Audio struct{…}` - `Default bool` Denotes whether the audio track will be played by default in a player. - `Label string` A string to uniquely identify the track amongst other audio track labels for the specified video. - `Status AudioStatus` Specifies the processing status of the video. - `const AudioStatusQueued AudioStatus = "queued"` - `const AudioStatusReady AudioStatus = "ready"` - `const AudioStatusError AudioStatus = "error"` - `UID string` A Cloudflare-generated unique identifier for a media item. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/option" "github.com/cloudflare/cloudflare-go/stream" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) page, err := client.Stream.AudioTracks.Get( context.TODO(), "ea95132c15732412d22c1476fa83f27a", stream.AudioTrackGetParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": [ { "default": true, "label": "director commentary", "status": "queued", "uid": "ea95132c15732412d22c1476fa83f27a" } ] } ``` ## Edit additional audio tracks on a video `client.Stream.AudioTracks.Edit(ctx, identifier, audioIdentifier, params) (*Audio, error)` **patch** `/accounts/{account_id}/stream/{identifier}/audio/{audio_identifier}` Edits additional audio tracks on a video. Editing the default status of an audio track to `true` will mark all other audio tracks on the video default status to `false`. ### Parameters - `identifier string` A Cloudflare-generated unique identifier for a media item. - `audioIdentifier string` The unique identifier for an additional audio track. - `params AudioTrackEditParams` - `AccountID param.Field[string]` Path param: The account identifier tag. - `Default param.Field[bool]` Body param: Denotes whether the audio track will be played by default in a player. - `Label param.Field[string]` Body param: A string to uniquely identify the track amongst other audio track labels for the specified video. ### Returns - `type Audio struct{…}` - `Default bool` Denotes whether the audio track will be played by default in a player. - `Label string` A string to uniquely identify the track amongst other audio track labels for the specified video. - `Status AudioStatus` Specifies the processing status of the video. - `const AudioStatusQueued AudioStatus = "queued"` - `const AudioStatusReady AudioStatus = "ready"` - `const AudioStatusError AudioStatus = "error"` - `UID string` A Cloudflare-generated unique identifier for a media item. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/option" "github.com/cloudflare/cloudflare-go/stream" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) audio, err := client.Stream.AudioTracks.Edit( context.TODO(), "ea95132c15732412d22c1476fa83f27a", "ea95132c15732412d22c1476fa83f27a", stream.AudioTrackEditParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", audio.UID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "default": true, "label": "director commentary", "status": "queued", "uid": "ea95132c15732412d22c1476fa83f27a" } } ``` ## Delete additional audio tracks on a video `client.Stream.AudioTracks.Delete(ctx, identifier, audioIdentifier, body) (*string, error)` **delete** `/accounts/{account_id}/stream/{identifier}/audio/{audio_identifier}` Deletes additional audio tracks on a video. Deleting a default audio track is not allowed. You must assign another audio track as default prior to deletion. ### Parameters - `identifier string` A Cloudflare-generated unique identifier for a media item. - `audioIdentifier string` The unique identifier for an additional audio track. - `body AudioTrackDeleteParams` - `AccountID param.Field[string]` The account identifier tag. ### Returns - `type AudioTrackDeleteResponseEnvelopeResult string` ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/option" "github.com/cloudflare/cloudflare-go/stream" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) audioTrack, err := client.Stream.AudioTracks.Delete( context.TODO(), "ea95132c15732412d22c1476fa83f27a", "ea95132c15732412d22c1476fa83f27a", stream.AudioTrackDeleteParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", audioTrack) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": "ok" } ``` ## Add audio tracks to a video `client.Stream.AudioTracks.Copy(ctx, identifier, params) (*Audio, error)` **post** `/accounts/{account_id}/stream/{identifier}/audio/copy` Adds an additional audio track to a video using the provided audio track URL. ### Parameters - `identifier string` A Cloudflare-generated unique identifier for a media item. - `params AudioTrackCopyParams` - `AccountID param.Field[string]` Path param: The account identifier tag. - `Label param.Field[string]` Body param: A string to uniquely identify the track amongst other audio track labels for the specified video. - `URL param.Field[string]` Body param: An audio track URL. The server must be publicly routable and support `HTTP HEAD` requests and `HTTP GET` range requests. The server should respond to `HTTP HEAD` requests with a `content-range` header that includes the size of the file. ### Returns - `type Audio struct{…}` - `Default bool` Denotes whether the audio track will be played by default in a player. - `Label string` A string to uniquely identify the track amongst other audio track labels for the specified video. - `Status AudioStatus` Specifies the processing status of the video. - `const AudioStatusQueued AudioStatus = "queued"` - `const AudioStatusReady AudioStatus = "ready"` - `const AudioStatusError AudioStatus = "error"` - `UID string` A Cloudflare-generated unique identifier for a media item. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/option" "github.com/cloudflare/cloudflare-go/stream" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) audio, err := client.Stream.AudioTracks.Copy( context.TODO(), "ea95132c15732412d22c1476fa83f27a", stream.AudioTrackCopyParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), Label: cloudflare.F("director commentary"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", audio.UID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "default": true, "label": "director commentary", "status": "queued", "uid": "ea95132c15732412d22c1476fa83f27a" } } ``` ## Domain Types ### Audio - `type Audio struct{…}` - `Default bool` Denotes whether the audio track will be played by default in a player. - `Label string` A string to uniquely identify the track amongst other audio track labels for the specified video. - `Status AudioStatus` Specifies the processing status of the video. - `const AudioStatusQueued AudioStatus = "queued"` - `const AudioStatusReady AudioStatus = "ready"` - `const AudioStatusError AudioStatus = "error"` - `UID string` A Cloudflare-generated unique identifier for a media item.