Update an observability issue (deprecated)
curl --request PUT \
--url https://api.getbluejay.ai/v1/issues/{issue_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <x-api-key>' \
--data '
{
"status": "<string>",
"priority": "<string>",
"assignee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"due_date": "2023-12-25"
}
'import requests
url = "https://api.getbluejay.ai/v1/issues/{issue_id}"
payload = {
"status": "<string>",
"priority": "<string>",
"assignee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"due_date": "2023-12-25"
}
headers = {
"X-API-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
status: '<string>',
priority: '<string>',
assignee_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
due_date: '2023-12-25'
})
};
fetch('https://api.getbluejay.ai/v1/issues/{issue_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getbluejay.ai/v1/issues/{issue_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'status' => '<string>',
'priority' => '<string>',
'assignee_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'due_date' => '2023-12-25'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getbluejay.ai/v1/issues/{issue_id}"
payload := strings.NewReader("{\n \"status\": \"<string>\",\n \"priority\": \"<string>\",\n \"assignee_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"due_date\": \"2023-12-25\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.getbluejay.ai/v1/issues/{issue_id}")
.header("X-API-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"<string>\",\n \"priority\": \"<string>\",\n \"assignee_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"due_date\": \"2023-12-25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/issues/{issue_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"<string>\",\n \"priority\": \"<string>\",\n \"assignee_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"due_date\": \"2023-12-25\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"title": "<string>",
"description": "<string>",
"status": "<string>",
"error_source": "<string>",
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"priority": "<string>",
"assignee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"due_date": "2023-12-25",
"error_code": "<string>",
"error_signature": "<string>",
"cluster_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Issues
Update Issue
deprecated
PUT
/
v1
/
issues
/
{issue_id}
Update an observability issue (deprecated)
curl --request PUT \
--url https://api.getbluejay.ai/v1/issues/{issue_id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <x-api-key>' \
--data '
{
"status": "<string>",
"priority": "<string>",
"assignee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"due_date": "2023-12-25"
}
'import requests
url = "https://api.getbluejay.ai/v1/issues/{issue_id}"
payload = {
"status": "<string>",
"priority": "<string>",
"assignee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"due_date": "2023-12-25"
}
headers = {
"X-API-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
status: '<string>',
priority: '<string>',
assignee_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
due_date: '2023-12-25'
})
};
fetch('https://api.getbluejay.ai/v1/issues/{issue_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getbluejay.ai/v1/issues/{issue_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'status' => '<string>',
'priority' => '<string>',
'assignee_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'due_date' => '2023-12-25'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getbluejay.ai/v1/issues/{issue_id}"
payload := strings.NewReader("{\n \"status\": \"<string>\",\n \"priority\": \"<string>\",\n \"assignee_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"due_date\": \"2023-12-25\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.getbluejay.ai/v1/issues/{issue_id}")
.header("X-API-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"<string>\",\n \"priority\": \"<string>\",\n \"assignee_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"due_date\": \"2023-12-25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/issues/{issue_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"<string>\",\n \"priority\": \"<string>\",\n \"assignee_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"due_date\": \"2023-12-25\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"title": "<string>",
"description": "<string>",
"status": "<string>",
"error_source": "<string>",
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"priority": "<string>",
"assignee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"due_date": "2023-12-25",
"error_code": "<string>",
"error_signature": "<string>",
"cluster_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Integration Prompt for AI Agents
# Bluejay — Testing & Monitoring Platform for Conversational AI Agents
You are a senior backend engineer integrating the Bluejay API. Think step-by-step: first understand the endpoint, then plan the integration, then implement with minimal changes.
## Update Issue — PUT /v1/issues/{issue_id}
> **What this endpoint does:** set an issue's status, priority, assignee or due date.
**Endpoint:** PUT `https://api.getbluejay.ai/v1/issues/{issue_id}`
**Auth:** `X-API-Key` header
### Required Parameters
| Name | Type | Description |
|------|------|-------------|
| issue_id | string (uuid) | The issue to update. |
| X-API-Key | string | API key required to authenticate requests. |
Every body field is optional. Only the fields you send are changed.
### Example
**Resolve an issue and set its owner:**
```python
import requests
def resolve_issue(issue_id: str, assignee_id: str, api_key: str) -> dict:
url = f"https://api.getbluejay.ai/v1/issues/{issue_id}"
headers = {"X-API-Key": api_key}
body = {"status": "resolved", "assignee_id": assignee_id}
response = requests.put(url, headers=headers, json=body)
response.raise_for_status()
return response.json()
```
**Unset a field:**
```python
requests.put(url, headers=headers, json={"priority": None, "due_date": None})
```
### Constraints
- Minimal changes — only add/change files needed for this integration.
- Match existing codebase patterns (naming, file structure, error handling).
- Include error handling for 400: Validation Error and 404: Issue not found.
### Integration Checklist
Before writing code, verify:
1. Which module/service owns this API domain in the codebase?
2. What HTTP client and error-handling patterns does the project use?
3. Are there existing types/interfaces to extend?
Then implement the integration, export it, and confirm it compiles/passes lint.
status, priority, assignee_id or due_date. Every field is optional, so send only what you want to change.
Send a field as null to unset it. A field you leave out is untouched:
{ "status": "open", "assignee_id": null }
status is one of open, in_progress, resolved or ignored. priority is one of low, medium, high or urgent, and stays empty until someone sets it. assignee_id must be a user in your organization. due_date is YYYY-MM-DD.
An issue’s title, and the calls attached to it, are produced by Bluejay and cannot be edited.Path Parameters
Body
application/json
Response
Successful Response
non_deterministic if clustered from similar failures, deterministic if recognised from a known error
open, in_progress, resolved or ignored
where the failure was recorded, e.g. tool_call
low, medium, high or urgent. Null until someone sets it.
null when nobody has set one
deterministic error code when known
hash or text that identifies this failure
cluster this issue was minted from