Skip to content

Authentication

This guide describes the details of the OAuth2 implementation used to authenticate with Sibelius Cloud APIs.

Scopes

When requesting an access token, you must specify the scopes that the token will have.

The following scopes are available:

  • score - grants read and write access to scores
  • view - grants read and write access to views

Audience

When requesting an access token, you must specify the audience for which the token is intended. The audience is the identifier of the API that the token is intended for.

The following audiences are available:

  • https://api.sibelius.avid.com/score-storage/v1
  • https://api.sibelius.avid.com/score-viewer/v1

Requesting an access token

The example below demonstrates the process of obtaining an access token using the scope and audience described above:

sh
curl --request POST \
  --url https://api.sibelius.avid.com/auth/v1/oauth2/token \
  --header 'Authorization: Basic bXljbGllbnRpZDpteWNsaWVudHNlY3JldA==' \
  --data grant_type=client_credentials \
  --data 'scope=score view' \
  --data 'audience=https://api.sibelius.avid.com/score-viewer/v1 https://api.sibelius.avid.com/score-storage/v1'
js
const qs = require("querystring");
const http = require("https");

const options = {
  method: "POST",
  hostname: "api.sibelius.avid.com",
  port: null,
  path: "/auth/v1/oauth2/token",
  headers: {
    Authorization: "Basic bXljbGllbnRpZDpteWNsaWVudHNlY3JldA==",
  },
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(
  qs.stringify({
    grant_type: "client_credentials",
    scope: "score view",
    audience:
      "https://api.sibelius.avid.com/score-viewer/v1 https://api.sibelius.avid.com/score-storage/v1",
  }),
);
req.end();
py
import http.client

conn = http.client.HTTPSConnection("api.sibelius.avid.com")

payload = "grant_type=client_credentials&scope=score+view&audience=https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-viewer%2Fv1+https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-storage%2Fv1"

headers = { 'Authorization': "Basic bXljbGllbnRpZDpteWNsaWVudHNlY3JldA==" }

conn.request("POST", "/auth/v1/oauth2/token", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.sibelius.avid.com/auth/v1/oauth2/token"

	payload := strings.NewReader("grant_type=client_credentials&scope=score+view&audience=https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-viewer%2Fv1+https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-storage%2Fv1")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Basic bXljbGllbnRpZDpteWNsaWVudHNlY3JldA==")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
cs
var client = new RestClient("https://api.sibelius.avid.com/auth/v1/oauth2/token");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic bXljbGllbnRpZDpteWNsaWVudHNlY3JldA==");
request.AddParameter("undefined", "grant_type=client_credentials&scope=score+view&audience=https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-viewer%2Fv1+https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-storage%2Fv1", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
swift
import Foundation

let headers = ["Authorization": "Basic bXljbGllbnRpZDpteWNsaWVudHNlY3JldA=="]

let postData = NSMutableData(data: "grant_type=client_credentials".data(using: String.Encoding.utf8)!)
postData.append("&scope=score view".data(using: String.Encoding.utf8)!)
postData.append("&audience=https://api.sibelius.avid.com/score-viewer/v1 https://api.sibelius.avid.com/score-storage/v1".data(using: String.Encoding.utf8)!)

let request = NSMutableURLRequest(url: NSURL(string: "https://api.sibelius.avid.com/auth/v1/oauth2/token")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
java
HttpResponse<String> response = Unirest.post("https://api.sibelius.avid.com/auth/v1/oauth2/token")
  .header("Authorization", "Basic bXljbGllbnRpZDpteWNsaWVudHNlY3JldA==")
  .body("grant_type=client_credentials&scope=score+view&audience=https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-viewer%2Fv1+https%3A%2F%2Fapi.sibelius.avid.com%2Fscore-storage%2Fv1")
  .asString();

Further information