curl --request POST \
--url https://api.altrum.ai/genai/v1beta/models/{model}:generateContent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Say hello."
}
]
}
]
}
'import requests
url = "https://api.altrum.ai/genai/v1beta/models/{model}:generateContent"
payload = { "contents": [
{
"role": "user",
"parts": [{ "text": "Say hello." }]
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({contents: [{role: 'user', parts: [{text: 'Say hello.'}]}]})
};
fetch('https://api.altrum.ai/genai/v1beta/models/{model}:generateContent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "Hello."
}
]
},
"finishReason": "STOP"
}
]
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}Generate content
Sends a request in the Gemini format. Any supported provider can answer: the reply comes back in the Gemini format.
curl --request POST \
--url https://api.altrum.ai/genai/v1beta/models/{model}:generateContent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Say hello."
}
]
}
]
}
'import requests
url = "https://api.altrum.ai/genai/v1beta/models/{model}:generateContent"
payload = { "contents": [
{
"role": "user",
"parts": [{ "text": "Say hello." }]
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({contents: [{role: 'user', parts: [{text: 'Say hello.'}]}]})
};
fetch('https://api.altrum.ai/genai/v1beta/models/{model}:generateContent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "Hello."
}
]
},
"finishReason": "STOP"
}
]
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded: ...",
"status": "rate_limited"
}
}Authorizations
Your virtual key, sk-alt-.... What every OpenAI and Anthropic SDK sends.
Headers
Your own reference for the request. Altrum uses it instead of making one, and returns it.
Use a prompt saved in your AI Gateway prompts. Its messages go before yours.
The prompt version to use, such as 2. Without it, the latest version.
Keeps this request's cached answers apart from others, for example per customer.
Keeps the answer for less time than your setting: 30s, 5m, 1h or a number of seconds.
Asks for a closer match than your setting, from 0 to 1.
direct matches word for word only, semantic by meaning only.
direct, semantic true serves from the cache when it can, but does not store this answer.
true true keeps this request's prompt and reply out of the request log, even when your organization keeps content.
true true sends your own provider key in Authorization, x-api-key or x-goog-api-key, with your virtual key in x-alt-vk. Only when your organization allows it.
true Path Parameters
The model, such as gemini-3.5-flash or gemini/gemini-3.5-flash.
Body
A Gemini generateContent request.
Response
The answer.
The response is of type object.