Request
curl --location 'https://api.znapai.com/gemini/v1beta/models/gemini-3.1-flash-image-preview:generateContent' \
--header 'x-goog-api-key: $ZnapAI_API_KEY' \
--header 'Content-Type: application/json' \
--header 'spend-logs-metadata: {"user_id": "user-123", "project_id": "proj_abc", "env": "production"}' \
--data '{
"contents": [{
"parts": [
{"text": "Create a picture of an F35 flying"}
]
}]
}'
Response

{
"candidates": [
{
"content": {
"parts": [
{
"inlineData": {
"mimeType": "image/jpeg",
"data": "/9j/4AAQSkZJRgABAQEBLAEsAAD/+JpoOGMBqHGeRke60T7CXodaqWL92nEd0z8JH8Nvu24UMiCgWZSpq0jSaejI2QA3Y8NFdzPJtcHM4IqqhRR4WUV359PPHxmn/Vkn2yowWe3OXfCfXQhtSiN0hUk2KrjFmI5TyG18="
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0
}
],
"usageMetadata": {
"promptTokenCount": 9,
"candidatesTokenCount": 1586,
"totalTokenCount": 1595,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 9
}
],
"candidatesTokensDetails": [
{
"modality": "IMAGE",
"tokenCount": 1120
}
]
},
"modelVersion": "gemini-3.1-flash-image-preview",
"responseId": "Y3Lead_eL62Ag8UP-tun8QU"
}
Image generation using Gemini model with additional parameters and tool calling
Request
curl --location 'https://api.znapai.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent' \
--header 'x-goog-api-key: $ZnapAI_API_KEY' \
--header 'Content-Type: application/json' \
--header 'spend-logs-metadata: {"user_id": "user-123", "project_id": "proj_abc", "env": "production"}' \
--data '{
"contents": [{"parts": [{"text": "Visualize the current weather forecast for the next 5 days in San Francisco as a clean, modern weather chart. Add a visual on what I should wear each day"}]}],
"tools": [{"google_search": {}}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
}'
Response
.jpg?fit=max&auto=format&n=evv7zK2wdD9gNlYj&q=85&s=3b15547c7fff7fec33ded4c562a8b934)
{
"candidates": [
{
"content": {
"parts": [
{
"inlineData": {
"mimeType": "image/jpeg",
"data": "/9j/4AAQSkZJRgABAQEBLAEsAAD/P2oO6jEwp8Kpx9u64pFvqRiLEPY0UjEW2XmNMgbG4E8u0G9BMV+IN8Bo1UFcJ5dIUw=="
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0,
"groundingMetadata": {
"searchEntryPoint": {
"renderedContent": "<style>\n.container {\n align-items: center;\n border-radius: 8px;\n display: flex;\n font-family: Google Sans, Roboto, sans-serif;\n font-size: 14px;\n line-height: 20px;\n padding: 8px 12px;\n}\n.chip {\n display: inline-block;\n border: solid 1px;\n border-radius: 16px;\n min-width: 14px;\n padding: 5px 16px;\n text-align: center;\n user-select: none;\n margin: 0 8px;\n -webkit-tap-highlight-color: transparent;\n}\n.carousel {\n overflow: auto;\n scrollbar-width: none;\n white-space: nowrap;\n margin-right: -12px;\n}\n.headline {\n display: flex;\n margin-right: 4px;\n}\n.gradient-container {\n position: relative;\n}\n.gradient {\n position: absolute;\n transform: translate(3px, -9px);\n height: 36px;\n width: 9px;\n}\n@media (prefers-color-scheme: light) {\n .container {\n background-color: #fafafa;\n box-shadow: 0 0 0 1px #0000000f;\n }\n .headline-label {\n color: #1f1f1f;\n }\n .chip {\n background-color: #ffffff;\n border-color: #d2d2d2;\n color: #5e5e5e;\n text-decoration: none;\n }\n .chip:hover {\n background-color: #f2f2f2;\n }\n .chip:focus {\n background-color: #f2f2f2;\n }\n .chip:active {\n background-color: #d8d8d8;\n border-color: #b6b6b6;\n }\n .logo-dark {\n display: none;\n }\n .gradient {\n background: linear-gradient(90deg, #fafafa 15%, #fafafa00 100%);\n }\n}\n@media (prefers-color-scheme: dark) {\n .container {\n background-color: #1f1f1f;\n box-shadow: 0 0 0 1px #ffffff26;\n }\n .headline-label {\n color: #fff;\n }\n .chip {\n background-color: #2c2c2c;\n border-color: #3c4043;\n color: #fff;\n text-decoration: none;\n }\n .chip:hover {\n background-color: #353536;\n }\n .chip:focus {\n background-color: #353536;\n }\n .chip:active {\n background-color: #464849;\n border-color: #53575b;\n }\n .logo-light {\n display: none;\n }\n .gradient {\n background: linear-gradient(90deg, #1f1f1f 15%, #1f1f1f00 100%);\n }\n}\n</style>\n<div class=\"container\">\n <div class=\"headline\">\n <svg class=\"logo-light\" width=\"18\" height=\"18\" viewBox=\"9 9 35 35\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M42.8622 27.0064C42.8622 25.7839 42.7525 24.6084 42.5487 23.4799H26.3109V30.1568H35.5897C35.1821 32.3041 33.9596 34.1222 32.1258 35.3448V39.6864H37.7213C40.9814 36.677 42.8622 32.2571 42.8622 27.0064V27.0064Z\" fill=\"#4285F4\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 43.8555C30.9659 43.8555 34.8687 42.3195 37.7213 39.6863L32.1258 35.3447C30.5898 36.3792 28.6306 37.0061 26.3109 37.0061C21.8282 37.0061 18.0195 33.9811 16.6559 29.906H10.9194V34.3573C13.7563 39.9841 19.5712 43.8555 26.3109 43.8555V43.8555Z\" fill=\"#34A853\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.6559 29.8904C16.3111 28.8559 16.1074 27.7588 16.1074 26.6146C16.1074 25.4704 16.3111 24.3733 16.6559 23.3388V18.8875H10.9194C9.74388 21.2072 9.06992 23.8247 9.06992 26.6146C9.06992 29.4045 9.74388 32.022 10.9194 34.3417L15.3864 30.8621L16.6559 29.8904V29.8904Z\" fill=\"#FBBC05\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 16.2386C28.85 16.2386 31.107 17.1164 32.9095 18.8091L37.8466 13.8719C34.853 11.082 30.9659 9.3736 26.3109 9.3736C19.5712 9.3736 13.7563 13.245 10.9194 18.8875L16.6559 23.3388C18.0195 19.2636 21.8282 16.2386 26.3109 16.2386V16.2386Z\" fill=\"#EA4335\"/>\n </svg>\n <svg class=\"logo-dark\" width=\"18\" height=\"18\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"23\" fill=\"#FFF\" r=\"22\"/>\n <path d=\"M33.76 34.26c2.75-2.56 4.49-6.37 4.49-11.26 0-.89-.08-1.84-.29-3H24.01v5.99h8.03c-.4 2.02-1.5 3.56-3.07 4.56v.75l3.91 2.97h.88z\" fill=\"#4285F4\"/>\n <path d=\"M15.58 25.77A8.845 8.845 0 0 0 24 31.86c1.92 0 3.62-.46 4.97-1.31l4.79 3.71C31.14 36.7 27.65 38 24 38c-5.93 0-11.01-3.4-13.45-8.36l.17-1.01 4.06-2.85h.8z\" fill=\"#34A853\"/>\n <path d=\"M15.59 20.21a8.864 8.864 0 0 0 0 5.58l-5.03 3.86c-.98-2-1.53-4.25-1.53-6.64 0-2.39.55-4.64 1.53-6.64l1-.22 3.81 2.98.22 1.08z\" fill=\"#FBBC05\"/>\n <path d=\"M24 14.14c2.11 0 4.02.75 5.52 1.98l4.36-4.36C31.22 9.43 27.81 8 24 8c-5.93 0-11.01 3.4-13.45 8.36l5.03 3.85A8.86 8.86 0 0 1 24 14.14z\" fill=\"#EA4335\"/>\n </svg>\n <div class=\"gradient-container\"><div class=\"gradient\"></div></div>\n </div>\n <div class=\"carousel\">\n <a class=\"chip\" href=\"https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGkrDkG9ZR7my5zanm4LeSqVuepETltE0195EWrpa0VYTUd3Dmv6ZMU7L2Ia0jmI22G9_SmRTJojD_0V-uqX0tAD6zT7ZgmE3Y-8yEiHHe_x3jsYIex5wYxRe-ql6E77VsG5d13PLhVuUwWw3RYIVwbq3L2WLMmV_gi5It1DKjY8ymipr3FZL-_HQakk1REieoeq1XvOgsX8vCIB8k6KvOXrab0HHvuhtbNA7T7-PNatmo3aKOOp3Pey3G9r8k=\">San Francisco current weather and clothing recommendation</a>\n <a class=\"chip\" href=\"https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGUiDoNKNBOB-fErD6JlNE4m1ogQiqduj-bSvczVqDcw43rfLjIUcLexe3F_a6zQCiVgfSTdPaqSuyn1UgNo_aBw0HCyoM-tclofvFCqcJBAc_Qd9IH_GSG1KXpacjxgz92BIto_vkL67-IrTNSfbA_4HCMmRrYxDXJpKCGa_hr0WRH912gRo8ABkHvyxJsOdNTWd0ckUQwA6EFWiVKpjPhwPNsFuyfZz1T1s6BnOWjcKoY\">San Francisco 5-day weather forecast April 2026</a>\n </div>\n</div>\n"
},
"groundingChunks": [
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQH6YE7qjDm9XDBfg2DNU5jaK9nYfQ1W8k-vb-Xg0aqbkJn8LWkT5SaBDFlsreSeVrFVl4mjFlLjQuVZKrZZRpUPnSVBkabkENWLUc4srlaDzhr2-egP0K7y_sSQ67KWpbeplLE5WtFyVoL_tFRp5pUfUn4RBpgMllFp",
"title": "sftourismtips.com"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHwiuxln0bc0hLj-q141I8u3JbRDx9Vo8kYoFJP5svPXlRainK9o7uM5tRlZrDWM1uu3EeMOp_SY_uv7jSZ3KyISJnfMU0F4lzNDMgkHX4LL2MP9k7RNcyoiqfpOh9JEIpCAGjndtVH3xuDCG0wpcJbX7ti8OHbPE4L9mmnbUnJx-V97dSt",
"title": "accuweather.com"
}
},
{
"web": {
"uri": "https://www.google.com/search?q=weather+in+San Francisco, CA,+US",
"title": "google.com"
}
}
],
"webSearchQueries": [
"",
"San Francisco 5-day weather forecast April 2026",
"San Francisco current weather and clothing recommendation"
]
}
}
],
"usageMetadata": {
"promptTokenCount": 32,
"candidatesTokenCount": 1796,
"totalTokenCount": 1828,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 32
}
],
"candidatesTokensDetails": [
{
"modality": "IMAGE",
"tokenCount": 1120
}
]
},
"modelVersion": "gemini-3.1-flash-image-preview",
"responseId": "NHrNafm2FZaWg8UPo-TQ6Ak"
}
Parameters
header
An optional header used for spend logging metadata, containing JSON properties like
user_id, project_id, and env.array
required
The conversation history or input prompts as an array of content objects.
object
array
A list of tools the model may call. Supports
google_search for search grounding.object
Tool configuration for any
Tool specified in the request.Show toolConfig
Show toolConfig
object
Configuration for function calling behavior.
Show function_calling_config
Show function_calling_config
string
Controls how the model uses the provided functions. One of:
"AUTO"— model decides whether to call a function or respond"ANY"— model must call one of the provided functions"NONE"— model must not call any functions
array
Optional. Limits the model to only call functions from this list when
mode is "ANY".object
Configuration options for the generation.
Show generationConfig
Show generationConfig
number
Controls the randomness of the output.
number
The maximum cumulative probability of tokens to consider when sampling.
number
The maximum number of tokens to consider when sampling.
number
The maximum number of tokens to include in a candidate.
integer
Number of generated responses to return. Currently only
1 is supported for image generation.array
A list of sequences that will stop generation.
array
Allowed modalities of the output. Use
["TEXT", "IMAGE"] to request image output.array
Params to Avoid
| Param | Reason |
|---|---|
prompt, n, size, quality | OpenAI/Azure OpenAI parameters; sending these at the root level will fail schema validation. Use contents and generationConfig instead. |
response_format, output_format | Not supported by the Gemini API. Response format is determined by responseModalities. |
background, output_compression, style | OpenAI/Azure specific parameters; not supported by Gemini models. |
generationConfig.responseMimeType: "application/json" | Not supported when responseModalities includes "IMAGE". |
spend-logs-metadata | This metadata must be passed as an HTTP header, not in the JSON request body |
Ensure you do not mix OpenAI or Azure-specific parameters (such as
prompt, size, quality, or n) with Gemini’s request structure. Gemini expects prompt text inside the nested contents.parts object.