curl --request GET \
--url https://api.primeintellect.ai/api/v1/training/available-fft-models \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.primeintellect.ai/api/v1/training/available-fft-models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.primeintellect.ai/api/v1/training/available-fft-models', 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.primeintellect.ai/api/v1/training/available-fft-models",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.primeintellect.ai/api/v1/training/available-fft-models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.primeintellect.ai/api/v1/training/available-fft-models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.primeintellect.ai/api/v1/training/available-fft-models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"models": [
{
"name": "<string>",
"clusters": [
{
"clusterId": "<string>",
"clusterName": "<string>",
"gpuType": "<string>",
"cacheSyncedAt": "2023-11-07T05:31:56Z"
}
]
}
],
"onDemand": [
{
"gpuType": "<string>",
"pricePerGpuHour": 123,
"availableNow": true,
"discountLabel": "<string>",
"isBeta": true
}
],
"onDemandBetaAccess": false
}{
"errors": [
{
"param": "<string>",
"details": "<string>"
}
]
}Get Available Fft Models
Models pre-cached on the caller’s eligible PrimeClusters for FFT dispatch.
Same principal collapse as the dispatch picker (team wins when present, otherwise personal) and the same cluster filter (uncordoned
- heartbeat fresh + non-zero ClusterAllocation) so what surfaces here is what dispatch would actually land on. Only PRESENT-cache clusters contribute — ABSENT / ERROR would 400 the dispatch and NULL (unprobed) hasn’t reported a manifest yet.
Each model carries the list of clusters it’s warm on with gpu_type
cache_synced_atso callers can pin the follow-up dispatch to a specific GPU family without hitting the “picker landed on a cluster that has the GPU but not this model” reject path.
curl --request GET \
--url https://api.primeintellect.ai/api/v1/training/available-fft-models \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.primeintellect.ai/api/v1/training/available-fft-models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.primeintellect.ai/api/v1/training/available-fft-models', 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.primeintellect.ai/api/v1/training/available-fft-models",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.primeintellect.ai/api/v1/training/available-fft-models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.primeintellect.ai/api/v1/training/available-fft-models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.primeintellect.ai/api/v1/training/available-fft-models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"models": [
{
"name": "<string>",
"clusters": [
{
"clusterId": "<string>",
"clusterName": "<string>",
"gpuType": "<string>",
"cacheSyncedAt": "2023-11-07T05:31:56Z"
}
]
}
],
"onDemand": [
{
"gpuType": "<string>",
"pricePerGpuHour": 123,
"availableNow": true,
"discountLabel": "<string>",
"isBeta": true
}
],
"onDemandBetaAccess": false
}{
"errors": [
{
"param": "<string>",
"details": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Optional team ID. When set, returns FFT models cached on the team's eligible PrimeClusters. When omitted, uses the caller's personal allocations.
Response
Successful Response
What the caller can dispatch to, across both capacity paths.
models is reserved capacity: repos pre-cached on clusters the caller
holds a ClusterAllocation on, sorted by model name. Same principal
collapse as the dispatch picker (team wins when present, otherwise
personal). Only PRESENT-cache clusters contribute — ABSENT / ERROR
clusters would 400 the dispatch, and NULL (unprobed) clusters haven't
reported a manifest yet.
onDemand is the shared pool, which needs no allocation and bills per
GPU-hour. It is populated regardless of whether the caller has any
reserved capacity, because a caller with none still needs to see what
they can buy — an empty response was previously the only signal, and
it read as "nothing is running".
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Whether this account is enrolled in the on-demand beta. False means onDemand is empty because of enrolment, not because capacity is missing — it lets a client say 'ask for access' instead of 'nothing is running'. Carries no rates, so a non-enrolled account still learns nothing about pricing.
Was this page helpful?