Google: Gemini 3.5 Flash (batch)
Gemini 3.5 Flash combines multimodal understanding with reasoning for coding and multi-step agent tasks. It accepts text, images, video, audio and PDF and produces text, with structured outputs, tools and a 1,048,576-token input limit in its documented profile.
About the model
This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.
Gemini 3.5 Flash is Google’s multimodal Flash model profile for sustained coding and agentic work. Its documented inputs are text, images, video, audio and PDF, with text output. The model’s task focus includes iterative coding, exploration of alternate solutions and longer sequences of instructions and tool use. The 3.5 edition provides documented thinking controls, multimodal inputs and tool workflows.
A coding task can combine a written requirement, relevant source files and a screenshot of the intended result. Supply the observed behaviour, the expected behaviour and the constraints that must stay intact. An illustrative brief is: “Compare the screenshot with the component text, identify the mismatch in the form workflow and propose one focused correction. Explain which source details justify the change.” For a document task, provide the relevant pages and ask for a comparison against explicit requirements, with source references for each finding.
The edition documents minimal, low, medium and high thinking levels. Medium is the default, changed from the high default of Gemini 3 Flash Preview. Minimal suits simple answers and straightforward tool decisions without guaranteeing that reasoning is completely disabled; low targets tasks requiring fewer steps; high provides deeper reasoning for hard mathematics, coding and agent problems. Google recommends using thinking_level for effort control and retaining default sampling settings rather than trying to force reasoning by changing temperature, top-p or top-k.
A defining behaviour is preservation of reasoning context across a multi-turn task. Google’s Interactions workflow carries that context automatically; its GenerateContent workflow requires the full unmodified conversation history, including thought signatures. This supports a continuing debugging or refactoring assignment in which earlier reasoning informs the next step. Preserve the actual conversation structure rather than converting each follow-up into an unrelated prompt, and keep the final requested artifact clear as the work progresses.
The documented tool set includes Google Search, grounding with Google Maps, File Search, Code Execution, URL Context and standard Function Calling, with combined tool use and Computer Use marked as a preview capability. Structured Outputs can supply a defined data record. Give functions a clear purpose and parameter definition: the model chooses a function, while the connected application performs its operation and returns the result. Google requires function results to match the preceding calls by identity, name and count; multimodal results belong inside the function response.
The exact API model table gives a maximum input of 1,048,576 tokens and maximum output of 65,536 tokens. Conversation history and supplied media contribute to the input budget. Caching and batch processing are documented for this profile, with additional Flex and Priority processing options in Google’s table. These limits and capabilities describe the producer edition; they do not require an answer to fill the entire output window or make every tool necessary for a task.
This profile generates text rather than images or audio and does not use Live API. Its developer guide also excludes image segmentation. For a visual question, ask for a description, extraction or interpretation of the supplied material; for a spoken recording, ask for a text result. When the answer depends on newer information, the documented search-grounding workflow can add sources beyond training knowledge. State whether external information is needed and what evidence the final answer should retain.
For a useful longer assignment, define the final result and the completion criterion before the first step. A support-analysis task might request a table of observed issues, supporting passages and a proposed reply; a coding task might require the focused change and the relevant validation result. Attach the source context that matters, specify the permitted tool actions and request an explicit final answer that separates completed work from questions still requiring information. This turns the model’s sustained workflow into a concrete text, code or structured artifact.
Ailoot Ultra · Batch POST /v1/batches google/gemini-3.5-flash:batch
google/gemini-3.5-flash:batchOverview
Gemini 3.5 Flash combines multimodal understanding with reasoning for coding and multi-step agent tasks. It accepts text, images, video, audio and PDF and produces text, with structured outputs, tools and a 1,048,576-token input limit in its documented profile.
- Accepted inputs
- Text
- Results
- Text
Available in Ailoot · inputs & methods
Ailoot Ultra · Batch POST /v1/batches
- Input types
text- Output types
text- Output format
- inline results[].response.body JSON
| Field | Type | Requirement | Values & limits | Default |
|---|---|---|---|---|
Fieldendpoint | Typestring | RequirementRequired | Values & limits /v1/chat/completions | Default— |
Fieldmodel | Typestring | RequirementRequired | Values & limits google/gemini-3.5-flash:batch | Default— |
Fieldrequests | Typebatch_item[] | RequirementRequired | Values & limits Minimum items: 1 | Default— |
Fieldrequests[].custom_id | Typestring | RequirementRequired | Values & limits | Default— |
Fieldrequests[].body.messages | Typemessage[] | RequirementRequired | Values & limits | Default— |
Fieldcompletion_window | Typestring | RequirementOptional | Values & limits 24h | Default— |
Fieldprovider | Typeobject|null | RequirementOptional | Values & limits | Default— |
Fieldrequests[].body.model | Typestring | RequirementOptional | Values & limits google/gemini-3.5-flash:batch, google/gemini-3.5-flash | Default— |
Fieldprovider.only | Typestring[] | RequirementOptional | Values & limits google-vertex/global | Default— |
Fieldprovider.allow_fallbacks | Typeboolean|null | RequirementOptional | Values & limits false, null | Default— |
Method parameters and lifecycle
| Parameter | Contract |
|---|---|
Parametercontent_type | Contractapplication/json |
Parameterrequired | Contractendpoint, model, requests |
Parametermaterial_types | Contracttext |
Parameterrepresentation | Contractinline requests[]; each item has custom_id and body |
Parameterrequest_endpoint_profile | Contract/v1/chat/completions |
Parameterfile_material | ContractCaller may read actual UTF-8 JSONL locally into requests[]. No upload purpose, input_file_id or file reference is used. Missing/empty customer material stops preparation before POST. |
Parameterserialization_order | Contractendpoint, model, provider (if supplied), completion_window (if supplied), requests last |
Parameteroptional_controls | Contractprovider.only, provider.allow_fallbacks, completion_window |
Parameterschema_scope | ContractText Chat Completions bodies in the documented inline Batch envelope. |
Lifecycle: asynchronous
GET /v1/batches/{operation_id} · actual original create response.id; same user/key/group
Pricing
Tariff references do not add request options. Supported parameters are listed for the selected method.
- Fast mode
- Not specified When fast mode is selected
- Flex mode
- Not specified When flex mode is selected
- Maximum reasoning effort
- Not specified When maximum reasoning effort uses the default adjustment
- Explicit cache pricing
- Not enabled When explicit cache is requested
Ailoot rates
Prices by configuration
Match each charge to the conditions shown. Use one rate for each set of alternative configurations.
| Configuration | Rate schedule | Context tokens, more than | Context tokens, up to and including | Charge |
|---|---|---|---|---|
| ConfigurationBase token rates | Rate scheduleBase rate | Context tokens, more than— | Context tokens, up to and includingNo upper bound | Charge Input · Input tokens $0.0015 / 1K tokens Output · Output tokens $0.009 / 1K tokens Input · Cache read $0.00015 / 1K tokens Input · Cache write — / 1K tokens Input · Cache write, 1 hour — / 1K tokens |
| ConfigurationRequest-length tier 1 | Rate schedule— | Context tokens, more than0 | Context tokens, up to and includingNo upper bound | Charge Input · Input tokens $0.0015 / 1K tokens Output · Output tokens $0.009 / 1K tokens Input · Cache read $0.00015 / 1K tokens Input · Cache write — / 1K tokens Input · Cache write, 1 hour — / 1K tokens |
Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. How reservation and settlement work →
Example requests
Ailoot Ultra · Batch
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json
from pathlib import Path
body=json.loads('{"endpoint":"/v1/chat/completions","model":"google/gemini-3.5-flash:batch","requests":[{"custom_id":"req-0001","body":{"messages":[{"role":"user","content":"Hello!"}],"max_tokens":16}}]}')
Path("batch-request.json").write_text(json.dumps(body,ensure_ascii=False),encoding="utf-8")
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/batches \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @batch-request.json -D batch-response-headers.txt -o batch-create-response.json
import json, os
from pathlib import Path
from urllib.request import Request, urlopen
def prepare_requests(customer_path):
path = Path(customer_path)
if not path.is_file(): raise ValueError("Customer JSONL file is missing")
items = [json.loads(line) for line in path.read_text(encoding="utf-8").splitlines() if line.strip()]
if not items: raise ValueError("Customer JSONL contains no requests")
ids = set()
for item in items:
if set(item) != {"custom_id", "body"}: raise ValueError("Each item needs custom_id and body")
cid = item["custom_id"]
if not isinstance(cid, str) or not cid.strip() or cid in ids: raise ValueError("custom_id must be nonempty and unique")
ids.add(cid)
if not isinstance(item["body"], dict) or not item["body"].get("messages"): raise ValueError("Supply actual text messages")
supplied_model = item["body"].get("model")
if supplied_model is not None and supplied_model not in ['google/gemini-3.5-flash:batch', 'google/gemini-3.5-flash']: raise ValueError("body.model must be an exact documented caller or wire ID")
return {"endpoint":"/v1/chat/completions", "model":"google/gemini-3.5-flash:batch", "requests":items}
if __name__ == "__main__":
material = os.environ.get("AILOOT_BATCH_REQUESTS_JSONL", "")
if not material: raise SystemExit("Set AILOOT_BATCH_REQUESTS_JSONL to your actual customer file")
body = prepare_requests(material)
key = os.environ.get("AILOOT_API_KEY", "")
if not key: raise SystemExit("Set AILOOT_API_KEY")
request = Request("https://api.ailoot.ai/v1/batches", data=json.dumps(body, ensure_ascii=False).encode("utf-8"), headers={"Authorization":"Bearer " + key, "Content-Type":"application/json"}, method="POST")
with urlopen(request) as response:
raw = response.read()
Path("batch-create-response.json").write_bytes(raw)
print(raw.decode("utf-8"))
import json
from pathlib import Path
raw = Path("batch-status-response.json").read_bytes()
response = json.loads(raw)
if response.get("status") != "completed":
raise SystemExit("Keep the original operation; read its status without resubmitting")
results = response.get("results")
if not isinstance(results, list) or not results:
raise SystemExit("Preserve the original response; completed results are missing")
Path("batch-results.jsonl").write_text("".join(json.dumps(item, ensure_ascii=False) + "\n" for item in results), encoding="utf-8")
# Preserve batch-status-response.json with aggregate usage and every result/error.
Receive and save results
Ailoot Ultra · Batch
inline results[].response.body JSON
GET /v1/batches/{operation_id}
Check job status
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
BATCH_OPERATION_ID="$(python3 - <<'PY_ID'
import json
from pathlib import Path
from urllib.parse import quote
response = json.loads(Path("batch-create-response.json").read_text(encoding="utf-8"))
operation = response.get("id")
if not isinstance(operation, str) or not operation: raise SystemExit("No actual original operation ID; preserve the response and do not resubmit")
print(quote(operation, safe=""))
PY_ID
)"
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/batches/$BATCH_OPERATION_ID" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o batch-status-response.json
Keep all completed results
Keep every complete returned response, file and content part.
Preserve the full original status JSON, every result/custom_id and complete response or error body. Save completed results[] as JSONL without filtering.
If the original response needs checking
Preserve the original operation ID. 503 result_pending_check has X-Should-Retry:false; never resubmit an unknown original batch.
Response fields
| Field | Type |
|---|---|
Fieldresults[].custom_id | Typestring |
Fieldresults[].response.body.choices[].message.content | Typestring|null |
Fieldresults[].error | Typeobject|null |
Fieldusage | Typeobject|null |
Fieldid | Typestring |
Fieldmodel | Typestring |
Fieldendpoint | Typestring |
Fieldstatus | Typestring |
Fieldrequest_counts | Typeobject |
Fieldresults[].id | Typestring |
Fieldresults[].response.status_code | Typeinteger |
Fieldresults[].response.request_id | Typestring |
Errors and next steps
| Response | Condition | Next step |
|---|---|---|
Response400 · invalid_request_error | ConditionInvalid documented inline envelope, duplicate keys, item identity, or configured model capabilities conflict. | Next stepCorrect the indicated fields before any new submission. |
Response401 · authentication_error | ConditionInvalid API key. | Next stepUse the authorized Ailoot key. |
Response403 · permission_error | ConditionBatch group unavailable. | Next stepCheck key/group entitlement. |
Response422 · invalid_request_error | ConditionBatch uses balance billing; subscription creation is rejected. | Next stepUse the authorized balance-billed group. |
Response422 · price_unavailable | ConditionBatch input cannot be quoted. | Next stepPreserve response; use documented family input. |
Response402 · billing_error | ConditionBatch reserve unavailable. | Next stepResolve admission before a new request. |
Response503 · price_unavailable | ConditionBatch method price/native rates unavailable. | Next stepPreserve response; do not substitute prices. |
Response503 · api_error | ConditionExact supplier route unavailable. | Next stepPreserve response for route repair. |
Response503 · result_pending_check | ConditionOriginal result requires checking; X-Should-Retry:false. | Next stepKeep original operation_id/id and read its status; never repeat original POST. |
Response404 · not_found | ConditionBatch status operation absent or owned by another identity. | Next stepUse exact original id and same user/key/group. |
Aliases
Model aliases
Ailoot Ultra google/gemini-3.5-flash:batch
Method path aliases
Use the method paths shown above.
Related caller IDs
FAQ · Google: Gemini 3.5 Flash (batch)
- What inputs and results are available?
POST /v1/batches·google/gemini-3.5-flash:batch:text→text- Which fields does the request use?
POST /v1/batches·google/gemini-3.5-flash:batch:endpoint,model,requests,completion_window,provider- What limits apply?
POST /v1/batches·google/gemini-3.5-flash:batch:requests.min_items:1