{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "Hello! I'm pleased to introduce myself.\n\nI'm a large language model, trained and developed by Google...",
"thought": true,
"thoughtSignature": "<Signature_A>"
}
]
},
"finishReason": "STOP",
"continuationToken": "<string>",
"index": 0,
"safetyRatings": [
{}
]
}
],
"promptFeedback": {
"safetyRatings": [
{}
]
},
"usageMetadata": {
"promptTokenCount": 4,
"candidatesTokenCount": 611,
"totalTokenCount": 2422,
"thoughtsTokenCount": 1807,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 4
}
],
"cachedContentTokenCount": 0
},
"modelVersion": "gemini-3.6-flash",
"responseId": "l-LoaPu0BPmo1dkP6ZPHiQc"
}{
"error": {
"code": 400,
"message": "Ungültige Anfrageparameter",
"type": "invalid_request_error"
}
}{
"error": {
"code": 401,
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Unzureichendes Kontingent",
"type": "insufficient_quota_error",
"fallback_suggestion": "https://evolink.ai/dashboard/credits"
}
}{
"error": {
"code": 403,
"message": "Access denied for this model",
"type": "permission_error"
}
}{
"error": {
"code": 404,
"message": "Model not found",
"type": "not_found_error"
}
}{
"error": {
"code": 413,
"message": "Anfragekörper zu groß",
"type": "request_too_large_error",
"fallback_suggestion": "reduce file size"
}
}{
"error": {
"code": 429,
"message": "Ratenlimit überschritten",
"type": "rate_limit_error",
"fallback_suggestion": "retry after 60 seconds"
}
}{
"error": {
"code": 500,
"message": "Interner Serverfehler",
"type": "internal_server_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 502,
"message": "Upstream AI service unavailable",
"type": "upstream_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 503,
"message": "Dienst vorübergehend nicht verfügbar",
"type": "service_unavailable_error",
"fallback_suggestion": "retry after 30 seconds"
}
}Gemini Schnittstelle für alle Modelle - natives API-Format
Wählen Sie über {model} im Pfad das aufzurufende Gemini-Textmodell aus (alle möglichen Werte finden Sie in der Vergleichstabelle des Parameters model).
- Verwendet das native Google-API-Format und gibt Gesprächsinhalte synchron zurück
- Reiner Text / multimodale Eingabe: gemischte Eingabe aus Text + Bild / Audio / Video
- Streaming: Ersetzen Sie
generateContentim Pfad durchstreamGenerateContent(optional?alt=sseanhängen, um SSE zu erhalten)
Modellspezifikationen und Unterschiede
- Verhalten von 3.8: Im Vergleich zu 3.7 bietet das Modell bessere Softwareentwicklung, Agentenfähigkeiten, mehrstufiges Reasoning und multimodale Genauigkeit; insbesondere bei
highkann es mehr Reasoning- / Ausgabe-Token verbrauchen. Für latenzkritische Szenarien wirdlow, für allgemeine Aufgaben der Standardwertmediumund für komplexen Code, lange Videos oder mehrstufiges Reasoninghighempfohlen. - Verhalten von Gemini 4 Argon: Das Denken wird ausschließlich über
thinkingConfig.thinkingLevelgesteuert; verfügbar sindlow/medium/high. Ohne Angabe entscheidet das Modell selbst über den Denkaufwand.minimalwird nicht unterstützt (gibt 400 zurück; verwenden Sie stattdessenlow), ebenso wenigthinkingBudget(gibt 400 zurück).temperature/topPaußerhalb des gültigen Bereichs geben 400 zurück. Bei Funktionsaufrufen über mehrere Runden muss die in der vorherigen Runde zurückgegebenethoughtSignatureunverändert mitgesendet werden, andernfalls wird 400 zurückgegeben. Als Eingabe werden Text / Bilder / Audio / Video / PDF unterstützt. - Sampling-Parameter
temperature/topP/topK: Bei der gesamten Gemini-3.x-Serie einheitlich, benutzerdefinierte Werte beeinflussen die Ausgabe nicht;topKwird ignoriert und hat keine Wirkung,temperature/topPaußerhalb des gültigen Bereichs geben einen 400 zurück. - Denksteuerung: Die Gemini-3.x/4-Serie verwendet
thinkingConfig.thinkingLevel(die von jedem Modell unterstützten Stufen und Standardwerte siehe ParameterthinkingLevel); die Gemini-2.5-Serie verwendetthinkingConfig.thinkingBudget(Ganzzahl,0=deaktiviert). Beide schließen sich gegenseitig aus.gemini-3.8-flash/gemini-3.7-flashund die Pro-Serie unterstützenminimalnicht; ein übergebener Wert wird automatisch auflowherabgestuft. - Funktionsaufruf: Die
FunctionResponsevon Gemini 3.x muss dieidund dennamezurückgeben, die zum entsprechendenFunctionCallpassen, sonst tritt ein Fehler auf. - Rolle der letzten Runde: Die
roleder letzten Nachricht darf nichtmodelsein (Gemini 3.5+ gibt sonst einen Fehler zurück). - Token-Obergrenze:
gemini-3.8-flash/gemini-3.7-flash/gemini-3.6-flash/gemini-3.5-flash-litehaben einen Kontext von 1,048,576 und maximal 65,536 Ausgabetokens.gemini-4-argonteilt einen Kontext von 1,048,576 zwischen Eingabe, Denken und Ausgabe. Pro Anfrage sind bis zu 65,536 Tokens mit Streaming oder 32,768 ohne Streaming möglich, jeweils einschließlich Denken und Antwort. Verwenden Sie für längere Ausgaben die Fortsetzung; Denken und Antwort dürfen insgesamt nur den Platz nach Abzug der Eingabe nutzen. Siehe „Lange Ausgaben fortsetzen“ auf dieser Seite. Bei anderen Modellen gelten die jeweiligen Spezifikationen. - Gemini-2.5-IDs: Ab 2026-10-19 werden
gemini-2.5-pro/gemini-2.5-flash/gemini-2.5-flash-litevongemini-3.8-flash/gemini-3.5-flash-lite/gemini-3.1-flash-lite-previewbedient und zu deren Preisen abgerechnet; die Antwort zeigt die neue Modell-ID, und das Parameterverhalten richtet sich nach dem neuen Modell.thinkingBudgetwird in eine Stufe umgerechnet (siehe ParameterthinkingBudget).
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "Hello! I'm pleased to introduce myself.\n\nI'm a large language model, trained and developed by Google...",
"thought": true,
"thoughtSignature": "<Signature_A>"
}
]
},
"finishReason": "STOP",
"continuationToken": "<string>",
"index": 0,
"safetyRatings": [
{}
]
}
],
"promptFeedback": {
"safetyRatings": [
{}
]
},
"usageMetadata": {
"promptTokenCount": 4,
"candidatesTokenCount": 611,
"totalTokenCount": 2422,
"thoughtsTokenCount": 1807,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 4
}
],
"cachedContentTokenCount": 0
},
"modelVersion": "gemini-3.6-flash",
"responseId": "l-LoaPu0BPmo1dkP6ZPHiQc"
}{
"error": {
"code": 400,
"message": "Ungültige Anfrageparameter",
"type": "invalid_request_error"
}
}{
"error": {
"code": 401,
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Unzureichendes Kontingent",
"type": "insufficient_quota_error",
"fallback_suggestion": "https://evolink.ai/dashboard/credits"
}
}{
"error": {
"code": 403,
"message": "Access denied for this model",
"type": "permission_error"
}
}{
"error": {
"code": 404,
"message": "Model not found",
"type": "not_found_error"
}
}{
"error": {
"code": 413,
"message": "Anfragekörper zu groß",
"type": "request_too_large_error",
"fallback_suggestion": "reduce file size"
}
}{
"error": {
"code": 429,
"message": "Ratenlimit überschritten",
"type": "rate_limit_error",
"fallback_suggestion": "retry after 60 seconds"
}
}{
"error": {
"code": 500,
"message": "Interner Serverfehler",
"type": "internal_server_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 502,
"message": "Upstream AI service unavailable",
"type": "upstream_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 503,
"message": "Dienst vorübergehend nicht verfügbar",
"type": "service_unavailable_error",
"fallback_suggestion": "retry after 30 seconds"
}
}generateContent in der URL durch streamGenerateContent. Der Request-Body bleibt unverändert; die Antwort trifft in Chunks ein. Mit ?alt=sse fordern Sie das SSE-Format an.https://direct.evolink.ai und bietet bessere Unterstützung für Textmodelle sowie persistente Verbindungen. https://api.evolink.ai ist der primäre Endpunkt für multimodale Dienste und dient bei Textmodellen als Ausweichadresse.Lange Ausgaben fortsetzen (Gemini 4 Argon)
Eine einzelne Anfrage angemini-4-argon liefert bis zu 65,536 Tokens mit Streaming oder 32,768 ohne Streaming. Beide Grenzen umfassen Denken und Antwort. Längere Ausgaben werden über mehrere Fortsetzungsanfragen abgerufen. Eingabe, Denken und Antwort teilen sich ein Kontextfenster von 1,048,576 Tokens; für Denken und Antwort bleibt insgesamt nur der Platz nach Abzug der Eingabe. Nur die native API unterstützt die Fortsetzung, das OpenAI-kompatible Format nicht.
Streaming streamGenerateContent | Ohne Streaming generateContent | |
|---|---|---|
| Maximale Ausgabe pro Anfrage | 65,536 | 32,768 |
| Fortsetzungstoken beim Abschluss | Im letzten Chunk: candidates[0].continuationToken | candidates[0].continuationToken |
- Setzen Sie
generationConfig.maxOutputTokensüber die Grenze pro Anfrage: über 65,536 mit Streaming oder 32,768 ohne Streaming. Der Parameter akzeptiert bis zu 1,048,576; die tatsächliche Ausgabe bleibt durch den gemeinsamen Kontext begrenzt. Der Wert ist das Gesamtbudget für Denken und Antwort über alle Fortsetzungsanfragen. - Bei
candidates[0].finishReason: CONTINUATIONist die Generierung noch nicht abgeschlossen. Derselbe Kandidat enthält eincontinuationToken. - Senden Sie die ursprüngliche Anfrage mit unveränderten
contents,systemInstruction,toolsundgenerationConfigerneut. Ergänzen Sie nurcontinuationTokenauf oberster Ebene und übernehmen Sie den zuletzt empfangenen Wert unverändert. - Wiederholen Sie Schritt 3 nur bei
finishReason: CONTINUATION; bei jedem anderen Abschlussgrund stoppen Sie.STOPbedeutet normalen Abschluss,MAX_TOKENSein aufgebrauchtes Gesamtbudget. Jede Antwort enthält nur neu generierte Inhalte; fügen Sie diese der Reihe nach zusammen.
- Hängen Sie keine Teilausgabe an
contentsan und senden Sie keine neue Aufforderung wie „weiter“. - Eine Anfrage kann vollständig fürs Denken verwendet werden und einen leeren Antworttext liefern. Setzen Sie bei
CONTINUATIONfort. - Auch
MAX_TOKENSkann eincontinuationTokenliefern. Erhöhen Sie zum FortsetzenmaxOutputTokensmanuell und senden Sie die ursprüngliche Anfrage mit dem neuesten Token erneut. Mit dem aufgebrauchten Budget folgt ein 400-Fehler. Siehe „Nach aufgebrauchtem Budget fortsetzen“ weiter unten. - Warten Sie bei Gesprächen mit mehreren Runden auf
STOPund fügen Sie erst dann die vollständige, zusammengefügte Antwort als einemodel-Nachricht zum Verlauf hinzu.
Beispiele
Erste Anfrage:curl -X POST "https://direct.evolink.ai/v1beta/models/gemini-4-argon:generateContent" \
-H "Authorization: Bearer $EVOLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{ "role": "user", "parts": [{ "text": "Schreiben Sie ein vollständiges Designdokument für eine asynchrone Rust-Laufzeit mit Architektur, Scheduler, I/O-Treiber, Timern und vollständigem Beispielcode." }] }
],
"generationConfig": {
"maxOutputTokens": 262144,
"thinkingConfig": { "thinkingLevel": "high" }
}
}'
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "# Design einer asynchronen Rust-Laufzeit\n\n## 1. Architektur\n…"
}
]
},
"finishReason": "CONTINUATION",
"continuationToken": "<eine lange Zeichenfolge, unverändert speichern>"
}
]
}
CONTINUATION, senden Sie dieselbe Anfrage mit continuationToken auf oberster Ebene erneut:
curl -X POST "https://direct.evolink.ai/v1beta/models/gemini-4-argon:generateContent" \
-H "Authorization: Bearer $EVOLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{ "role": "user", "parts": [{ "text": "Schreiben Sie ein vollständiges Designdokument für eine asynchrone Rust-Laufzeit mit Architektur, Scheduler, I/O-Treiber, Timern und vollständigem Beispielcode." }] }
],
"generationConfig": {
"maxOutputTokens": 262144,
"thinkingConfig": { "thinkingLevel": "high" }
},
"continuationToken": "<continuationToken aus der vorigen Antwort>"
}'
CONTINUATION automatisch und gibt beim Abschluss oder bei aufgebrauchtem Budget das Ergebnis zurück. Sie behält das neueste Token und erhöht das Budget bei MAX_TOKENS nicht automatisch:
import os
from copy import deepcopy
import requests
URL = "https://direct.evolink.ai/v1beta/models/gemini-4-argon:generateContent"
HEADERS = {"Authorization": f"Bearer {os.environ['EVOLINK_API_KEY']}"}
def generate_with_continuation(body):
request_body = deepcopy(body)
pieces = []
while True:
# Lesezeitlimit des Clients: 1,200 Sekunden, keine Garantie für eine 20-minütige Serververbindung.
resp = requests.post(URL, headers=HEADERS, json=request_body, timeout=1200)
resp.raise_for_status()
candidates = resp.json().get("candidates", [])
if not candidates:
raise RuntimeError("Keine Kandidaten in der Antwort; prüfen Sie promptFeedback.")
candidate = candidates[0]
for part in candidate.get("content", {}).get("parts", []):
if not part.get("thought"):
pieces.append(part.get("text", ""))
reason = candidate.get("finishReason")
token = candidate.get("continuationToken")
if reason == "CONTINUATION":
if not token:
raise RuntimeError("Die Antwort verlangt eine Fortsetzung, enthält aber kein continuationToken.")
request_body["continuationToken"] = token # Alle anderen Felder unverändert lassen
continue
return {
"text": "".join(pieces),
"finishReason": reason,
"continuationToken": token,
}
body = {
"contents": [
{"role": "user", "parts": [{"text": "Schreiben Sie ein vollständiges Designdokument für eine asynchrone Rust-Laufzeit mit Architektur, Scheduler, I/O-Treiber, Timern und vollständigem Beispielcode."}]}
],
"generationConfig": {"maxOutputTokens": 262144, "thinkingConfig": {"thinkingLevel": "high"}},
}
result = generate_with_continuation(body)
print(result["text"])
print("finishReason:", result["finishReason"])
if result["finishReason"] == "MAX_TOKENS":
print("Das gesamte Ausgabebudget ist aufgebraucht. Mit einem zurückgegebenen Token können Sie maxOutputTokens manuell erhöhen und fortsetzen.")
Nach aufgebrauchtem Budget fortsetzen
Dieses Beispiel verwendetgenerate_with_continuation, URL und HEADERS von oben. Es erzeugt eine Zahlenliste mit kleinem Budget und erhöht dann das Gesamtbudget ausdrücklich von 64 auf 2,048. Behalten Sie die ursprünglichen contents und alle anderen Einstellungen bei. Mit dem Token und dem erhöhten Budget wird an der Abbruchstelle fortgesetzt.
body = {
"contents": [
{"role": "user", "parts": [{"text": "Output integers 1 through 100, one per line. Start immediately."}]}
],
"generationConfig": {"maxOutputTokens": 64, "thinkingConfig": {"thinkingLevel": "low"}},
}
first = generate_with_continuation(body)
print(first["text"], end="")
if first["finishReason"] == "MAX_TOKENS" and first["continuationToken"]:
body["continuationToken"] = first["continuationToken"]
body["generationConfig"]["maxOutputTokens"] = 2048 # Der Aufrufer erhöht das Gesamtbudget ausdrücklich
resumed = generate_with_continuation(body)
print(resumed["text"], end="")
print("\nfinishReason:", resumed["finishReason"])
else:
print("\nfinishReason:", first["finishReason"])
finishReason: Bei CONTINUATION senden Sie das neueste Token mit unveränderten Einstellungen erneut. Bei MAX_TOKENS müssen Sie das Gesamtbudget zum Fortsetzen manuell erhöhen. STOP bedeutet normalen Abschluss.
Abrechnung und Fehler
- Jede Anfrage wird einzeln abgerechnet. Bei Fortsetzungen zählen die ursprüngliche Eingabe und alle zuvor generierten Inhalte erneut als Eingabe. Teile, die den impliziten Cache treffen, werden zum Cachetarif berechnet.
- Das
usageMetadatajeder Antwort gilt nur für diese Anfrage. Addieren Sie die Werte verschiedener Anfragen für die Gesamtnutzung. Innerhalb eines Streams sind die Werte kumulativ: Verwenden Sie nur das letzteusageMetadata, statt die Zwischenstände mehrfach zu addieren. - Die native API schätzt die Reservierung für die Ausgabe mit dem kleineren Wert aus
maxOutputTokensund 65,536, auch ohne Streaming; die Eingabe wird separat geschätzt. Die tatsächliche Ausgabe ohne Streaming ist auf 32,768 pro Anfrage begrenzt. Ein höheres Budget kann deshalb mehr reservieren als eine Schätzung anhand dieser tatsächlichen Grenze. Die endgültige Abrechnung richtet sich nach den Nutzungsdaten der Antwort. - Ungültige Tokens führen zu 400. Ein korrekt formatiertes Token mit ungültigem Inhalt kann
Invalid continuation token.liefern; bei falschem Format ist ein anderer Parameterfehler möglich. Andere Modelle ignorierencontinuationToken. - Nach
MAX_TOKENSführt eine Fortsetzung mit Token ebenfalls zu 400, wenn Sie das aufgebrauchtemaxOutputTokensnicht erhöhen.
Autorisierungen
##Alle APIs erfordern Bearer-Token-Authentifizierung##
API-Schlüssel erhalten:
Besuchen Sie die API-Schlüsselverwaltungsseite, um Ihren API-Schlüssel zu erhalten
Zum Anfrage-Header hinzufügen:
Authorization: Bearer YOUR_API_KEY
Pfadparameter
Wählen Sie das aufzurufende Gemini-Textmodell aus:
| Modell-ID | Serie | Positionierung |
|---|---|---|
gemini-4-argon | 4 Argon | Lange Berichte und große Programmieraufgaben; pro Anfrage bis zu 65,536 Tokens mit Streaming / 32,768 ohne Streaming; native Fortsetzung innerhalb des gemeinsamen Kontexts |
gemini-3.8-flash | 3.8 Flash | Verbesserte Softwareentwicklung / Agents / mehrstufiges Reasoning / multimodale Genauigkeit |
gemini-3.7-flash | 3.7 Flash | Agentic auf Pro-Niveau / Codegenerierung / Terminal-Ausführung |
gemini-3.6-flash | 3.6 Flash | Mehrschritt-Orchestrierung / Code-Refactoring / allgemeines Reasoning |
gemini-3.5-flash | 3.5 Flash | Universal-Flash |
gemini-3.5-flash-lite | 3.5 Flash-Lite | Niedrige Kosten / hoher Durchsatz / leichtgewichtiger Agent |
gemini-3.1-pro-preview | 3.1 Pro (Preview) | Fortgeschrittenes Reasoning |
gemini-3.1-pro-preview-customtools | 3.1 Pro · CustomTools | Fortgeschrittenes Reasoning + benutzerdefinierte Tools |
gemini-3.1-flash-lite-preview | 3.1 Flash-Lite (Preview) | Niedrige Kosten |
gemini-3-pro-preview | 3.0 Pro (Preview) | Fortgeschrittenes Reasoning |
gemini-3-flash-preview | 3.0 Flash (Preview) | Universal-Flash |
gemini-2.5-pro | 2.5 Pro | Bisherige ID; ab 2026-10-19 von gemini-3.8-flash bedient und zu dessen Preisen abgerechnet |
gemini-2.5-flash | 2.5 Flash | Bisherige ID; ab 2026-10-19 von gemini-3.5-flash-lite bedient und zu dessen Preisen abgerechnet |
gemini-2.5-flash-lite | 2.5 Flash-Lite | Bisherige ID; ab 2026-10-19 von gemini-3.1-flash-lite-preview bedient und zu dessen Preisen abgerechnet |
gemini-4-argon, gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash, gemini-3.5-flash-lite, gemini-3.1-pro-preview, gemini-3.1-pro-preview-customtools, gemini-3.1-flash-lite-preview, gemini-3-pro-preview, gemini-3-flash-preview, gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite "gemini-3.6-flash"
Body
List of conversation contents, supports multi-turn dialogue and multimodal input
1Show child attributes
Show child attributes
System instruction (optional), mainly text content
Show child attributes
Show child attributes
Tools, die das Modell aufrufen kann. Drei Arten werden unterstützt:
functionDeclarations: FunktionsaufrufecodeExecution: CodeausführunggoogleSearch: Websuche mit Google Search. Verwenden Sie{"googleSearch": {}}(camelCase;google_searchführt zu HTTP 400). Für alle Gemini-Textmodelle verfügbar. Die Antwort enthält Suchanfragen und Quellen untercandidates[].groundingMetadata; die Abrechnung erfolgt pro Aufruf.
[{ "googleSearch": {} }]
Tool calling configuration (optional)
Safety settings list (optional)
Generation configuration parameters (optional)
Show child attributes
Show child attributes
Token zur Fortsetzung langer Ausgaben (nur gemini-4-argon). Übernehmen Sie das letzte candidates[0].continuationToken unverändert auf die oberste Ebene der Anfrage. Behalten Sie die ursprünglichen contents, systemInstruction und tools bei und hängen Sie keine Teilausgabe an.
CONTINUATION: alle Generierungseinstellungen unverändert lassen und das Token erneut senden.MAX_TOKENS: ein Token kann ebenfalls zurückgegeben werden. Erhöhen Sie vor der Fortsetzung das kumulativemaxOutputTokensmanuell; andere Einstellungen bleiben unverändert. Das aufgebrauchte Budget führt zu 400.- Ungültige Tokens führen zu 400.
- Andere Modelle ignorieren dieses Feld.
Siehe Vollständige Referenz der nativen API, Abschnitt „Lange Ausgaben fortsetzen“.
Cached content name, in the form cachedContents/{cachedContent}
Antwort
Inhalt erfolgreich generiert
Beschreibung des Antwortformats:
- Bei Verwendung des
generateContent-Endpunkts wirdGenerateContentResponsezurückgegeben (gibt vollständige Antwort auf einmal zurück) - Bei Verwendung des
streamGenerateContent-Endpunkts wirdStreamGenerateContentResponsezurückgegeben (Streaming-Antwort, gibt Inhalt in Teilen zurück)
- Synchrone Antwort
- Stream-Antwort