This blog post follows the same idea we covered in my previous post about executing a rule as an Administrator using PowerShell.
We are going to look at how to do this using the REST API in OneStream.
How is it done
You’ll need an external authentication setup for REST API to work. Also, your OS environment must be 5.2+ 🙂
Now that is covered, let’s look at how to use REST API. The documentation for REST API is located under the following URL.
http://<servername>:<portnumber>/OneStreamApi

Like we saw in the previous post, the first thing we need is the SSO token, as that is the only way you can log in using the REST API.
Let’s create a function for that.
GetSSOToken
I’m using Newtonsoft JSON dll for parsing JSON objects. I think this is now included with OneStream (not sure which version it started. I had to add an external reference in 5.3 version, and I see the code is working without that reference in the latest 5.3 patch update.)
I’m using HttpClient. Line 7 is where I’m adding the header to accept JSON.
You’ll need the following to generate the token. My client is using PING for SSO, and yours could be different.
- Client Secret
- Client ID
- Token Manager ID
- OAuth URL
Line 18 is where you should specify your OAuth URL.
The result is a JSON like the one given below.

All we need to do is parse the JSON and the access_token, and this is what we are doing in lines 21-29.
Public Function GetAccessToken(ByVal si As SessionInfo, ByVal pingBaseURL As String, ByVal clientID As String, ByVal clientSecret As String, ByVal accessTokenMgrID As String) As String Try Dim accessToken As String = String.Empty Dim client As New HttpClient() ' Add headers client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json")) ' Convert the credentials to Base64 endoded string Dim authInfo As String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(clientID & ":" & clientSecret)) client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Basic", authInfo) 'create the body Of the request Dim tokenBody As String = "grant_type=client_credentials&scope=openid&client_id=" & clientID & "&access_token_manager_id=" & accessTokenMgrID ' Add content and mention the encoding and the content-type Dim content As New StringContent(tokenBody, Encoding.UTF8, "application/x-www-form-urlencoded") Dim result As HttpResponseMessage = client.PostAsync(pingBaseURL & "/as/token.oauth2", content).Result Dim resultContent As String = result.Content.ReadAsStringAsync().Result ' parse the result using a JObject Dim jsonResult As JObject = JObject.Parse(resultContent) If result.IsSuccessStatusCode Then accessToken = jsonResult("access_token") Else Throw New XFException("Error getting access token" & vbCrLf & result.StatusCode & vbCrLf & result.ReasonPhrase _ & vbCrLf & jsonResult("error_description").toString() & vbCrLf & jsonResult("error").toString()) End If Return accessToken Catch ex As Exception Throw ErrorHandler.LogWrite(si, New XFException(si, ex)) End Try End Function
Running the DM sequence
Now that we got the token, the next step is to run the DM sequence.
We need to add an authorization header to our request, and since our token is of type bearer, we are going to use that as our scheme in Line 7.
Now are going to add a payload to our request. I’m going to use a Dictionary to create a JSON payload. You can use Json conversion to create a formatted payload, as shown below.
Dim dictbody As New Dictionary(Of String, String) dictbody.Add("BaseWebServerUrl", "your OS URL") dictbody.Add("ApplicationName", "your app Name") dictbody.Add("SequenceName", "Your sequence name") dictbody.Add("CustomSubstVarsAsCommaSeparatedPairs", "var1=var1value,var2=var2value") Dim payLoad As String = JsonConvert.SerializeObject(dictbody, Formatting.Indented)

It is pretty easy and neat.
Now that we have the payload, all we got to do now is to POST it. This is what is happening at line 20.
Public Sub ExecuteDMSequence(ByVal si As SessionInfo, ByVal OSBaseURL As String, ByVal OSAppName As String, ByVal DMSequenceName As String, ByVal CommaSeperatedParamPairs As String, ByVal XFAPIVersion As String) Try Dim client As New HttpClient() ' add token to the header client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer",Me.GetAccessToken(si, "pingBaseURL", "clientID", "clientSecret", "accessTokenMgrID")) Dim dictbody As New Dictionary(Of String, String) dictbody.Add("BaseWebServerUrl", OSBaseURL & "/OneStreamWeb") dictbody.Add("ApplicationName", OSAppName) dictbody.Add("SequenceName", DMSequenceName) dictbody.Add("CustomSubstVarsAsCommaSeparatedPairs", CommaSeperatedParamPairs) Dim payLoad As String = JsonConvert.SerializeObject(dictbody, Formatting.Indented) ' Add content and mention the encoding and the content-type Dim content As New StringContent(payLoad, Encoding.UTF8, "application/json") Dim result As HttpResponseMessage = client.PostAsync(OSBaseURL + "/OneStreamApi/api/DataManagement/ExecuteSequence?api-version=" + XFAPIVersion, content).Result Dim resultContent As String = result.Content.ReadAsStringAsync().Result If resultContent.XFContainsIgnoreCase("Error") Then Throw New XFException(resultContent) End If Catch ex As Exception Throw ErrorHandler.LogWrite(si, New XFException(si, ex)) End Try End Sub
You can call the function as shown below.
Me.ExecuteDMSequence(si, "serverURL", "APP Name", "DM Sequence Name", "InitiatedUserName=" & si.UserName, "5.2.0")
Hope it helps.