GoogleGemini 3 Pro API
Google’s top Gemini model — text, image, and video reasoning.
Params
Billed at this model’s published rate.
Result

Other models from Google
Same vendor, same API call — the differences are below.
| Model | Use case | Price | Resolution | Duration | Added |
|---|---|---|---|---|---|
| Gemini 4 Argon | Video → Text | from $0.10 / 1M cached in | — | — | Oct 2026 |
| Nano Banana 2.1 | Text → Image | from $0.034 / gen | 1K · 2K · 4K | — | Oct 2026 |
| Gemini 3.8 Flash Lite TTS | Text → Speech | from $12.00 / 1M output text tok | — | — | Sep 2026 |
| Gemini 3.8 Flash TTS | Text → Speech | from $18.00 / 1M output text tok | — | — | Sep 2026 |
| Gemini 2.5 Flash | Image → Text | from $0.33 / gen | — | — | Sep 2026 |
| Lyria 3.5 | Music | from $0.088 / gen | — | — | Sep 2026 |
| Gemini 3.8 Flash | Image → Text | from $2.20 / gen | — | — | Sep 2026 |
| Gemini Omni 1.1 Flash | Text → Video | from $0.0374 / sec | 360p · 720p · 1080p … | 3–10s | Aug 2026 |
Install the SDK
TypeScript targets Node 20+ and ships with types; Python needs 3.10+ and is async. Over REST there is nothing to install: call https://api.picsart.com from any HTTP client.
npm install @picsart/ai-sdkpip install picsart-ai-sdkAuthenticate
Send your Picsart API key as a bearer token. The SDK does it for you once the client is created.
import { createClient } from '@picsart/ai-sdk';
const ai = createClient({
apiKey: process.env.PICSART_API_KEY, // sent as: Authorization: Bearer <key>
apiUrl: 'https://api.picsart.com',
});import os
from picsart_ai_sdk import create_client
ai = create_client(
api_key=os.environ["PICSART_API_KEY"], # sent as: Authorization: Bearer <key>
api_url="https://api.picsart.com",
)Authorization: Bearer <PICSART_API_KEY>Make a request
Call the model by its id. Over REST, one endpoint serves every model: POST /workflows/v1/models/execute with the model id and its input in the body. The outer params is the envelope every workflow takes; the inner one is this model's input, with the same names generateText() / generate_text() takes.
import { createClient } from '@picsart/ai-sdk';
const ai = createClient({
apiKey: process.env.PICSART_API_KEY,
apiUrl: 'https://api.picsart.com',
});
const { text } = await ai.generateText('gemini-3-pro', {
prompt: "A serene mountain lake at golden hour, ultra detailed"
});
console.log(text);import asyncio
import os
from picsart_ai_sdk import create_client
async def main() -> None:
async with create_client(
api_key=os.environ["PICSART_API_KEY"],
api_url="https://api.picsart.com",
) as ai:
res = await ai.generate_text("gemini-3-pro", {
"prompt": "A serene mountain lake at golden hour, ultra detailed",
})
print(res.text)
asyncio.run(main())curl -X POST 'https://api.picsart.com/workflows/v1/models/execute' \
-H 'Authorization: Bearer $PICSART_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"params": {
"model": "gemini-3-pro",
"params": {
"prompt": "A serene mountain lake at golden hour, ultra detailed"
}
}
}'Parameters
4 parameters, the same for the SDK and for the inner params over REST. Required ones must be supplied; the rest fall back to their defaults.
| Parameter | Type | Required | Default | Details |
|---|---|---|---|---|
promptThe message or question for the model, in plain language. With input images, what to say about them. | text | yes | — | — |
imageUrlsImages for the model to look at, as URLs. | file (image[]) | no | — | — |
videoUrlThe video to work on, as a URL. | file (video) | no | — | — |
thinkingHow much the model reasons before answering. More is slower and uses more tokens. | enum | no | off | off, low, high |
Response
generateText() resolves to the generated text. Over REST the output is at response.result, inside the gateway's status envelope with the task id, its status and the amount charged.
{
"text": "…generated text…",
"model": "gemini-3-pro"
}{
"status": "success",
"response": {
"id": "task_abc123",
"status": "COMPLETED",
"result": {
"text": "…generated text…",
"model": "gemini-3-pro"
}
}
}Overview
Text models are also served through an LLM proxy that speaks each vendor's own API. Requests and responses — streaming included — pass through exactly as the vendor defines them, so code written against the vendor's API or official SDK works here by changing only the base URL and the API key.
The same model is also reachable through one OpenAI-compatible Chat Completions endpoint that serves Claude, GPT and Gemini alike — switch vendors by changing model. When you'd rather use Picsart's own parameter names, use the unified API.
Authenticate with your Picsart API key, as Authorization: Bearer <key> (see Authentication). Any vendor credentials you send are ignored.
Endpoints
All on https://api.picsart.com, with gemini-3-pro as the model id.
| API | Endpoint | Request body |
|---|---|---|
| Chat Completions (unified) | POST /llm-proxy/openai/v1/chat/completions | OpenAI reference |
| generateContent (native) | POST /llm-proxy/gemini/v1beta/models/{model}:generateContent | Vendor reference |
Chat Completions
One endpoint and one client for every text model, with the OpenAI SDK (pip install openai / npm install openai). The vendor is picked from model, so switching to another model means changing only that.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["PICSART_API_KEY"],
base_url="https://api.picsart.com/llm-proxy/openai/v1",
)
completion = client.chat.completions.create(
model="gemini-3-pro",
messages=[{"role": "user", "content": "Write a haiku about the ocean."}],
)
print(completion.choices[0].message.content)import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.PICSART_API_KEY,
baseURL: 'https://api.picsart.com/llm-proxy/openai/v1',
});
const completion = await client.chat.completions.create({
model: 'gemini-3-pro',
messages: [{ role: 'user', content: 'Write a haiku about the ocean.' }],
});
console.log(completion.choices[0].message.content);curl -X POST 'https://api.picsart.com/llm-proxy/openai/v1/chat/completions' \
-H "Authorization: Bearer $PICSART_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3-pro",
"messages": [
{
"role": "user",
"content": "Write a haiku about the ocean."
}
]
}'generateContent (native)
The vendor's own generateContent API with the Google Gen AI SDK (pip install google-genai / npm install @google/genai) — the request bodies are the vendor's own, unchanged.
import os
from google import genai
from google.genai import types
client = genai.Client(
api_key="unused", # the SDK requires one; your Picsart key goes in the header below
http_options=types.HttpOptions(
base_url="https://api.picsart.com/llm-proxy/gemini",
headers={"Authorization": f"Bearer {os.environ['PICSART_API_KEY']}"},
),
)
response = client.models.generate_content(
model="gemini-3-pro",
contents="Write a haiku about the ocean.",
)
print(response.text)import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({
apiKey: 'unused', // the SDK requires one; your Picsart key goes in the header below
httpOptions: {
baseUrl: 'https://api.picsart.com/llm-proxy/gemini',
headers: { Authorization: `Bearer ${process.env.PICSART_API_KEY}` },
},
});
const response = await ai.models.generateContent({
model: 'gemini-3-pro',
contents: 'Write a haiku about the ocean.',
});
console.log(response.text);curl -X POST 'https://api.picsart.com/llm-proxy/gemini/v1beta/models/gemini-3-pro:generateContent' \
-H "Authorization: Bearer $PICSART_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Write a haiku about the ocean."
}
]
}
]
}'Rates
What this model costs per generation, in USD. Every row is an exact rate — the columns are the settings that change it.
| Rate |
|---|
| $12.00 / generation |