curl --request POST \
--url https://api.zerogpu.ai/v1/systemone \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"model": "zlm-v2-iab-classify-edge-enriched",
"state": "Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.",
"questions": {
"category": {
"type": "choice",
"instructions": "Which category best describes this content?",
"criteria": {
"technology": "Technology and computing",
"finance": "Personal finance",
"travel": "Travel"
}
},
"brand_safe": {
"type": "noul",
"instructions": "Is this content suitable for brand advertising?"
},
"commercial_intent": {
"type": "score",
"instructions": "How strong is the commercial intent?",
"criteria": [
"None",
"Low",
"Medium",
"High"
]
}
}
}
'import requests
url = "https://api.zerogpu.ai/v1/systemone"
payload = {
"model": "zlm-v2-iab-classify-edge-enriched",
"state": "Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.",
"questions": {
"category": {
"type": "choice",
"instructions": "Which category best describes this content?",
"criteria": {
"technology": "Technology and computing",
"finance": "Personal finance",
"travel": "Travel"
}
},
"brand_safe": {
"type": "noul",
"instructions": "Is this content suitable for brand advertising?"
},
"commercial_intent": {
"type": "score",
"instructions": "How strong is the commercial intent?",
"criteria": ["None", "Low", "Medium", "High"]
}
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'zlm-v2-iab-classify-edge-enriched',
state: 'Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.',
questions: {
category: {
type: 'choice',
instructions: 'Which category best describes this content?',
criteria: {
technology: 'Technology and computing',
finance: 'Personal finance',
travel: 'Travel'
}
},
brand_safe: {type: 'noul', instructions: 'Is this content suitable for brand advertising?'},
commercial_intent: {
type: 'score',
instructions: 'How strong is the commercial intent?',
criteria: ['None', 'Low', 'Medium', 'High']
}
}
})
};
fetch('https://api.zerogpu.ai/v1/systemone', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));falsepackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.zerogpu.ai/v1/systemone"
payload := strings.NewReader("{\n \"model\": \"zlm-v2-iab-classify-edge-enriched\",\n \"state\": \"Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.\",\n \"questions\": {\n \"category\": {\n \"type\": \"choice\",\n \"instructions\": \"Which category best describes this content?\",\n \"criteria\": {\n \"technology\": \"Technology and computing\",\n \"finance\": \"Personal finance\",\n \"travel\": \"Travel\"\n }\n },\n \"brand_safe\": {\n \"type\": \"noul\",\n \"instructions\": \"Is this content suitable for brand advertising?\"\n },\n \"commercial_intent\": {\n \"type\": \"score\",\n \"instructions\": \"How strong is the commercial intent?\",\n \"criteria\": [\n \"None\",\n \"Low\",\n \"Medium\",\n \"High\"\n ]\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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))
}require 'uri'
require 'net/http'
url = URI("https://api.zerogpu.ai/v1/systemone")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"zlm-v2-iab-classify-edge-enriched\",\n \"state\": \"Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.\",\n \"questions\": {\n \"category\": {\n \"type\": \"choice\",\n \"instructions\": \"Which category best describes this content?\",\n \"criteria\": {\n \"technology\": \"Technology and computing\",\n \"finance\": \"Personal finance\",\n \"travel\": \"Travel\"\n }\n },\n \"brand_safe\": {\n \"type\": \"noul\",\n \"instructions\": \"Is this content suitable for brand advertising?\"\n },\n \"commercial_intent\": {\n \"type\": \"score\",\n \"instructions\": \"How strong is the commercial intent?\",\n \"criteria\": [\n \"None\",\n \"Low\",\n \"Medium\",\n \"High\"\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"model": "zlm-v2-iab-classify-edge-enriched",
"answers": {
"category": {
"type": "choice",
"choice": "technology",
"confidence": 0.95,
"probabilities": {
"technology": 0.95,
"finance": 0.03,
"travel": 0.02
}
},
"brand_safe": {
"type": "noul",
"noul": 0.98
},
"commercial_intent": {
"type": "score",
"score": 2.64,
"confidence": 0.7,
"legend": {
"0": "None",
"1": "Low",
"2": "Medium",
"3": "High"
},
"probabilities": {
"0": 0.01,
"1": 0.04,
"2": 0.25,
"3": 0.7
}
}
},
"usage": {
"input_tokens": 120,
"output_tokens": 0,
"total_tokens": 120
}
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}System One
Answer yes/no, multiple-choice and rubric questions about any content with the ZLM classifiers.
curl --request POST \
--url https://api.zerogpu.ai/v1/systemone \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"model": "zlm-v2-iab-classify-edge-enriched",
"state": "Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.",
"questions": {
"category": {
"type": "choice",
"instructions": "Which category best describes this content?",
"criteria": {
"technology": "Technology and computing",
"finance": "Personal finance",
"travel": "Travel"
}
},
"brand_safe": {
"type": "noul",
"instructions": "Is this content suitable for brand advertising?"
},
"commercial_intent": {
"type": "score",
"instructions": "How strong is the commercial intent?",
"criteria": [
"None",
"Low",
"Medium",
"High"
]
}
}
}
'import requests
url = "https://api.zerogpu.ai/v1/systemone"
payload = {
"model": "zlm-v2-iab-classify-edge-enriched",
"state": "Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.",
"questions": {
"category": {
"type": "choice",
"instructions": "Which category best describes this content?",
"criteria": {
"technology": "Technology and computing",
"finance": "Personal finance",
"travel": "Travel"
}
},
"brand_safe": {
"type": "noul",
"instructions": "Is this content suitable for brand advertising?"
},
"commercial_intent": {
"type": "score",
"instructions": "How strong is the commercial intent?",
"criteria": ["None", "Low", "Medium", "High"]
}
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'zlm-v2-iab-classify-edge-enriched',
state: 'Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.',
questions: {
category: {
type: 'choice',
instructions: 'Which category best describes this content?',
criteria: {
technology: 'Technology and computing',
finance: 'Personal finance',
travel: 'Travel'
}
},
brand_safe: {type: 'noul', instructions: 'Is this content suitable for brand advertising?'},
commercial_intent: {
type: 'score',
instructions: 'How strong is the commercial intent?',
criteria: ['None', 'Low', 'Medium', 'High']
}
}
})
};
fetch('https://api.zerogpu.ai/v1/systemone', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));falsepackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.zerogpu.ai/v1/systemone"
payload := strings.NewReader("{\n \"model\": \"zlm-v2-iab-classify-edge-enriched\",\n \"state\": \"Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.\",\n \"questions\": {\n \"category\": {\n \"type\": \"choice\",\n \"instructions\": \"Which category best describes this content?\",\n \"criteria\": {\n \"technology\": \"Technology and computing\",\n \"finance\": \"Personal finance\",\n \"travel\": \"Travel\"\n }\n },\n \"brand_safe\": {\n \"type\": \"noul\",\n \"instructions\": \"Is this content suitable for brand advertising?\"\n },\n \"commercial_intent\": {\n \"type\": \"score\",\n \"instructions\": \"How strong is the commercial intent?\",\n \"criteria\": [\n \"None\",\n \"Low\",\n \"Medium\",\n \"High\"\n ]\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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))
}require 'uri'
require 'net/http'
url = URI("https://api.zerogpu.ai/v1/systemone")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"zlm-v2-iab-classify-edge-enriched\",\n \"state\": \"Apple announced a new MacBook powered by its latest M-series processor. Preorders open today.\",\n \"questions\": {\n \"category\": {\n \"type\": \"choice\",\n \"instructions\": \"Which category best describes this content?\",\n \"criteria\": {\n \"technology\": \"Technology and computing\",\n \"finance\": \"Personal finance\",\n \"travel\": \"Travel\"\n }\n },\n \"brand_safe\": {\n \"type\": \"noul\",\n \"instructions\": \"Is this content suitable for brand advertising?\"\n },\n \"commercial_intent\": {\n \"type\": \"score\",\n \"instructions\": \"How strong is the commercial intent?\",\n \"criteria\": [\n \"None\",\n \"Low\",\n \"Medium\",\n \"High\"\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"model": "zlm-v2-iab-classify-edge-enriched",
"answers": {
"category": {
"type": "choice",
"choice": "technology",
"confidence": 0.95,
"probabilities": {
"technology": 0.95,
"finance": 0.03,
"travel": 0.02
}
},
"brand_safe": {
"type": "noul",
"noul": 0.98
},
"commercial_intent": {
"type": "score",
"score": 2.64,
"confidence": 0.7,
"legend": {
"0": "None",
"1": "Low",
"2": "Medium",
"3": "High"
},
"probabilities": {
"0": 0.01,
"1": 0.04,
"2": 0.25,
"3": 0.7
}
}
},
"usage": {
"input_tokens": 120,
"output_tokens": 0,
"total_tokens": 120
}
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"error": {
"code": "insufficient_quota",
"message": "You have insufficient quota to complete this request."
}
}state and ask up to 16 named questions about it in one call. Each answer comes back under the question’s name, with calibrated probabilities. The request and response follow the TypeSafe System One decision schema, so an existing System One client works by changing the base URL and API key.
System One is available on four models, in addition to their existing endpoints:
| Model | Also served on | Good for |
|---|---|---|
zlm-v1-moderation-edge | /moderations | Is this unsafe? Which moderation category applies? How severe is it? |
zlm-v1-iab-classify-edge | /chat/completions, /responses | Which IAB category matches? Does it belong to category X? How strongly? |
zlm-v1-iab-domain-classifier | /chat/completions, /responses | The same questions about a domain. state must be a URL or domain. |
zlm-v2-iab-classify-edge-enriched | /chat/completions, /responses | Mixed category, brand-safety and commercial-intent questions in one request. |
Question types
noul- a yes/no decision. The answer’snoulis the probability of yes: near 1 favors yes, near 0 favors no. Optionalcriteria.trueandcriteria.falsedescribe what counts as each.choice- pick one option.criteriamaps each choice name to a description. The answer gives thechoice, itsconfidenceand theprobabilitiesof every option.score- rate against an ordered rubric.criteriais a list of levels, scored from 0. The answer’sscoreis the probability-weighted level and may fall between integers;legendmaps each level number back to its text.
How answers are produced
Each model scores the content against its own labels: the 13 OpenAI moderation categories plus an overall unsafe score, or the IAB Content 2.2 and Audience 1.1 taxonomies. A question whose criteria name those labels is answered directly from the model’s scores. A category name covers its whole branch, soTechnology and computing also counts Laptops. Brand-safety questions on the IAB models read the Sensitive Topics branch, and commercial-intent questions read the Purchase Intent audiences.
A question whose criteria are not among the model’s labels is answered by zero-shot classification instead. You can mix both kinds in one request.
Limits and billing
- Up to 16 questions per request, and up to 32 criteria per question.
statemay be a string, an object or an array. An object or array is read as its JSON.- You are billed for input tokens only (the state plus the questions);
output_tokensis always 0. - Request validation errors return
422with System One’s{ "detail": [{ "loc", "msg", "type" }] }body. Other errors use the standard error format.
Authorizations
Your ZeroGPU API key. Create one in the dashboard under API keys. Send it on every request.
Body
A model that supports System One: zlm-v1-moderation-edge, zlm-v1-iab-classify-edge, zlm-v1-iab-domain-classifier or zlm-v2-iab-classify-edge-enriched.
"zlm-v1-iab-classify-edge"
The content every question refers to: a string, object or array. An object or array is read as its JSON. For zlm-v1-iab-domain-classifier it must be a URL or domain.
Named questions (up to 16). Keys are names you choose; each answer comes back under the same key.
Hide child attributes
Hide child attributes
A yes/no (true/false) decision.
- Option 1
- Option 2
- Option 3
Hide child attributes
Hide child attributes
"noul"The statement or question to evaluate.
Optional definitions of what counts as true and false.
Response
Success
The model that answered.
Keyed by your question names, in request order.

