curl https://api.portkey.ai/v1/threads/thread_abc123/runs/run_abc123/steps \
-H "x-portkey-api-key: $PORTKEY_API_KEY" \
-H "x-portkey-virtual-key: $PORTKEY_PROVIDER_VIRTUAL_KEY" \
-H "Content-Type: application/json" \
-H "OpenAI-Beta: assistants=v2"from portkey_ai import Portkey
client = Portkey(
api_key = "PORTKEY_API_KEY",
virtual_key = "PROVIDER_VIRTUAL_KEY"
)
run_steps = client.beta.threads.runs.steps.list(
thread_id="thread_abc123",
run_id="run_abc123"
)
print(run_steps)
import Portkey from 'portkey-ai';
const client = new Portkey({
apiKey: 'PORTKEY_API_KEY',
virtualKey: 'PROVIDER_VIRTUAL_KEY'
});
async function main() {
const runStep = await client.beta.threads.runs.steps.list(
"thread_abc123",
"run_abc123"
);
console.log(runStep);
}
main();
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps",
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-portkey-api-key: <api-key>",
"x-portkey-virtual-key: <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.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-portkey-api-key", "<api-key>")
req.Header.Add("x-portkey-virtual-key", "<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.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps")
.header("x-portkey-api-key", "<api-key>")
.header("x-portkey-virtual-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-portkey-api-key"] = '<api-key>'
request["x-portkey-virtual-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "<string>",
"object": "thread.run.step",
"created_at": 123,
"assistant_id": "<string>",
"thread_id": "<string>",
"run_id": "<string>",
"type": "message_creation",
"status": "in_progress",
"step_details": {
"type": "message_creation",
"message_creation": {
"message_id": "<string>"
}
},
"last_error": {
"code": "server_error",
"message": "<string>"
},
"expired_at": 123,
"cancelled_at": 123,
"failed_at": 123,
"completed_at": 123,
"metadata": {},
"usage": {
"completion_tokens": 123,
"prompt_tokens": 123,
"total_tokens": 123
}
}
],
"first_id": "step_abc123",
"last_id": "step_abc456",
"has_more": false
}List Run Steps
curl https://api.portkey.ai/v1/threads/thread_abc123/runs/run_abc123/steps \
-H "x-portkey-api-key: $PORTKEY_API_KEY" \
-H "x-portkey-virtual-key: $PORTKEY_PROVIDER_VIRTUAL_KEY" \
-H "Content-Type: application/json" \
-H "OpenAI-Beta: assistants=v2"from portkey_ai import Portkey
client = Portkey(
api_key = "PORTKEY_API_KEY",
virtual_key = "PROVIDER_VIRTUAL_KEY"
)
run_steps = client.beta.threads.runs.steps.list(
thread_id="thread_abc123",
run_id="run_abc123"
)
print(run_steps)
import Portkey from 'portkey-ai';
const client = new Portkey({
apiKey: 'PORTKEY_API_KEY',
virtualKey: 'PROVIDER_VIRTUAL_KEY'
});
async function main() {
const runStep = await client.beta.threads.runs.steps.list(
"thread_abc123",
"run_abc123"
);
console.log(runStep);
}
main();
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps",
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-portkey-api-key: <api-key>",
"x-portkey-virtual-key: <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.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-portkey-api-key", "<api-key>")
req.Header.Add("x-portkey-virtual-key", "<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.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps")
.header("x-portkey-api-key", "<api-key>")
.header("x-portkey-virtual-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portkey.ai/v1/threads/{thread_id}/runs/{run_id}/steps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-portkey-api-key"] = '<api-key>'
request["x-portkey-virtual-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "<string>",
"object": "thread.run.step",
"created_at": 123,
"assistant_id": "<string>",
"thread_id": "<string>",
"run_id": "<string>",
"type": "message_creation",
"status": "in_progress",
"step_details": {
"type": "message_creation",
"message_creation": {
"message_id": "<string>"
}
},
"last_error": {
"code": "server_error",
"message": "<string>"
},
"expired_at": 123,
"cancelled_at": 123,
"failed_at": 123,
"completed_at": 123,
"metadata": {},
"usage": {
"completion_tokens": 123,
"prompt_tokens": 123,
"total_tokens": 123
}
}
],
"first_id": "step_abc123",
"last_id": "step_abc456",
"has_more": false
}Portkey is now PRISMA AIRS AI Gateway. See it in action.
Authorizations
Path Parameters
The ID of the thread the run and run steps belong to.
The ID of the run the run steps belong to.
Query Parameters
A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20.
Sort order by the created_at timestamp of the objects. asc for ascending order and desc for descending order.
asc, desc A cursor for use in pagination. after is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list.
A cursor for use in pagination. before is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list.
Was this page helpful?

