curl --request GET \
--url https://api.deapi.ai/api/v2/models \
--header 'Accept: <accept>' \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.deapi.ai/api/v2/models"
headers = {
"Accept": "<accept>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Accept: '<accept>', Authorization: 'Bearer <token>'}};
fetch('https://api.deapi.ai/api/v2/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.deapi.ai/api/v2/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 => [
"Accept: <accept>",
"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.deapi.ai/api/v2/models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "<accept>")
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.deapi.ai/api/v2/models")
.header("Accept", "<accept>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.deapi.ai/api/v2/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = '<accept>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"name": "Flux.1 Schnell",
"slug": "Flux1schnell",
"inference_types": [
"txt2img",
"img2img"
],
"tags": [
"test"
],
"status": "test_model",
"info": {
"limits": {
"min_width": 256,
"max_width": 2048,
"min_height": 256,
"max_height": 2048,
"min_steps": 1,
"max_steps": 10,
"resolution_step": 128
},
"features": {
"supports_steps": true,
"supports_guidance": false,
"supports_negative_prompt": true
},
"defaults": {
"width": 768,
"height": 768,
"steps": 4,
"negative_prompt": "Negative prompt"
}
},
"loras": [
{
"display_name": "<string>",
"name": "<string>"
}
],
"languages": [
{
"name": "<string>",
"slug": "<string>",
"voices": [
{
"name": "<string>",
"slug": "<string>",
"gender": "<string>"
}
]
}
]
}
],
"links": {
"first": "https://api.deapi.ai/api/v2/models?page=1",
"last": "https://api.deapi.ai/api/v2/models?page=3",
"prev": null,
"next": "https://api.deapi.ai/api/v2/models?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 2,
"links": [
{
"url": "<string>",
"label": "1",
"page": 1,
"active": true
}
],
"path": "https://api.deapi.ai/api/v2/models",
"per_page": 25,
"to": 25,
"total": 30
}
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"message": "Too Many Attempts."
}Model Selection
Lists the inference models available to your account. The list is scoped to you: it contains only enabled models that are either public or explicitly granted to your account, and it omits models that require a higher plan tier than your account has (those return 422 on generation and pricing). A model explicitly granted to your account is always listed, whatever tier it requires.
curl --request GET \
--url https://api.deapi.ai/api/v2/models \
--header 'Accept: <accept>' \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.deapi.ai/api/v2/models"
headers = {
"Accept": "<accept>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Accept: '<accept>', Authorization: 'Bearer <token>'}};
fetch('https://api.deapi.ai/api/v2/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.deapi.ai/api/v2/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 => [
"Accept: <accept>",
"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.deapi.ai/api/v2/models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "<accept>")
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.deapi.ai/api/v2/models")
.header("Accept", "<accept>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.deapi.ai/api/v2/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = '<accept>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"name": "Flux.1 Schnell",
"slug": "Flux1schnell",
"inference_types": [
"txt2img",
"img2img"
],
"tags": [
"test"
],
"status": "test_model",
"info": {
"limits": {
"min_width": 256,
"max_width": 2048,
"min_height": 256,
"max_height": 2048,
"min_steps": 1,
"max_steps": 10,
"resolution_step": 128
},
"features": {
"supports_steps": true,
"supports_guidance": false,
"supports_negative_prompt": true
},
"defaults": {
"width": 768,
"height": 768,
"steps": 4,
"negative_prompt": "Negative prompt"
}
},
"loras": [
{
"display_name": "<string>",
"name": "<string>"
}
],
"languages": [
{
"name": "<string>",
"slug": "<string>",
"voices": [
{
"name": "<string>",
"slug": "<string>",
"gender": "<string>"
}
]
}
]
}
],
"links": {
"first": "https://api.deapi.ai/api/v2/models?page=1",
"last": "https://api.deapi.ai/api/v2/models?page=3",
"prev": null,
"next": "https://api.deapi.ai/api/v2/models?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 2,
"links": [
{
"url": "<string>",
"label": "1",
"page": 1,
"active": true
}
],
"path": "https://api.deapi.ai/api/v2/models",
"per_page": 25,
"to": 25,
"total": 30
}
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"message": "Too Many Attempts."
}slug, supported inference_types, per-model limits (resolution, duration, steps), and feature flags (e.g., LoRA support).
GET /api/v2/models?limit=50 once at session start, cache the result, and use the returned slug values in your generation/edit requests. Filter with &filter[inference_types]=txt2img to narrow results by task.limit=50 and check meta.last_page. The page size defaults to 50, and a value above the maximum is clamped down, not rejected. limit=50 covers the current catalogue in one call, and meta.last_page reading 1 is what confirms the data array is complete; nothing else in the response distinguishes a partial page from a full one.Authorizations
Sanctum personal access token, sent as Authorization: Bearer <token>. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.
Headers
application/json Query Parameters
Items per page. per_page is accepted as an alias; limit wins if both are sent. Values above the maximum are clamped down, not rejected.
1 <= x <= 100Alias of limit, kept for backward compatibility. Ignored when limit is also present.
1 <= x <= 100x >= 1Sort field. Prefix with - for descending. -created_at is newest first, created_at is oldest first. Defaults to -created_at — newest models first, tie-broken by id.
id, -id, name, -name, created_at, -created_at, updated_at, -updated_at Comma-separated inference types to filter by. Values are the type slugs returned in each model's inference_types. Example: txt2img,vid-upscale
txt2img, txt2audio, txt2music, txt2video, txt2embedding, img2img, img2txt, img2video, img-upscale, img-rmbg, audio2text, audio2video, audio_file2text, video2text, video_file2text, video-replace, vid-upscale, vid-rmbg Comma-separated tags to filter by. Tags are controlled labels set per model; read the tags field of any model in this response to see which are in use. Example: new,experimental
Response
List of available models.
List of available models
Show child attributes
Show child attributes
Absolute URLs for navigating the result set. prev is null on the first page and next is null on the last.
Show child attributes
Show child attributes
Pagination counters. Note per_page here is the page size that was APPLIED — it echoes the limit query parameter, which is the one you send.
Show child attributes
Show child attributes
Was this page helpful?