Chaindoc logoChaindoc

Last updated: April 28, 2026

Chaindoc REST API 参考

Chaindoc REST API 的完整端点参考。涵盖身份验证、文档、签名、媒体上传、嵌入式会话和区块链验证。

概述

API 使您能够以编程方式访问 Chaindoc 中的所有内容:文档签名、区块链验证和团队管理。它专供服务器到服务器使用,并支持公共和秘密 API 密钥。如需了解更多信息,请参阅 RFC 9110, HTTP 语义

  • 文档:在区块链上创建、更新和验证文档
  • 签名:发送签名请求并跟踪完成情况
  • 媒体:上传 PDF 秒、图像和视频(每个请求最多 10 个)
  • 合同:起草、发送、取消和终止具有可选付款条件的合同
  • 发票和交易:向代理商开具账单、节省费用的付款方式、跟踪结算
  • 模板:根据已发布的模板呈现文档、签名请求和合同
  • 嵌入式会话:为您的前端创建签名会话(使用 Embed SDK

验证

每个请求在授权标头中都需要一个 API 键。有两种类型:。如需了解更多信息,请参阅 RFC 6749, OAuth 2.0

按键类型

  • 公钥 (`pk_`)。只读,对前端代码安全
  • 密钥 (`sk_`)。完全读/写,仅限后端。切勿在客户端代码中公开。

获取钥匙

1订阅商业计划只有商业计划用户可以创建 API 个密钥

2导航至 API 访问转到仪表板中的设置 → API 访问

3创建API键单击创建 API 密钥按钮

4安全存放安全地存储密钥(仅显示一次)

使用API键

将您的 API 密钥包含在具有承载身份验证的授权标头中:

terminal
curl -X GET https://api.chaindoc.io/api/v1/me \
  -H "Authorization: Bearer sk_xxxxxxxxxxxxx"

评价mit

所有公共API端点都限制mit每个API密钥每60秒10个请求。当超过 limit 时,您将收到 429 Too Many Requests 响应。短暂延迟后退出并重试。

错误处理

HTTP 状态代码

  • 200 - 成功
  • 201 - 资源创建成功
  • 400 - 错误请求(验证错误)
  • 401 - 未经授权(API 键无效或丢失)
  • 403 - 禁止(权限不足)
  • 404 - 找不到资源
  • 429 - 请求过多(超出速率 limit)
  • 500 - 内部服务器错误

错误响应格式

terminal
{
  "statusCode": 400,
  "message": [
    "name must be a string",
    "recipients should not be empty"
  ],
  "error": "Bad Request"
}

验证错误将 `message` 作为人类可读字符串数组返回,每个失败的约束一个。对于非验证错误(401、403、404、500),`message` 是单个字符串。

一般API

获取API个关键信息

获取有关当前 API 键的信息。

GET /me

Authorization: Bearer sk_xxxxx

健康检查

验证 API 连接和密钥有效性。

GET /health

Authorization: Bearer sk_xxxxx

文档API

创建文档

创建一个带有区块链验证的新文档。当状态设置为“已发布”时,文档会自动在区块链上进行验证。

POST /documents

Headers:
Authorization: Bearer sk_xxxxx
Content-Type: application/json

更新文档

通过创建新版本来更新文档。保留以前的版本以供审计跟踪。

PUT /documents/:documentId

Authorization: Bearer sk_xxxxx
Content-Type: application/json

更新文档访问权限

更新文档访问控制设置。

PUT /documents/:documentId/rights

Authorization: Bearer sk_xxxxx
Content-Type: application/json

验证文件

使用区块链验证文件的真实性。返回带有交易哈希和链 ID 的验证状态。

POST /documents/verify

Authorization: Bearer pk_xxxxx
Content-Type: application/json

{
  "versionHash": "0x123abc...",
  "certificateHash": "0x456def..."
}

获取验证状态

获取文档版本的区块链验证状态。

GET /documents/versions/:versionId/verification

Authorization: Bearer sk_xxxxx

签名API

创建签名请求

为一个或多个收件人创建签名请求。启用前端集成的嵌入式流程。

curl -X POST https://api.chaindoc.io/api/v1/signatures/requests \
  -H "Authorization: Bearer sk_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "versionId": "f0b7721f-0399-4035-9b69-7b95d3a367f0",
    "recipients": [
      { "email": "signer@example.com", "signingMethod": "embedded" }
    ],
    "deadline": "2026-12-31T23:59:59Z",
    "embeddedFlow": true,
    "isKycRequired": false
  }'

