跳转到主要内容
每个请求都使用你的合作伙伴 API 密钥签名。Polymarket 仅根据密钥识别你的平台,从不依据请求体,因此请求只能读取和创建你自己的交易。 API 密钥用于识别你的平台,但不授权转移资金:每个交易对手方通过其订单签名授权自己的一方。

你的 API 密钥

Polymarket 在合作伙伴接入时为每个合作伙伴签发 API 密钥:
  • 密钥 ID:公开部分,随每个请求发送。
  • Secret:base64url 编码的字符串,通过安全渠道一次性提供。用作 HMAC 密钥前,请先将其解码为字节。

签署请求

除 GET /v1/time 外,每个请求都需要签名:
1

创建请求时间戳

首先,为每个请求创建一个以秒为单位的新 Unix 时间戳。它与服务器时间的偏差必须在 30 秒以内,无论偏快还是偏慢。请参阅保持时钟同步。
2

创建请求签名

然后,将时间戳、大写 HTTP 方法、请求路径和实际发送的序列化请求体直接连接,不加分隔符。再使用经 base64url 解码的 API 密钥 secret 对结果签名:
其中:
  • request_path 仅为 URL 路径,查询字符串不参与签名。
  • body 是实际发送的字节。GET 请求的请求体为空。请只序列化一次请求体,并在签名和请求中复用同一字符串,以避免键顺序或空白字符导致的不一致。
  • rfq_signature 使用带填充的 base64url 编码(RFC 4648 §5),不是十六进制,也不是标准 base64。
以下辅助函数为请求生成三个请求头:
使用以下输入检查你的实现:
3

发送经过身份验证的请求

最后,将密钥 ID、时间戳和签名作为请求头发送。此请求用于验证一笔交易的条款:
每个经过身份验证的请求都使用相同的三个请求头:

保持时钟同步

RFQ-Timestamp 与服务器时间的偏差必须在 30 秒以内,无论偏快还是偏慢。请通过 NTP 保持时钟同步。如果请求开始返回 401,请将你的时钟与服务器时钟比较:GET /v1/time 无需身份验证。
响应体返回服务器时间:
timestamp 是以 Unix 秒表示的服务器时间,格式与 RFQ-Timestamp 相同。

WebSocket 身份验证

交易状态流只在升级请求时进行一次身份验证。像任何 GET 请求一样签名(请求体为空),并在握手时发送相同的三个请求头:
之后,该流只推送你自己的交易。请参阅跟踪交易。

身份验证错误

身份验证失败的请求返回 401,错误码为 authentication_failed。缺少请求头、时间戳不是整数 Unix 秒、时间戳超出 30 秒窗口,这几种情况各有不同的错误消息。出于安全考虑,未知或已撤销的密钥 ID 与签名不匹配共用同一条通用消息。