List Agent Versions
curl --request GET \
--url https://api.getbluejay.ai/v1/agents/{agent_id}/versions \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://api.getbluejay.ai/v1/agents/{agent_id}/versions"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://api.getbluejay.ai/v1/agents/{agent_id}/versions', 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/agents/{agent_id}/versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.getbluejay.ai/v1/agents/{agent_id}/versions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.getbluejay.ai/v1/agents/{agent_id}/versions")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/agents/{agent_id}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body[
{
"prompt_text": "<string>",
"version": 123,
"agent_id": 123,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"commit_message": "<string>",
"labels": [
"<string>"
],
"metadata": {}
}
]{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Agent Versions
List Agent Versions
List agent versions with optional filters (label, version).
GET
/
v1
/
agents
/
{agent_id}
/
versions
List Agent Versions
curl --request GET \
--url https://api.getbluejay.ai/v1/agents/{agent_id}/versions \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://api.getbluejay.ai/v1/agents/{agent_id}/versions"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://api.getbluejay.ai/v1/agents/{agent_id}/versions', 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/agents/{agent_id}/versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.getbluejay.ai/v1/agents/{agent_id}/versions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.getbluejay.ai/v1/agents/{agent_id}/versions")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getbluejay.ai/v1/agents/{agent_id}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body[
{
"prompt_text": "<string>",
"version": 123,
"agent_id": 123,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"commit_message": "<string>",
"labels": [
"<string>"
],
"metadata": {}
}
]{
"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.
## List Agent Versions — GET /v1/agents/{agent_id}/versions
> **What this endpoint does:** list agent versions with optional filters (label, version).
**Endpoint:** GET `https://api.getbluejay.ai/v1/agents/{agent_id}/versions`
**Auth:** `X-API-Key` header
### Required Parameters
| Name | Type | Description |
|------|------|-------------|
| agent_id | integer | |
| X-API-Key | string | API key required to authenticate requests. |
Review the full parameter list at https://docs.getbluejay.ai/api-reference/endpoint/list-prompt-versions and include any optional parameters (e.g., `label`, `version`, `limit`) that serve your integration's use case and align with Bluejay's testing and monitoring capabilities.
### Example
**Simple GET:**
```python
import requests
def list_prompt_versions(agent_id: int, api_key: str) -> dict:
url = f"https://api.getbluejay.ai/v1/agents/{agent_id}/versions"
headers = {"X-API-Key": api_key}
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
```
### Constraints
- Minimal changes — only add/change files needed for this integration.
- Match existing codebase patterns (naming, file structure, error handling).
- Include error handling for 422: Validation Error.
### 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.
New:
GET /v1/agents/{agent_id}/versionsDeprecated: GET /v1/agents/{agent_id}/prompts/versions. Old path, still works.Path Parameters
Response
Successful Response
the prompt content
the version number of the prompt
id of the agent that owns this prompt
the id of the prompt
labels associated with the prompt
arbitrary JSON metadata