
La Chine continentale est désormais prise en charge sur ChatGPT, Gemini et Google
Avec country CN ou HK, les tâches CHATGPT, GEMINI et GOOGLE renvoient les réponses que voient les utilisateurs de Chine continentale et de Hong Kong.

Envoyez un prompt au moteur IA de votre choix en une seule requête et recevez la réponse en JSON structuré, par webhook ou par interrogation.
POST /v1/async/task, pour tous les moteurs. Choisissez le moteur avec taskType et le marché avec country.id, le status et les horodatages de la tâche entourent une response propre à chaque moteur.GET /v1/async/task/{id} quand vous êtes prêt.idempotencyKey : renvoyer la même clé retourne la tâche déjà créée.Les moteurs IA mettent de quelques secondes à quelques minutes à répondre, chaque requête devient donc une tâche durable. Une tâche passe de QUEUED à PROCESSING et se termine en COMPLETED avec la réponse ou en FAILED avec la raison. En cas d’erreur temporaire du moteur, la tâche retourne dans la file pour une nouvelle tentative : les incidents brefs sont relancés avant de vous parvenir.
Ajoutez webhook.url et nous envoyons la tâche terminée à votre serveur, avec jusqu’à cinq tentatives sur environ 30 minutes. Les tâches terminées restent aussi disponibles en interrogation pendant 24 heures : webhook et interrogation réunis couvrent chaque résultat.
Envoyez la requête avec votre clé API dans l’en-tête Authorization.
curl -X POST https://api.querying.ai/v1/async/task \
-H "Authorization: Bearer $QUERYING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"taskType": "CHATGPT",
"payload": {
"prompt": "Best coffee shops near me for working on a laptop",
"country": "US"
},
"webhook": { "url": "https://your-server.example.com/hooks/querying" },
"idempotencyKey": "laptop-cafes-us-0001"
}'taskTypestringObligatoireCHATGPT ou GOOGLE.payloadobjectObligatoireprompt ou query, plus country et les options du moteur.webhook.urlstringidempotencyKeystringL’appel répond aussitôt avec la tâche en QUEUED. credits reste à 0 jusqu’à la fin de la tâche, et idempotencyKey revient tel que vous l’avez envoyé.
{
"success": true,
"task": {
"id": "…",
"taskType": "CHATGPT",
"status": "QUEUED",
"priority": 1,
"createdAt": "…",
"idempotencyKey": "laptop-cafes-us-0001"
},
"credits": { "creditsToCharge": 0, "creditsCharged": 0 }
}Lisez la tâche avec GET /v1/async/task/{id} toutes les quelques secondes jusqu’à ce que status vaille COMPLETED ou FAILED. Les résultats restent disponibles 24 heures après la fin de la tâche.
curl https://api.querying.ai/v1/async/task/$TASK_ID \
-H "Authorization: Bearer $QUERYING_API_KEY"Une tâche terminée porte les credits débités et la response du moteur. Celle-ci est réelle, raccourcie pour la lecture.
{
"success": true,
"task": {
"id": "e5aba119-a26e-4f82-a965-35c9234a428b",
"taskType": "CHATGPT",
"status": "COMPLETED",
"createdAt": "2026-10-02T15:41:03.858Z"
},
"credits": { "creditsToCharge": 2, "creditsCharged": 2 },
"response": {
"text": "Here are several **nearby cafés that look particularly suitable for laptop work**, based on current local listings and work-friendly details:\n…",
"sources": [
{
"position": 1,
"url": "https://awifiplace.com/cities/new-york",
"label": "Best Coffee Shops to Work in New York (2026) | 103 Cafes with WiFi"
}
],
"searchQueries": [
"best coffee shops for laptop work near me wifi outlets"
]
}
}task.statusstringQUEUED, PROCESSING, puis COMPLETED avec la réponse ou FAILED avec error.credits.creditsChargedintegerAvec webhook.url, la tâche terminée arrive sur votre serveur en POST, avec les mêmes task, credits et response que l’interrogation. Une tâche en échec arrive de la même façon, avec response.error et 0 crédit débité. Trois en-têtes signent chaque livraison :
querying-webhook-idstringquerying-webhook-timestampstringquerying-webhook-signaturestringv1, suivi du HMAC-SHA256 en base64 de {id}.{timestamp}.{body}, avec pour clé l’empreinte SHA-256 de votre clé API.Vérifiez la signature sur le corps brut, avant de l’analyser, et acceptez la livraison quand elle correspond :
import base64
import hashlib
import hmac
import os
import time
def verify_webhook(headers, body: bytes) -> bool:
"""body is the raw request body, before json.loads."""
task_id = headers["querying-webhook-id"]
timestamp = headers["querying-webhook-timestamp"]
key = hashlib.sha256(os.environ["QUERYING_API_KEY"].encode()).digest()
signed = f"{task_id}.{timestamp}.".encode() + body
digest = hmac.new(key, signed, hashlib.sha256).digest()
expected = "v1," + base64.b64encode(digest).decode()
given = headers.get("querying-webhook-signature", "")
fresh = abs(time.time() - int(timestamp)) <= 300
return fresh and hmac.compare_digest(expected, given)Répondez avec un statut 2xx en moins de 30 secondes. Après toute autre réponse, ou au-delà de 30 secondes, la livraison repart après 2, 4, 8 et 16 minutes, soit cinq tentatives au total, toutes avec le même querying-webhook-id.
Une requête refusée répond aussitôt avec success à false et un error contenant code, message et, pour une erreur de champ, details. Elle reste hors de la file et coûte 0 crédit.
VALIDATION_ERRORHTTP 400details indique le champ.MISSING_API_KEYHTTP 401Authorization manque, ou sa clé est inconnue, expirée ou révoquée.INSUFFICIENT_CREDITSHTTP 402KEY_SCOPE_DENIEDHTTP 403RESOURCE_ALREADY_EXISTSHTTP 409idempotencyKey existe déjà sur votre compte : l’envoi reste une seule tâche. Dans un lot, l’élément compte comme réussi.PAYLOAD_TOO_LARGEHTTP 413REGION_UNSUPPORTEDHTTP 422country est hors de la liste des pays du moteur. Un renvoi donne le même résultat, d’où details.retryable à false.PLAN_CONCURRENCY_LIMITHTTP 429Retry-After secondes.KEY_DAILY_CREDIT_LIMITHTTP 429Retry-After court jusqu’au prochain minuit UTC.QUEUE_BACKPRESSUREHTTP 429Retry-After secondes.Chaque moteur a son propre prix en crédits, et une tâche est facturée lorsqu’elle se termine. Une tâche en échec libère les crédits qu’elle avait réservés.

Avec country CN ou HK, les tâches CHATGPT, GEMINI et GOOGLE renvoient les réponses que voient les utilisateurs de Chine continentale et de Hong Kong.

Avec payload.location, les tâches GOOGLE, AIMODE et GOOGLE_SERP renvoient l’AI Overview, la réponse d’AI Mode et les résultats vus par un utilisateur sur place.
Recevez les mises à jour par e-mail.