
ChatGPT、Gemini、Googleで中国本土に対応しました
CHATGPT、GEMINI、GOOGLEのタスクでcountryをCNまたはHKにすると、中国本土と香港のユーザーが見る回答を取得できます。

1回のリクエストで対応するAIエンジンに質問を送り、回答を構造化されたJSONとしてwebhookまたはポーリングで受け取れます。
POST /v1/async/taskを使います。taskTypeでエンジンを、countryで市場を選びます。responseを共通の形式が包みます。タスクのid、status、日時はいつも同じ場所に入ります。GET /v1/async/task/{id}で取得します。idempotencyKeyで安全に再試行できます。同じキーで送り直すと、作成済みのタスクがそのまま返ります。AIエンジンの回答には数秒から数分かかるため、すべてのリクエストは確実に保存されるタスクになります。タスクはQUEUEDからPROCESSINGへ進み、回答付きのCOMPLETEDか理由付きのFAILEDで終わります。エンジン側で一時的なエラーが起きるとタスクはキューに戻って再試行されるため、短い不調はお客様に届く前に処理されます。
webhook.urlを指定すると完了したタスクをサーバーへ送信し、約30分のあいだに最大5回まで送ります。完了したタスクは24時間ポーリングでも取得できるため、webhookとポーリングを組み合わせればすべての結果を確実に受け取れます。
API キーを 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"
}'taskTypestring必須CHATGPT や GOOGLE などを指定します。payloadobject必須prompt または query に、country とエンジンごとのオプションを加えます。webhook.urlstringidempotencyKeystring呼び出すと QUEUED のタスクがすぐに返ります。credits はタスクが終わるまで0で、idempotencyKey は送った値のまま返ります。
{
"success": true,
"task": {
"id": "…",
"taskType": "CHATGPT",
"status": "QUEUED",
"priority": 1,
"createdAt": "…",
"idempotencyKey": "laptop-cafes-us-0001"
},
"credits": { "creditsToCharge": 0, "creditsCharged": 0 }
}status が COMPLETED か FAILED になるまで、数秒ごとに GET /v1/async/task/{id} でタスクを取得します。結果はタスクの完了から24時間取得できます。
curl https://api.querying.ai/v1/async/task/$TASK_ID \
-H "Authorization: Bearer $QUERYING_API_KEY"完了したタスクには、差し引かれた credits とエンジンの response が入ります。実際のタスクを、長さを抑えて抜粋しています。
{
"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 を経て、回答付きの COMPLETED か error 付きの FAILED で終わります。credits.creditsChargedintegerwebhook.url を指定すると、完了したタスクが取得時と同じ task、credits、response を持つ POST としてサーバーに届きます。失敗したタスクも同じ形で、response.error と差し引き0クレジットを持って届きます。すべての配信に3つの署名ヘッダーが付きます。
querying-webhook-idstringquerying-webhook-timestampstringquerying-webhook-signaturestringv1, に続けて、{id}.{timestamp}.{body} の base64 HMAC-SHA256。鍵は API キーの SHA-256 ダイジェストです。本文をパースする前に、受け取ったままの本文で署名を確かめ、一致した配信を受け付けます。
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)30秒以内に 2xx のステータスで応答してください。それ以外の応答や30秒を超えた場合は、2分、4分、8分、16分後に再配信し、合計5回試みます。どの試行にも同じ querying-webhook-id が付きます。
拒否されたリクエストは、success が false で、code、message、フィールドのエラーでは details を持つ error をすぐに返します。キューの外で終わるため、クレジットは0です。
VALIDATION_ERRORHTTP 400details に該当するフィールドが入ります。MISSING_API_KEYHTTP 401Authorization ヘッダーが欠けているか、キーが誤っている、期限切れ、または無効化済みです。INSUFFICIENT_CREDITSHTTP 402KEY_SCOPE_DENIEDHTTP 403RESOURCE_ALREADY_EXISTSHTTP 409idempotencyKey のタスクがすでにアカウントにあるため、タスクは1件のままです。バッチではその項目を成功として扱います。PAYLOAD_TOO_LARGEHTTP 413REGION_UNSUPPORTEDHTTP 422country がエンジンの対応国の外にあります。再送しても同じ結果になるため、details.retryable は false です。PLAN_CONCURRENCY_LIMITHTTP 429Retry-After 秒後に再送してください。KEY_DAILY_CREDIT_LIMITHTTP 429Retry-After は次の UTC 午前0時までです。QUEUE_BACKPRESSUREHTTP 429Retry-After 秒後に再送してください。エンジンごとにクレジット単価が決まっており、タスクの完了時に課金されます。失敗したタスクは予約していたクレジットを返却します。

CHATGPT、GEMINI、GOOGLEのタスクでcountryをCNまたはHKにすると、中国本土と香港のユーザーが見る回答を取得できます。

GOOGLE、AIMODE、GOOGLE_SERPのタスクにpayload.locationを指定すると、その場所にいるユーザーが見るAI Overview、AI Modeの回答、検索結果を取得できます。
製品の更新をメールでお届けします。