Public/Invoke-FsAPI.ps1

Function Invoke-FsAPI {
<#
.SYNOPSIS
    Invokes a general API request for data to be queried from your Freshservice domain
.DESCRIPTION
    The Invoke-FsAPI function can access any data from your FreshService domain
    *REQUIRED PARAMS* Query, Method, Paginate (Primary Object is highly recommended)
.EXAMPLE
    Invoke-FsAPI -PrimaryObject 'agents' -Query 'agents?query="first_name:JR"' -Method 'Get' -Paginate '$false'
.PARAMETER
.INPUTS
.OUTPUTS
.NOTES
.LINK
#>

    [CmdletBinding()] #Enable all the default paramters, including
    Param(
        [Parameter(Mandatory=$true,
            ValueFromPipeline=$true,
            Position=0)]
            [String]$Query,

        [Parameter(Mandatory=$false,
            Position=1)]
            [String]$PrimaryObject,
            
        [Parameter(Mandatory=$false,
            Position=2)]
            [ValidateSet("Post","Get","Delete","Put")]
            [String]$Method="Get",

        [Parameter(Mandatory=$false,
            Position=3)]
            [Boolean]$Paginate=$true,
        
        [Parameter(Mandatory=$false)]
            [int32]$Pages = 10000
    )

    Begin{
        Write-Verbose -Message "Starting $($MyInvocation.InvocationName) with $($PsCmdlet.ParameterSetName) parameterset..."
        Write-Verbose -Message "Parameters are $($PSBoundParameters | Select-Object -Property *)"
        Connect-FreshServiceAPI
        $APIEndpoint = "$($APIURL)/$Query"
        $PrimaryObject = $Query.Split('/')[0]
    }
    Process{
        Get-FreshServiceAPIResult -APIEndpoint $APIEndpoint -PrimaryObject $PrimaryObject -Paginate $Paginate -Pages $Pages -Method $Method
    }
    End{
        Write-Verbose -Message "Ending $($MyInvocation.InvocationName)..."
    }
}