跳到主要内容

合同文件

合同 PDF 分两步上传:

  1. 通过 API 获取上传 URL。
  2. 将文件直接上传到该 URL。

文件规则:

  • 按自动读取的要求,上传不带密码的 PDF。
  • 当 signature_method: external 时,请上传已签署的合同。
  • 合同处于 pending_submission 期间,新的上传会替换之前的文件。
  • 提交审核时文件会被冻结,之后无法再更换。

获取上传 URL​

适用范围
角色主机所需权限
管理人manager-api写入
顾问consultant-api创建费用合同

各主机的 Base URL:环境(主机)。

ENDPOINT
/expense_contract/fund_class/{fund_class_key}/contract/{contract_key}/document/upload_url
方法
GET

路径参数​

参数类型说明
fund_class_keystring基金类别的 key(UUID)。
contract_keystring合同的 key(UUID)。

响应​

STATUS
200

返回合同,结构见合同字段,并附加字段 upload_url。

Trecho da resposta
{
"contract_key": "3f2b8c1e-7d4a-4e9b-9a61-0c5d2e8f4b17",
"status": "pending_submission",
"upload_url": {
"url": "https://<link-temporario-de-envio>",
"fields": {
"key": "3f2b8c1e-7d4a-4e9b-9a61-0c5d2e8f4b17_draft",
"x-amz-algorithm": "AWS4-HMAC-SHA256",
"x-amz-credential": "<credential>",
"x-amz-date": "20261109T141000Z",
"x-amz-security-token": "<token>",
"policy": "<policy>",
"x-amz-signature": "<signature>"
}
}
}
字段类型说明
upload_url.urlstring文件的上传地址。
upload_url.fieldsobject随文件一起发送的字段。请全部发送,不要修改名称或值。不要在代码中写死字段列表:具体的字段集合可能会变化。

上传文件​

向 upload_url.url 发起 multipart/form-data 的 POST:

  • 包含 upload_url.fields 中的所有字段。
  • 将文件放在 file 字段中,作为表单的最后一个字段。
  • 不要携带 QI Tech 的认证请求头:此调用直接发往存储服务。

该 URL 3 分钟后过期,接受最大 50 MB 的文件。

import requests

upload = response_body["upload_url"]

with open("contrato_auditoria_2027.pdf", "rb") as arquivo:
resposta = requests.post(
upload["url"],
data=upload["fields"],
files={"file": arquivo},
)

resposta.raise_for_status()

返回 204 表示上传完成。没有确认调用:API 只会在提交审核时校验文件。如果 URL 已过期,请重新获取。

如需核对已上传的文件,可通过合同查询中的 download_url 下载。

错误​

状态code发生情形
404ECT000005基金类别不存在,或您无权访问该基金类别。
404ECT000009该基金类别中不存在此合同。
409ECT000017合同不处于 pending_submission:文件已被冻结,不能更换。
409ECT000046合同由 QI Tech 在基金设立时创建,不接受此调用。

认证、权限和主机相关错误:参见 API 错误。

下一步​

提交审核:将合同提交给 QI Tech 审核。