quickbooks-api
QuickBooks Online API reference for creating purchases, deposits, vendors, and querying accounting data. Use when working with QuickBooks entities, OAuth authentication, or financial data synchronization.
安装与使用
请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。
查看来源 ↗使用指南技能说明
QuickBooks API Reference
QuickBooks Online API 参考文档,用于金融交易和会计实体管理。
When to Use This Skill
- 创建 QuickBooks 工具插件
- 实现 Purchase/Deposit 实体
- 设置 QuickBooks OAuth 2.0
- 查询会计科目或供应商
- 映射 Mercury 交易到 QuickBooks
API Essentials
Base URL Pattern
https://quickbooks.api.intuit.com/v3/company/{realmId}/{entity}
重要: realmId 在所有请求中都是必需的,在 OAuth 回调中获取。
Authentication
headers = {
"Authorization": f"Bearer {access_token}",
"Accept": "application/json",
"Content-Type": "application/json"
}
Token 刷新由 Dify OAuth 系统自动处理。
Environments
| 环境 | Base URL |
|---|---|
| Sandbox | https://sandbox-quickbooks.api.intuit.com |
| Production | https://quickbooks.api.intuit.com |
Common Entities
Purchase (Expense)
{
"AccountRef": {"value": "35"},
"PaymentType": "CreditCard",
"EntityRef": {"value": "42", "type": "Vendor"},
"TxnDate": "2025-12-26",
"Line": [{
"Amount": 150.00,
"DetailType": "AccountBasedExpenseLineDetail",
"AccountBasedExpenseLineDetail": {
"AccountRef": {"value": "7"}
}
}]
}
Deposit (Income)
{
"DepositToAccountRef": {"value": "35"},
"TxnDate": "2025-12-26",
"Line": [{
"Amount": 1000.00,
"DetailType": "DepositLineDetail",
"DepositLineDetail": {
"AccountRef": {"value": "79"},
"Entity": {"value": "15", "type": "Customer"}
}
}]
}
Vendor
{
"DisplayName": "Acme Corp",
"CompanyName": "Acme Corporation",
"PrimaryEmailAddr": {"Address": "vendor@example.com"},
"PrimaryPhone": {"FreeFormNumber": "555-1234"}
}
Query Language (SQL-like)
-- 获取所有供应商
SELECT * FROM Vendor
-- 搜索供应商
SELECT * FROM Vendor WHERE DisplayName LIKE '%Staples%'
-- 按日期过滤
SELECT * FROM Purchase WHERE TxnDate >= '2025-01-01'
-- 分页
SELECT * FROM Entity STARTPOSITION 1 MAXRESULTS 100
OAuth Configuration
Provider YAML
identity:
name: quickbooks
label:
en_US: QuickBooks Online
credentials_schema:
- name: auth_type
type: select
options:
- value: oauth
label:
en_US: OAuth 2.0
oauth:
authorization_url: https://appcenter.intuit.com/connect/oauth2
token_url: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
scopes:
- com.intuit.quickbooks.accounting
Implementation Patterns
1. Idempotency Check (金融数据关键!)
def create_purchase(self, mercury_txn_id: str, ...):
# 检查是否已存在
query = f"SELECT * FROM Purchase WHERE PrivateNote LIKE '%{mercury_txn_id}%'"
existing = self._query(query)
if existing:
return {"status": "duplicate", "id": existing[0]["Id"]}
# 创建新的 purchase
# ... 在 PrivateNote 中存储 mercury_txn_id
2. Find or Create Vendor
def find_or_create_vendor(self, vendor_name: str):
# 搜索现有
query = f"SELECT * FROM Vendor WHERE DisplayName LIKE '%{vendor_name}%'"
vendors = self._query(query)
if vendors:
return vendors[0]
# 创建新的
response = requests.post(
f"{BASE_URL}/{realm_id}/vendor",
json={"DisplayName": vendor_name},
headers=headers
)
return response.json()["Vendor"]
3. Error Handling
# 常见错误
# 400: 无效数据 (检查必填字段)
# 401: Token 过期 (自动刷新)
# 409: 重复实体
# 429: 速率限制 (退避重试)
# 500: 服务器错误 (重试)
try:
response = requests.post(...)
response.raise_for_status()
except requests.exceptions.HTTPError as e:
if e.response.status_code == 409:
return {"status": "duplicate"}
elif e.response.status_code == 429:
time.sleep(2) # Rate limit backoff
# Retry...
else:
raise ToolProviderCredentialValidationError(str(e))
Mercury → QuickBooks Mapping
Debit Transaction (Expense) → Purchase
def map_debit_to_purchase(mercury_txn):
return {
"AccountRef": {"value": get_mercury_bank_account_id()},
"PaymentType": "CreditCard",
"EntityRef": {
"value": find_or_create_vendor(mercury_txn["merchant"]),
"type": "Vendor"
},
"TxnDate": mercury_txn["date"],
"PrivateNote": f"Mercury: {mercury_txn['transaction_id']} - {mercury_txn['description']}",
"Line": [{
"Amount": abs(mercury_txn["amount"]),
"DetailType": "AccountBasedExpenseLineDetail",
"Description": mercury_txn["description"],
"AccountBasedExpenseLineDetail": {
"AccountRef": {"value": map_to_expense_account(mercury_txn)}
}
}]
}
Credit Transaction (Income) → Deposit
def map_credit_to_deposit(mercury_txn):
return {
"DepositToAccountRef": {"value": get_mercury_bank_account_id()},
"TxnDate": mercury_txn["date"],
"PrivateNote": f"Mercury: {mercury_txn['transaction_id']}",
"Line": [{
"Amount": mercury_txn["amount"],
"DetailType": "DepositLineDetail",
"DepositLineDetail": {
"AccountRef": {"value": get_income_account_id()},
}
}]
}
Testing
Sandbox Environment
- 在 developer.intuit.com 创建沙箱公司
- 获取沙箱 realm_id
- 使用沙箱 OAuth 凭据
- 测试所有实体创建
- 在沙箱 QuickBooks 中验证数据
Common Test Cases
# Test 1: 创建供应商
vendor = create_vendor("Test Vendor")
assert vendor["Id"] is not None
# Test 2: 创建采购
purchase = create_purchase({
"transaction_id": "test_txn_123",
"amount": -100.00,
"merchant": "Test Vendor",
"date": "2025-12-26"
})
assert purchase["status"] == "created"
# Test 3: 防重复
duplicate = create_purchase({...}) # 相同 txn_id
assert duplicate["status"] == "duplicate"
# Test 4: 查询
results = query("SELECT * FROM Vendor WHERE DisplayName = 'Test Vendor'")
assert len(results) > 0
Best Practices
- 始终检查重复 - 使用 PrivateNote 存储 Mercury 交易 ID
- 缓存会计科目表 - 加载一次,重复使用
- 处理速率限制 - 实现指数退避
- 正确使用 realm_id - 所有 API URL 都需要
- 先在沙箱测试 - 不要用生产数据测试
- 记录所有 API 调用 - 用于审计和调试
- 发送前验证数据 - 检查必填字段
-
使用 minorversion 参数 -
?minorversion=65获取最新功能
Rate Limit Strategy
import time
MAX_REQUESTS_PER_SECOND = 5
request_times = []
def rate_limit():
now = time.time()
# 移除超过 1 秒的请求
request_times[:] = [t for t in request_times if now - t < 1]
if len(request_times) >= MAX_REQUESTS_PER_SECOND:
sleep_time = 1 - (now - request_times[0])
if sleep_time > 0:
time.sleep(sleep_time)
request_times.append(time.time())
Quick Reference
Entity Endpoints
| Entity | Endpoint |
|---|---|
| Vendor | /v3/company/{realmId}/vendor |
| Purchase | /v3/company/{realmId}/purchase |
| Deposit | /v3/company/{realmId}/deposit |
| Account | /v3/company/{realmId}/account |
| Query | /v3/company/{realmId}/query?query={sql} |
OAuth Scopes
-
com.intuit.quickbooks.accounting- 完整会计访问
Required Fields
| Entity | Required Fields |
|---|---|
| Purchase | AccountRef, PaymentType, Line[] |
| Deposit | DepositToAccountRef, Line[] |
| Vendor | DisplayName |
Related Skills
- 01-design: 设计阶段
- 02-api-reference: 通用 API 参考收集指南
- 03-development: 开发实现
- 04-testing: 测试验证
- 05-packaging: 打包发布
Reference Documents
-
archive/QuickBooks_API_Documentation.md- 完整 API 参考 -
QuickBooks_Payments_API_Documentation.md- Payments API 参考 -
archive/solution-design.md- 架构和设计决策
使用示例
查看来源仓库中的使用示例与配置说明。
查看来源 ↗来源历史
- 收录时间
- 2026-01-20
- 索引更新时间
- 2026-01-26
- Branch
- main
收录与同步日期属于本站记录。源码修改历史请查看来源仓库。
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!