
China continental ya está disponible en ChatGPT, Gemini y Google
Usa country CN o HK en tareas CHATGPT, GEMINI y GOOGLE para ver las respuestas que reciben los usuarios de China continental y Hong Kong.

Envía un prompt a cualquier motor de IA compatible con una sola solicitud y recibe la respuesta como JSON estructurado, por webhook o por consulta.
POST /v1/async/task, para todos los motores. Elige el motor con taskType y el mercado con country.id, el status y las marcas de tiempo de la tarea envuelven una response propia de cada motor.GET /v1/async/task/{id} cuando estés listo.idempotencyKey: si envías la misma clave otra vez, recibes la tarea que ya creaste.Los motores de IA tardan de segundos a minutos en responder, así que cada solicitud se convierte en una tarea persistente. La tarea pasa de QUEUED a PROCESSING y termina como COMPLETED con la respuesta o como FAILED con el motivo. Si el motor sufre un error temporal, la tarea vuelve a la cola para otro intento, de modo que los fallos breves se reintentan antes de llegar a ti.
Añade webhook.url y enviaremos la tarea terminada a tu servidor, con hasta cinco intentos en unos 30 minutos. Las tareas terminadas también siguen disponibles para consulta durante 24 horas, así que el webhook y la consulta juntos cubren cada resultado.
Envía la solicitud con tu clave de API en la cabecera 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"
}'taskTypestringObligatorioCHATGPT o GOOGLE.payloadobjectObligatorioprompt o query, más country y las opciones del motor.webhook.urlstringidempotencyKeystringLa llamada responde al instante con la tarea en QUEUED. credits queda en 0 hasta que la tarea termina, y idempotencyKey vuelve tal como lo enviaste.
{
"success": true,
"task": {
"id": "…",
"taskType": "CHATGPT",
"status": "QUEUED",
"priority": 1,
"createdAt": "…",
"idempotencyKey": "laptop-cafes-us-0001"
},
"credits": { "creditsToCharge": 0, "creditsCharged": 0 }
}Lee la tarea con GET /v1/async/task/{id} cada pocos segundos hasta que status sea COMPLETED o FAILED. Los resultados siguen disponibles 24 horas después de terminar la tarea.
curl https://api.querying.ai/v1/async/task/$TASK_ID \
-H "Authorization: Bearer $QUERYING_API_KEY"Una tarea terminada lleva los credits cobrados y la response del motor. Esta es real, recortada para que se lea mejor.
{
"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 y al final COMPLETED con la respuesta o FAILED con error.credits.creditsChargedintegerCon webhook.url, la tarea terminada llega a tu servidor como un POST con los mismos task, credits y response que devuelve la consulta. Una tarea fallida llega igual, con response.error y 0 créditos cobrados. Tres cabeceras firman cada entrega:
querying-webhook-idstringquerying-webhook-timestampstringquerying-webhook-signaturestringv1, seguido del HMAC-SHA256 en base64 de {id}.{timestamp}.{body}, con el resumen SHA-256 de tu clave de API como clave.Comprueba la firma sobre el cuerpo tal como llega, antes de analizarlo, y acepta la entrega cuando coincide:
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)Responde con un estado 2xx en 30 segundos. Con otra respuesta, o pasados 30 segundos, la entrega se repite a los 2, 4, 8 y 16 minutos, cinco intentos en total, todos con el mismo querying-webhook-id.
Una solicitud rechazada responde al instante con success en false y un error con code, message y, en errores de campo, details. Queda fuera de la cola y cuesta 0 créditos.
VALIDATION_ERRORHTTP 400details indica el campo.MISSING_API_KEYHTTP 401Authorization, o su clave es desconocida, caducó o fue revocada.INSUFFICIENT_CREDITSHTTP 402KEY_SCOPE_DENIEDHTTP 403RESOURCE_ALREADY_EXISTSHTTP 409idempotencyKey, así que el envío sigue siendo una sola tarea. En un lote, el elemento cuenta como correcto.PAYLOAD_TOO_LARGEHTTP 413REGION_UNSUPPORTEDHTTP 422country queda fuera de la lista de países del motor. Reenviar da el mismo resultado, por eso details.retryable es false.PLAN_CONCURRENCY_LIMITHTTP 429Retry-After segundos.KEY_DAILY_CREDIT_LIMITHTTP 429Retry-After llega hasta la próxima medianoche UTC.QUEUE_BACKPRESSUREHTTP 429Retry-After segundos.Cada motor tiene su propio precio en créditos, y la tarea se cobra cuando se completa. Una tarea fallida libera los créditos que tenía reservados.

Usa country CN o HK en tareas CHATGPT, GEMINI y GOOGLE para ver las respuestas que reciben los usuarios de China continental y Hong Kong.

Usa payload.location en tareas GOOGLE, AIMODE y GOOGLE_SERP para ver la AI Overview, la respuesta de AI Mode y los resultados que ve un usuario en ese lugar.
Recibe las actualizaciones por correo.