预先放置的字段(高级)。 如果您上传自己的 PDF 并希望精确控制签名、缩写、日期、文本或复选框字段的显示位置,请在 `versionId` 旁边传递可选的 `fields` 数组。当您从模板渲染文档时(请参阅下面的模板API),放置的字段自动来自模板定义。跳过此选项。

terminal
{
  "fields": [
    {
      "signerEmail": "signer@example.com",
      "fieldType": "signature",
      "pageIndex": 0,
      "xPct": 0.15,
      "yPct": 0.78,
      "wPct": 0.25,
      "hPct": 0.05,
      "required": true,
      "label": "Client signature"
    },
    {
      "signerEmail": "signer@example.com",
      "fieldType": "date_signed",
      "pageIndex": 0,
      "xPct": 0.45,
      "yPct": 0.78,
      "wPct": 0.15,
      "hPct": 0.03
    }
  ]
}

获取签名请求状态

检查签名请求的状态并查看哪些签名者已完成签名。

GET /signatures/requests/:requestId/status

Authorization: Bearer sk_xxxxx

签署文件

签署文档(如果 API 密钥所有者是签名者)。

POST /signatures/sign

Authorization: Bearer sk_xxxxx
Content-Type: application/json

获取用户签名

获取经过身份验证的用户的所有签名。

GET /signatures?pageNumber=1&pageSize=10

Authorization: Bearer sk_xxxxx

获取签名请求

通过分页支持获取经过身份验证的用户的所有签名请求。

GET /signatures/requests?pageNumber=1&pageSize=10

Authorization: Bearer sk_xxxxx

媒体上传API

上传用于创建文档的文件。支持PDF、图像和视频。每个请求最多 10 个文件。

curl -X POST https://api.chaindoc.io/api/v1/media/upload \
  -H "Authorization: Bearer sk_xxxxx" \
  -F "media=@contract.pdf"

合约API

创建和管理从草稿到签署、生效和终止的合同生命周期。每份合同都包含一份文件、合同信息、可选付款条款和签署政策。支持支付的合约需要 Stripe Connect 账户。请参阅安全指南进行设置。

创建合同

从现有文档创建状态为 `draft` 的合同。付款条件是可选的。您可以稍后通过付款设置添加它们。

POST /contracts

Authorization: Bearer sk_xxxxx
Content-Type: application/json

列出合约

列出通过 API 创建的合约,带有分页和可选的状态/搜索过滤器。

GET /contracts?page=1&limit=10&status=active&search=acme

Authorization: Bearer sk_xxxxx

获得合同

获取完整的合同详细信息,包括付款条款、签署状态和合同信息。

GET /contracts/:contractId

Authorization: Bearer sk_xxxxx

获取合同状态

用于监控合同生命周期的轻量级端点,无需获取完整的有效负载。返回当前状态、签名进度和付款摘要。

GET /contracts/:contractId/status

Authorization: Bearer sk_xxxxx

获取合同活动

用于审核和 Webhook 协调的分页活动日志(创建、发送、签名、修改、终止等)。

GET /contracts/:contractId/activities?page=1&limit=20

Authorization: Bearer sk_xxxxx

设置付款条件

在`draft`份合同上附加或替换付款条款。当您创建合约 shell 第一个 并单独配置计费时很有用。

POST /contracts/:contractId/payment-setup

Authorization: Bearer sk_xxxxx
Content-Type: application/json

发送合同以供签署

将 `draft` 合约转换为 `pending_signature` 并通知双方。所有正文字段都是可选的。

POST /contracts/:contractId/send

Authorization: Bearer sk_xxxxx
Content-Type: application/json

取消合同

在任何人签署之前取消 `draft` 份合同(从未发送)或 `pending_signature` 份合同。不可逆转。

POST /contracts/:contractId/cancel

Authorization: Bearer sk_xxxxx

终止合同

