curl --request POST \
--url https://direct.evolink.ai/v1/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "grok-4.6",
"input": "Search the web for the latest SpaceX launch and summarize it in one sentence.",
"stream": false,
"max_output_tokens": 2048,
"reasoning": {
"effort": "high"
},
"tools": [
{
"type": "web_search"
}
]
}
'import requests
url = "https://direct.evolink.ai/v1/responses"
payload = {
"model": "grok-4.6",
"input": "Search the web for the latest SpaceX launch and summarize it in one sentence.",
"stream": False,
"max_output_tokens": 2048,
"reasoning": { "effort": "high" },
"tools": [{ "type": "web_search" }]
}
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({
model: 'grok-4.6',
input: 'Search the web for the latest SpaceX launch and summarize it in one sentence.',
stream: false,
max_output_tokens: 2048,
reasoning: {effort: 'high'},
tools: [{type: 'web_search'}]
})
};
fetch('https://direct.evolink.ai/v1/responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://direct.evolink.ai/v1/responses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'grok-4.6',
'input' => 'Search the web for the latest SpaceX launch and summarize it in one sentence.',
'stream' => false,
'max_output_tokens' => 2048,
'reasoning' => [
'effort' => 'high'
],
'tools' => [
[
'type' => 'web_search'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://direct.evolink.ai/v1/responses"
payload := strings.NewReader("{\n \"model\": \"grok-4.6\",\n \"input\": \"Search the web for the latest SpaceX launch and summarize it in one sentence.\",\n \"stream\": false,\n \"max_output_tokens\": 2048,\n \"reasoning\": {\n \"effort\": \"high\"\n },\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://direct.evolink.ai/v1/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"grok-4.6\",\n \"input\": \"Search the web for the latest SpaceX launch and summarize it in one sentence.\",\n \"stream\": false,\n \"max_output_tokens\": 2048,\n \"reasoning\": {\n \"effort\": \"high\"\n },\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://direct.evolink.ai/v1/responses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"grok-4.6\",\n \"input\": \"Search the web for the latest SpaceX launch and summarize it in one sentence.\",\n \"stream\": false,\n \"max_output_tokens\": 2048,\n \"reasoning\": {\n \"effort\": \"high\"\n },\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "55d44212-8d5e-90cc-975f-36d341ce21f5",
"object": "response",
"status": "completed",
"model": "grok-4.6",
"created_at": 1786538000,
"output": [
{
"id": "<string>",
"type": "web_search_call",
"status": "completed",
"content": [
{}
]
}
],
"usage": {
"input_tokens": 10329,
"output_tokens": 299,
"total_tokens": 10628,
"input_tokens_details": {
"cached_tokens": 6016
},
"output_tokens_details": {
"reasoning_tokens": 128
},
"num_server_side_tools_used": 2,
"server_side_tool_usage_details": {
"web_search_calls": 2,
"x_search_calls": 0,
"code_interpreter_calls": 0,
"document_search_calls": 0,
"file_search_calls": 0,
"mcp_calls": 0
}
}
}{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": 401,
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Insufficient quota",
"type": "insufficient_quota_error",
"fallback_suggestion": "https://evolink.ai/dashboard/billing"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded",
"type": "rate_limit_error",
"fallback_suggestion": "retry after 60 seconds"
}
}{
"error": {
"code": 500,
"message": "Internal server error",
"type": "internal_server_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 503,
"message": "Service temporarily unavailable",
"type": "service_unavailable_error",
"fallback_suggestion": "retry after 30 seconds"
}
}API tous modèles Grok - Référence complète Responses
- Point de terminaison Responses compatible OpenAI pour les modèles de texte xAI Grok ; sélection du modèle via le paramètre
model(toutes les valeurs figurent dans le tableau du paramètremodel) - Fenêtre de contexte de 500K tokens ; à partir de 200K tokens dans le prompt, tous les types de tokens sont facturés au double du tarif
- La mise en cache du prompt est automatique : les tokens servis depuis le cache sont facturés au tarif d’entrée en cache, moins élevé
- Modes synchrone et streaming (SSE)
- Les outils côté serveur de xAI s’exécutent sur l’infrastructure xAI et sont facturés par appel réussi :
web_search,x_search,code_execution,attachment_search,collections_search - Les outils
functionclassiques (appels de fonctions côté client) sont également pris en charge et n’entraînent aucun frais par appel
curl --request POST \
--url https://direct.evolink.ai/v1/responses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "grok-4.6",
"input": "Search the web for the latest SpaceX launch and summarize it in one sentence.",
"stream": false,
"max_output_tokens": 2048,
"reasoning": {
"effort": "high"
},
"tools": [
{
"type": "web_search"
}
]
}
'import requests
url = "https://direct.evolink.ai/v1/responses"
payload = {
"model": "grok-4.6",
"input": "Search the web for the latest SpaceX launch and summarize it in one sentence.",
"stream": False,
"max_output_tokens": 2048,
"reasoning": { "effort": "high" },
"tools": [{ "type": "web_search" }]
}
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({
model: 'grok-4.6',
input: 'Search the web for the latest SpaceX launch and summarize it in one sentence.',
stream: false,
max_output_tokens: 2048,
reasoning: {effort: 'high'},
tools: [{type: 'web_search'}]
})
};
fetch('https://direct.evolink.ai/v1/responses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://direct.evolink.ai/v1/responses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'grok-4.6',
'input' => 'Search the web for the latest SpaceX launch and summarize it in one sentence.',
'stream' => false,
'max_output_tokens' => 2048,
'reasoning' => [
'effort' => 'high'
],
'tools' => [
[
'type' => 'web_search'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://direct.evolink.ai/v1/responses"
payload := strings.NewReader("{\n \"model\": \"grok-4.6\",\n \"input\": \"Search the web for the latest SpaceX launch and summarize it in one sentence.\",\n \"stream\": false,\n \"max_output_tokens\": 2048,\n \"reasoning\": {\n \"effort\": \"high\"\n },\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://direct.evolink.ai/v1/responses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"grok-4.6\",\n \"input\": \"Search the web for the latest SpaceX launch and summarize it in one sentence.\",\n \"stream\": false,\n \"max_output_tokens\": 2048,\n \"reasoning\": {\n \"effort\": \"high\"\n },\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://direct.evolink.ai/v1/responses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"grok-4.6\",\n \"input\": \"Search the web for the latest SpaceX launch and summarize it in one sentence.\",\n \"stream\": false,\n \"max_output_tokens\": 2048,\n \"reasoning\": {\n \"effort\": \"high\"\n },\n \"tools\": [\n {\n \"type\": \"web_search\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "55d44212-8d5e-90cc-975f-36d341ce21f5",
"object": "response",
"status": "completed",
"model": "grok-4.6",
"created_at": 1786538000,
"output": [
{
"id": "<string>",
"type": "web_search_call",
"status": "completed",
"content": [
{}
]
}
],
"usage": {
"input_tokens": 10329,
"output_tokens": 299,
"total_tokens": 10628,
"input_tokens_details": {
"cached_tokens": 6016
},
"output_tokens_details": {
"reasoning_tokens": 128
},
"num_server_side_tools_used": 2,
"server_side_tool_usage_details": {
"web_search_calls": 2,
"x_search_calls": 0,
"code_interpreter_calls": 0,
"document_search_calls": 0,
"file_search_calls": 0,
"mcp_calls": 0
}
}
}{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": 401,
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Insufficient quota",
"type": "insufficient_quota_error",
"fallback_suggestion": "https://evolink.ai/dashboard/billing"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded",
"type": "rate_limit_error",
"fallback_suggestion": "retry after 60 seconds"
}
}{
"error": {
"code": 500,
"message": "Internal server error",
"type": "internal_server_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 503,
"message": "Service temporarily unavailable",
"type": "service_unavailable_error",
"fallback_suggestion": "retry after 30 seconds"
}
}https://direct.evolink.ai, qui offre une meilleure prise en charge des modèles de texte et des connexions persistantes. https://api.evolink.ai est le point d’accès principal pour les services multimodaux et sert d’adresse de secours pour les modèles de texte.image_generation n’est actuellement disponible ni sur Grok 4.5 ni sur Grok 4.6 : sa déclaration est acceptée par compatibilité, mais l’outil est supprimé avant que la requête n’atteigne le modèle. Les valeurs tools[].type non reconnues sont rejetées avec un 400.Autorisations
##Toutes les API nécessitent une authentification Bearer Token##
Obtenir une clé API :
Visitez la Page de gestion des clés API pour obtenir votre clé API
Ajouter à l'en-tête de requête :
Authorization: Bearer YOUR_API_KEY
Corps
Modèle à appeler :
| ID du modèle | Positionnement |
|---|---|
grok-4.6 | Modèle xAI de raisonnement et d'appel d'outils, fenêtre de contexte de 500K ; ajoute le niveau de raisonnement xhigh ; connaissances arrêtées au 2026-02-01 |
grok-4.5 | Modèle xAI de raisonnement et d'appel d'outils, fenêtre de contexte de 500K ; niveaux de raisonnement jusqu'à high (xhigh est accepté mais rétrogradé en high) |
grok-4.6, grok-4.5 "grok-4.6"
Entrée pour le modèle : une chaîne simple, ou un tableau d'éléments d'entrée OpenAI Responses (par ex. {"role":"user","content":[...]}).
"Search the web for the latest SpaceX launch and summarize it in one sentence."
Indique s'il faut renvoyer une réponse en streaming (événements SSE, se terminant par response.completed). Par défaut false.
false
Nombre maximal de tokens à générer (tokens de raisonnement inclus).
2048
Contrôle de la profondeur de raisonnement, forme objet : {"effort": "low" | "medium" | "high" | "xhigh"}. Valeur par défaut high ; le raisonnement ne peut pas être désactivé. xhigh n'est pris en charge que par grok-4.6 — grok-4.5 accepte la valeur mais la rétrograde en high. Les tokens de raisonnement sont facturés comme des tokens de sortie et reportés dans usage.output_tokens_details.reasoning_tokens.
Show child attributes
Show child attributes
Déclarations d'outils. Outils côté serveur de xAI (facturés par appel réussi, frais non affectés par le multiplicateur de contexte long) :
| Type d'outil | Rôle | Prix par appel |
|---|---|---|
web_search | Rechercher sur Internet et consulter des pages web | $0.005 |
x_search | Rechercher des publications, profils et fils X | $0.005 |
code_execution | Exécuter du Python dans un bac à sable (code_interpreter accepté comme alias) | $0.005 |
attachment_search | Rechercher dans les fichiers joints à la conversation (peut être activé automatiquement lorsque l'entrée contient des fichiers) | $0.01 |
collections_search | Interroger des collections de documents téléversées (file_search accepté comme alias) | $0.0025 |
Les outils function classiques (appels de fonctions côté client) sont également pris en charge et n'entraînent aucun frais par appel.
image_generation n'est actuellement pas disponible : sa déclaration est acceptée par compatibilité, mais l'outil est supprimé avant que la requête n'atteigne le modèle. Les types d'outils non reconnus sont rejetés avec un 400.
Show child attributes
Show child attributes
[{ "type": "web_search" }]
Contrôle la sélection de l'outil : "auto" (par défaut) / "none" / "required", ou un objet imposant un outil précis, par ex. {"type": "web_search"}.
auto, none, required Réponse
Réponse générée avec succès (objet JSON, ou flux d'événements SSE se terminant par response.completed lorsque stream=true)
Identifiant unique de la réponse
"55d44212-8d5e-90cc-975f-36d341ce21f5"
Type de réponse
response "response"
Statut de la réponse
completed, incomplete, failed "completed"
Nom du modèle réellement utilisé
"grok-4.6"
Horodatage de création
1786538000
Éléments de sortie dans l'ordre de génération : éléments reasoning (résumé du raisonnement), éléments d'appel d'outils côté serveur tels que web_search_call / code_interpreter_call (le statut completed indique un appel réussi et facturable), puis un élément message final avec un contenu output_text.
Show child attributes
Show child attributes
Statistiques d'utilisation des tokens et des outils. À partir de 200K tokens dans le prompt, tous les types de tokens sont facturés au double ; les frais d'outils ne sont pas affectés par ce multiplicateur.
Show child attributes
Show child attributes