QannasAPI

调用前先预估:免费为任何操作报价

你将构建: 一个两步模式:先为调用报价,再对照预算检查,通过后才真正执行。最终你会得到一个可以包裹目录中任何操作的辅助函数。

分类API 基础
使用的操作POST /v1/data/{action}:estimatePOST /v1/data/contacts/find-email
积分免费 —— 这些端点从不计费
测试密钥可用是 —— 可在 qk_test_ 上运行,零积分
预计耗时~5 分钟
前置条件一个工作区、一把 qk_test_ 或 qk_live_ 密钥,以及 curl 或任意 HTTP 客户端。

预估端点

每个计费操作都有对应的预估。取操作路径,追加 :estimate,再发送你本来就要发送的同一个请求体。你会拿到这次具体调用的积分成本,而询问本身不收费。

estimate.sh
# Append :estimate to any action path. Costs nothing.
curl -X POST https://api.qannasapi.com/v1/data/contacts/find-email:estimate \
  -H "Authorization: Bearer $QANNAS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "Jane Doe, Acme Logistics"}'

读取报价

响应使用标准信封 —— status、request_id、data —— 报价就在 data 里。由于预估免费,预估响应上的 X-Credits-Charged 恒为 0。

estimate response
# < HTTP/1.1 200 OK
# < X-Credits-Charged: 0     # asking is always free

{
  "status": "OK",
  "request_id": "req_...",
  "data": { /* the quote for this exact call */ }
}

报价、检查、再运行

有用的形态是一道闸门:先预估,与你自己的预算比较,通过了才执行。两次调用用的是同一个请求体,所以这道闸门只多花你一次请求,零积分。

quote_then_call.py
import os, requests

API = "https://api.qannasapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['QANNAS_API_KEY']}"}

def quote_then_call(action, body, budget):
    # 1 — free quote, same body as the real call
    quote = requests.post(
        f"{API}/v1/data/{action}:estimate", json=body, headers=HEADERS
    ).json()

    # 2 — gate on your own budget before spending anything
    if cost_of(quote) > budget:
        raise RuntimeError("quote exceeds budget")

    # 3 — run it
    return requests.post(
        f"{API}/v1/data/{action}", json=body, headers=HEADERS
    )

工作流的报价方式相同

服务端工作流用 dry_run 代替 :estimate 后缀 —— 发送 dry_run: true 就能拿到逐步明细,且不会真正执行。同样的思路,同样的零成本。

workflow-quote.sh
# Workflows use dry_run instead of a :estimate suffix.
curl -X POST https://api.qannasapi.com/v1/data/workflows/lead-list \
  -H "Authorization: Bearer $QANNAS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"inputs": {"industry": "logistics"}, "limit": 25, "dry_run": true}'

# < X-Credits-Charged: 0   # a dry run never bills

小结

模式做法
为操作报价POST /v1/data/{action}:estimate,带上你打算发送的请求体
为工作流报价POST /v1/data/workflows/{name},带 dry_run: true
预估的成本零 —— 预估的 X-Credits-Charged 恒为 0
信封{ status, request_id, data } —— 预估与真实调用完全一致
这个数字的含义最坏情况,假设每一步都能找到结果

上线检查清单

  • 把昂贵的或由用户触发的调用放在预估闸门之后。
  • 按预估做预算,再按 X-Credits-Charged 对账。
  • 余额为零时报价依然可用 —— 预估永远免费。
  • 预估要发送与真实调用相同的请求体,否则报价不会吻合。

下一步

先运行预估。它不花任何费用,用的正是计量器将要套用的那套算术。