
A China continental já está disponível no ChatGPT, no Gemini e no Google
Use country CN ou HK em tarefas CHATGPT, GEMINI e GOOGLE para receber as respostas que os usuários da China continental e de Hong Kong veem.

Envie um prompt a qualquer mecanismo de IA compatível com uma única requisição e receba a resposta em JSON estruturado, por webhook ou por consulta.
POST /v1/async/task, para todos os mecanismos. Escolha o mecanismo com taskType e o mercado com country.id, o status e os horários da tarefa envolvem uma response própria de cada mecanismo.GET /v1/async/task/{id} quando você quiser.idempotencyKey: enviar a mesma chave de novo devolve a tarefa que você já criou.Os mecanismos de IA levam de segundos a minutos para responder, por isso cada requisição vira uma tarefa persistente. A tarefa passa de QUEUED para PROCESSING e termina como COMPLETED com a resposta ou FAILED com o motivo. Se o mecanismo tiver um erro temporário, a tarefa volta para a fila e é tentada de novo, e as falhas breves se resolvem antes de chegar até você.
Adicione webhook.url e enviamos a tarefa concluída para o seu servidor, com até cinco tentativas em cerca de 30 minutos. As tarefas concluídas também ficam disponíveis para consulta por 24 horas, então webhook e consulta juntos cobrem todos os resultados.
Envie a requisição com a sua chave de API no cabeçalho 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"
}'taskTypestringObrigatórioCHATGPT ou GOOGLE.payloadobjectObrigatórioprompt ou query, mais country e as opções do motor.webhook.urlstringidempotencyKeystringA chamada responde na hora com a tarefa em QUEUED. credits fica em 0 até a tarefa terminar, e idempotencyKey volta como você enviou.
{
"success": true,
"task": {
"id": "…",
"taskType": "CHATGPT",
"status": "QUEUED",
"priority": 1,
"createdAt": "…",
"idempotencyKey": "laptop-cafes-us-0001"
},
"credits": { "creditsToCharge": 0, "creditsCharged": 0 }
}Leia a tarefa com GET /v1/async/task/{id} a cada poucos segundos até status virar COMPLETED ou FAILED. Os resultados ficam disponíveis por 24 horas após o fim da tarefa.
curl https://api.querying.ai/v1/async/task/$TASK_ID \
-H "Authorization: Bearer $QUERYING_API_KEY"Uma tarefa concluída traz os credits cobrados e a response do mecanismo. Esta é real, resumida para facilitar a leitura.
{
"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 e, no fim, COMPLETED com a resposta ou FAILED com error.credits.creditsChargedintegerCom webhook.url, a tarefa concluída chega ao seu servidor como um POST com os mesmos task, credits e response da consulta. Uma tarefa com falha chega do mesmo jeito, com response.error e 0 créditos cobrados. Três cabeçalhos assinam cada entrega:
querying-webhook-idstringquerying-webhook-timestampstringquerying-webhook-signaturestringv1, seguido do HMAC-SHA256 em base64 de {id}.{timestamp}.{body}, com o resumo SHA-256 da sua chave de API como chave.Confira a assinatura no corpo bruto, antes de interpretá-lo, e aceite a entrega quando ela confere:
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)Responda com um status 2xx em até 30 segundos. Com outra resposta, ou depois de 30 segundos, a entrega se repete após 2, 4, 8 e 16 minutos, cinco tentativas no total, todas com o mesmo querying-webhook-id.
Uma requisição recusada responde na hora com success em false e um error com code, message e, em erros de campo, details. Ela fica fora da fila e custa 0 créditos.
VALIDATION_ERRORHTTP 400details indica o campo.MISSING_API_KEYHTTP 401Authorization, ou a chave é desconhecida, expirou ou foi revogada.INSUFFICIENT_CREDITSHTTP 402KEY_SCOPE_DENIEDHTTP 403RESOURCE_ALREADY_EXISTSHTTP 409idempotencyKey, então o envio continua sendo uma única tarefa. Num lote, o item conta como sucesso.PAYLOAD_TOO_LARGEHTTP 413REGION_UNSUPPORTEDHTTP 422country está fora da lista de países do mecanismo. Reenviar dá o mesmo resultado, por isso details.retryable é false.PLAN_CONCURRENCY_LIMITHTTP 429Retry-After segundos.KEY_DAILY_CREDIT_LIMITHTTP 429Retry-After vai até a próxima meia-noite UTC.QUEUE_BACKPRESSUREHTTP 429Retry-After segundos.Cada mecanismo tem seu próprio preço em créditos, e a tarefa é cobrada quando é concluída. Uma tarefa com falha libera os créditos que havia reservado.

Use country CN ou HK em tarefas CHATGPT, GEMINI e GOOGLE para receber as respostas que os usuários da China continental e de Hong Kong veem.

Use payload.location em tarefas GOOGLE, AIMODE e GOOGLE_SERP para receber a AI Overview, a resposta do AI Mode e os resultados que um usuário vê naquele local.
Receba atualizações do produto por e-mail.