Skip to main content

API Examples

PowerShell

Below is an example of how to authenticate and work with the CMS Api.

Note: Make sure the user you are using is permitted to perform CMS Authentication.

########################################################################
# Variables
########################################################################
# Modify for your endpoint
$BaseUrl     = 'https://api.cloudaxis.cloud/api/v1/'
# This user is permitted to do CMS Auth
$EmailAddress = 'sample@api.connection'
$Password     = 'D!dYouRe@llyTh1nkItW0uldB3Th4t3@sy'
########################################################################
# Functions
########################################################################
# Get a Token
function Get-CmsBearerToken
{
    [CmdletBinding(DefaultParameterSetName="Initial")]
    param([Parameter(Mandatory=$true, ParameterSetName="Initial")]
          [string]$EmailAddress,
          [Parameter(Mandatory=$true, ParameterSetName="Initial")]
          [string]$Password,
          [Parameter(Mandatory=$true, ParameterSetName="Refresh")]
          [string]$RefreshToken,
          [Parameter(Mandatory=$true)]
          [string]$BaseUrl)
    end
    {
        New-CmsLogMessage -T Info "Retrieving $($PSCmdlet.ParameterSetName) CMS bearer token."

        switch ($PSCmdlet.ParameterSetName)
        {
            'Initial' {
                $Url = "$($BaseUrl.Trim('/'))/auth/token"
                $Body = @{
                    EmailAddress = $EmailAddress
                    Password = $Password
                } | ConvertTo-Json
            }
            'Refresh' {
                $Url = "$($BaseUrl.Trim('/'))/auth/token-refresh"
                $Body = @{
                    RefreshToken = $RefreshToken
                } | ConvertTo-Json
            }
        }

        $Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
        $Headers.Add("Content-Type", "application/json")

        try {
            $Response = Invoke-RestMethod $Url -Method 'POST' -Headers $Headers -Body $Body
        } catch {
            New-CmsLogMessage -T Error "Token request failed. $($_.Exception.Message)"
            throw
        }
        return [CMS.Domain.Models.AuthResponse]$Response
    }
}
########################################################################
function New-CmsApiCall
{
    param([Parameter(Mandatory=$true)]
          [string]$BearerToken,
          [Parameter(Mandatory=$true)]
          [string]$BaseUrl,
          [Parameter(Mandatory=$true)]
          [string]$Uri,
          [psobject]$Body,
          [Parameter(Mandatory=$true)]
          [ValidateSet("GET", "POST", "PUT", "DELETE")]
          [string]$Method,
          [bool]$ExpectNotFound=$false)
    end
    {
        $Url = ("$($BaseUrl.Trim('/'))/$($Uri.TrimStart('/'))").ToLower()
        New-CmsLogMessage -T Info "Processing Api call - $($Method) $($Url)."

        switch ($Method)
        {
            'PUT' {
                if ($null -eq $Body) {
                    New-CmsLogMessage -T Error "Api call using $($Method) cannot have an empty Body parameter."
                } else {
                    $Body = $Body | ConvertTo-Json
                }
            }
            'POST' {
                if ($null -eq $Body) {
                    New-CmsLogMessage -T Error "Api call using $($Method) cannot have an empty Body parameter."
                } else {
                    $Body = $Body | ConvertTo-Json
                }
            }
        }

        $Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
        $Headers.Add("Authorization", "Bearer $($BearerToken)")
        $Headers.Add("Content-Type", "application/json")

        try {
            $Response = Invoke-RestMethod $Url -Method $Method -Headers $Headers -Body $Body
            return $Response
        } catch {
            if (!$ExpectNotFound) {
                New-CmsLogMessage -T Error "Api call failed. $($_.Exception.Message)"
                return $Response
            }
        }
    }
}
########################################################################
# Make Calls
########################################################################
# Get Token for the Api
$Token = Get-CmsBearerToken -EmailAddress $EmailAddress -Password $Password -BaseUrl $ApiEndpoint
if (!$Token) {
    Write-Host "No token could be retrieved.";
    exit 1
}
# Get Subscriptions
$ApiResponse = New-CmsApiCall -BearerToken $Token.Token -BaseUrl $ApiEndpoint -Uri "/subscriptions/" -Method GET
if ($ApiResponse.Code -ne 200) {
    Write-Host "Error retrieving subscriptions $($ApiResponse.Errors).";
    exit 1
} else {
    Write-Verbose "Loaded Subscripions."
    $Subscriptions = $ApiResponse.Data
}