Cannot close OpsGenie Alert via PS Invoke-RestMethod, "422 Unprocessable Entity"
Asked by andrews_j@subway.com:

I can get an alert successfully created with this PS scriptlet:

```
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$body = @{    
"priority"="P1";    
"message"="TESTING JIMMY example alert message";    
"alias"="testingjimmy";    
"description"="TESTING JIMMY Every alert needs a description"    
}    
$url="https://api.opsgenie.com/v2/alerts?apiKey=xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"    I
nvoke-RestMethod -Method Post -ContentType "application/json" -Uri $url -Body (ConvertTo-Json $body)
```

But, I get "422 Unprocessable Entity" with every single option I chose (id, tiny, alias) in the below with proper modifications:

```
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12    
$header = @{        
"Authorization"="GenieKey "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx"))        
}        
$url="https://api.opsgenie.com/v2/alerts/testingjimmy/close?identifierType=alias"        
Invoke-RestMethod -Method Post -ContentType "application/json" -Header $header -Uri $url 
```

I've tried RequestIDs and the Tiny#s (alert#) too, with zero luck. The API service that this is tied to in the back end has the proper settings to close the alert as well.

Any ideas? I assume

I used several references, this is the one I used the most:

<https://docs.opsgenie.com/docs/alert-api>


Answers:
author: andrews_j@subway.com
body: I think I finally got it. Although the API documentation clearly state that the BODY is not mandatory, it is. I also needed to convert how I was passing the Authorization variable, I don't need to convert it before passing it. Here is what finally worked:

To Create:

```
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12$body = @{    "priority"="P1";    "message"="TESTING JIMMY example alert message";    "alias"="testingjimmy";    "description"="TESTING JIMMY Every alert needs a description"    }$url="https://api.opsgenie.com/v2/alerts?apiKey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"Invoke-RestMethod -Method Post -ContentType "application/json" -Uri $url -Body (ConvertTo-Json $body)
```

To Close:

```
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12$header = @{    "Authorization"="GenieKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";    }$url="https://api.opsgenie.com/v2/alerts/testingjimmy/close?identifierType=alias"$body = @{    "user"="Jimmy";    "source"="TESTING JIMMY example alert message";    "note"="closed by script";    }Invoke-RestMethod -Method Post -ContentType "application/json" -Header $header -Uri $url -Body (ConvertTo-Json $body)
```


author: Samir
body: Hi Andrew - It looks like you are passing the URL, and the Headers in the Close request. Could you try including a body in that request too, like you're doing in the Create request? Something similar to this:![Alert_API.png](https://community.atlassian.com/t5/image/serverpage/image-id/54997i7DB3CD866ACB04A8/image-size/large?v=v2&px=999 "Alert_API.png")

comments: author: andrews_j@subway.com
body: I tried, still same 422 Unprocessable Entity. I also looked at the variable list for the body in closing the alerts, but they do not match what is required for the alert creation:

user, source and note are the body options for close.

Here is an additional error when I try to navigate to the destination through a browser:

{"code":406,"message":"Could not find acceptable representation","took":0.0,"requestId":"618268d4-efd3-4c34-8722-168a56e936d6"}