Private/Invoke-SignApi.ps1

function Invoke-SignApi {
    [CmdletBinding()]
    param (
        #api path
        [string]
        $api,
        #request body
        [AllowEmptyCollection()]
        [System.Collections.Hashtable]
        $body = @{},
        [string]
        $method='GET',
        #save to file
        [string]
        $OutFile
    )

    begin {
        $apiuri = "$($script:siteinfo.url)$api"
        $header = @{
            "Authorization" = "Bearer $(ConvertFrom-SecureString -AsPlainText -SecureString $script:siteinfo.token )"
            "Accept" = "application/json"
        }

        $params = @{
            "Uri"       = $apiuri
            "Method"    = $method
            "Headers"   = $header
        }

        # convert non get request bodies to json
        # get-request as hastable
        # and file request as multipart/form-data
        if ($method -ne 'GET' -and $null -eq $body['file'] ) {
            [string]$body = [System.Collections.Hashtable]$body | ConvertTo-Json -Depth 7
            write-debug "Body: $body"
            $params['ContentType'] = 'application/json ;charset=utf-8'
            $params["Body"]      = $body
        } elseif ($method -eq 'GET') {
            $params["Body"]      = $body
        }else {
            $params["Form"]      = $body
        }


        if ($OutFile) {
            $params['OutFile'] = $OutFile
        }
    }

    process {


        Invoke-RestMethod @params

    }

    end {

    }
}