Public/Assets/Object/Set-AtlassianCloudAssetsObject.ps1

function Set-AtlassianCloudAssetsObject{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, Position=0)]
        [ValidateNotNullOrEmpty()]
        [psobject]$Object,
 
        [Parameter(Mandatory, Position=1)]
        [ValidateNotNullOrEmpty()]
        [psobject]$ObjectType,
 
        [Parameter(Mandatory, Position=2)]
        [ValidateNotNullOrEmpty()]
        [psobject]$Schema,
 
        [Parameter(Mandatory, Position=3)]
        [string]$WorkspaceId,

        [Parameter(Mandatory, Position=4)]
        [ValidateNotNullOrEmpty()]
        [string]$Pat
    )

    $headers = @{
        Authorization = "Basic $($Pat)"
    }

    $assetsEndpoint = "https://api.atlassian.com/jsm/assets/workspace/$WorkspaceId/v1/"

    if (!$ObjectType) {
        $objectType = Get-AtlassianCloudAssetsObjectType -Id $Object.objectType.id -Schema $Schema -Attributes -WorkspaceId $WorkspaceId -Pat $Pat
    }

    $apiObject = Convert-AtlassianCloudAssetsPsObjectToApiObject -Attributes $Object.attributes -ObjectType $objectType -Schema $Schema -WorkspaceId $WorkspaceId -Pat $Pat

    $body = $apiObject | ConvertTo-Json -Depth 10
    $response = Invoke-WebRequest -Method Put -Body $body -Uri ($assetsEndpoint + "object/$($Object.id)") -ContentType application/json -Headers $headers

    if ($response.StatusCode -eq 429) {
        Start-Sleep -Seconds 2
        Write-Host "HTTP 429, waiting 2 seconds"
        $response = Invoke-WebRequest -Method Put -Body $body -Uri ($assetsEndpoint + "object/$($Object.id)") -ContentType application/json -Headers $headers
    }

    if ($response.Content) {
        $updatedObject = $response.Content | ConvertFrom-Json
    }

    return Convert-AtlassianCloudAssetsApiObjectToPsObject -Schema $Schema -Object $updatedObject -ObjectType $objectType -WorkspaceId $WorkspaceId -Pat $Pat
}