终止`active`合同。对于 `mutual_approval` 合约,这会启动另一方必须确认的 `termination_pending` 流程;对于 `one_side` 份合同,它会立即终止。

POST /contracts/:contractId/terminate

Authorization: Bearer sk_xxxxx
Content-Type: application/json

合同发票 API

根据 `active` 合同向合同方开具账单。发票可以根据定期付款条件自动生成,也可以手动创建临时计费。支持 Stripe 的合约支持对已保存的付款方式进行收费。

创建发票

针对 `active` 合同创建手动发票。设置`sendImmediately: true`立即发送给合同方,设置`autoCharge: true`在发送时通过其保存的付款方式收费。

POST /contracts/:contractId/invoices

Authorization: Bearer sk_xxxxx
Content-Type: application/json

列出合同发票

使用分页和可选状态过滤器列出合同的所有发票。

GET /contracts/:contractId/invoices?page=1&limit=10&status=unpaid

Authorization: Bearer sk_xxxxx

获取发票

获取完整的发票详细信息,包括行项目、交易和 Stripe 结账 URL(如果适用)。

GET /contracts/:contractId/invoices/:invoiceUuid

Authorization: Bearer sk_xxxxx

发送发票

向合同方发送`draft`张发票。设置`autoCharge: true`以尝试立即通过保存的付款方式收费。

POST /contracts/:contractId/invoices/:invoiceUuid/send

Authorization: Bearer sk_xxxxx
Content-Type: application/json

收费发票

使用承包商保存的付款方式对已发送的发票进行收费。用于重试失败的付款或按需收费。

POST /contracts/:contractId/invoices/:invoiceUuid/charge

Authorization: Bearer sk_xxxxx

将发票标记为已付款

记录离线/外部结算。电汇、现金或通过其他铁路付款。记录手动交易以供审计。

POST /contracts/:contractId/invoices/:invoiceUuid/mark-paid

Authorization: Bearer sk_xxxxx
Content-Type: application/json

交易API

读取与合同发票链接的付款交易。交易捕获每次收费尝试(成功、失败或待处理)以及 Stripe 费用明细、净额和重试历史记录。

列出合约交易

列出合同发票中的所有交易。

GET /contracts/:contractId/transactions

Authorization: Bearer sk_xxxxx

获取交易

通过 UUID 获取单个交易的完整详细信息:金额、费用、收据 URL 和重试元数据。

GET /transactions/:transactionUuid

Authorization: Bearer sk_xxxxx

模板API

将已发布的模板呈现为草稿文档、签名请求或合同。传递变量值和槽分配。模板系统支持合约模板的每个签名者变量和基于角色的槽分配。

从模板创建文档

渲染带有变量的模板并创建一个新的草稿文档。这里不需要插槽分配。该端点仅生成文档外壳。

POST /templates/:templateId/documents

Authorization: Bearer sk_xxxxx
Content-Type: application/json

从模板创建签名请求

渲染模板、创建文档并立即发送以供签名。每个 `slotAssignment` 将模板签名者密钥绑定到真实的收件人电子邮件。

POST /templates/:templateId/signature-requests

Authorization: Bearer sk_xxxxx
Content-Type: application/json

从模板创建合同

渲染包含变量和合约信息的合同模板,创建合同并将其发送以在一次调用中进行签名。槽分配将模板签名者密钥绑定到角色 (`business` | `contragent`)。电子邮件取自 API 密钥所有者(企业)和 `contragent.email`。

POST /templates/:templateId/contracts

Authorization: Bearer sk_xxxxx
Content-Type: application/json

嵌入会话 API

在前端应用程序中创建用于文档或合同签署的嵌入式会话。会议有效期为 10 分钟。对于standa单独文档签名,请在`metadata`中传递`documentId`和`signatureRequestId`。对于合同签名,传递 `contractId` 和 Chaindoc 解析活动签名请求。

POST /embedded/sessions

Authorization: Bearer sk_xxxxx
Content-Type: application/json

接下来做什么

  • API 积分。常见模式、最佳实践和完整的工作流程示例
  • SDK。服务器 SDK 和嵌入 SDK 以及特定于框架的指南
  • Webhooks。设置实时事件通知
  • 安装。所有受支持框架的 npm 设置
  • 安全。 API 密钥管理和合规性