所有主题

从这里开始

你的一天

商机与销售流程

公司与联系人

会议、任务与时间线

邮件与日历

AI

仪表盘

团队与安全

你的数据

设置

方案

Ordo 的 API

让其他程序也能使用你在 Ordo 的数据

示意图 · 创建一把新的 API 密钥,再回应一个请求
本页内容 13 个段落
重点
  • 管理员帮另一个程序创建一把 API 密钥
  • 每把密钥只能做它所属的人在 Ordo 能做的事
  • 发生事情时,Webhook 会通知你的程序

在哪里:设置 → 连接(管理员)

有了 API 密钥,你们的网站、自己写的程序、Make、n8n 或 Zapier 都可以读取和修改公司、联系人和商机。会议和任务也一样,还可以在公司、联系人或商机的时间线上写记录。API 是程序和程序之间沟通的方式,API 密钥就像是给程序用的密码。Webhook 则是反过来:发生事情时,Ordo 会主动通知你的程序

试试看

在 Ordo 里
  1. 设置
  2. 连接
  3. 新建 API 密钥

帮密钥取个名称,例如“Zapier”或“我们的网站”。在“密钥属于谁”选一个人,再点“创建密钥”。请马上复制密钥,Ordo 只会显示这一次

运作方式

  • 密钥属于谁:每把密钥都属于一个人,只能做这个人在 Ordo 能做的事。销售的密钥只看得到销售自己的数据,经理的密钥看得到团队的数据,管理员的密钥看得到全部
  • 规则都一样:密钥和画面用的是同一套规则。变更记录会把每次修改,记成密钥所属的人做的
  • 只显示一次:新的密钥只会显示一次。请马上复制,贴到另一个程序里
  • 收回:在密钥旁边点“收回”,这把密钥就会立刻失效
  • 管理员都会知道:有人创建密钥时,其他每位管理员都会在铃铛里收到通知

每个请求都要附上密钥

请求就是程序发给 Ordo 的一条消息,例如“把公司列表发给我”。程序每次送出请求,都要在 Authorization 标头附上密钥。标头就是请求开头的一行

GET https://app.ordo-crm.com/api/v1/companies
Authorization: Bearer ordo_w1a2b3c4d5e6_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • Ordo Cloud:网址是 https://app.ordo-crm.com。密钥本身就说明了它属于哪家公司
  • Ordo On-site:网址是你们自己的 Ordo,例如 https://ordo.yourcompany.com。只有在你们的 Ordo 开放到互联网时,办公室以外的程序才连得到它。做法请看 Setup guide 里的“Use Ordo outside the office”

用 JSON 传数据,并加上 Content-Type: application/json。JSON 是一种用文字写数据的简单格式。时间一律是 UTC,例如 2026-11-03T08:00:00Z。日期的写法像 2026-11-03

用量上限

  • 每把密钥每分钟最多 60 个请求
  • 整家公司每天最多 10,000 个请求。每天从 UTC 午夜重新计算

超过上限时,Ordo 会返回 429,并附上 Retry-After 标头,告诉你要等几秒

程序可以做什么

请求做什么
GET /api/v1/<things>一份列表,最新的在前
GET /api/v1/<things>/<id>其中一笔
POST /api/v1/<things>添加一笔。Ordo 会返回 201
PATCH /api/v1/<things>/<id>修改:只改你送出的字段

<things> 可以是 companies(公司)、people(联系人)、deals(商机)、activities(会议和任务)或 notes(时间线上的记录)。通过 API 不会删除任何东西

列表

列表会一页一页传回来:

{ "data": [ { "id": 7, "name": "Acme Robotics", "...": "..." } ], "has_more": true, "next_offset": 50 }

想指定列表要显示什么,就在网址的 ? 后面加上下面这些,例如 /api/v1/[email protected]。两个之间用 & 隔开

加上做什么
limit=一页几笔:1 到 100,默认 50
offset=这一页从哪里开始。请用上一页的 next_offset
q=搜索名称、邮箱地址和网站
created_since=、updated_since=只要某个日期或时间之后添加或修改的
sort=updated最近修改的排在前面。默认是最新的排在前面
email=联系人:用这个邮箱地址的人
company_id=联系人、商机、活动:这家公司的
stage=商机:在这个阶段的,例如 stage=Won
deal_id=、person_id=、type=、status=活动:和这笔商机或这个人有关的。type=Task(任务)或 Meeting(会议)。status=Planned(已计划)、Done(已完成)或 Canceled(已取消)

字段

字段就是一条记录里的一项,例如名称或负责人。API 用的名称和 Ordo 的画面一样:公司是 companies,联系人是 people,商机是 deals

公司

字段说明
id由 Ordo 设置
name必填。公司名称,不会有两家公司同名
statusProspect(潜在客户)、Customer(客户)或 Inactive(沉睡)
company_type、tier公司类型。等级由 Ordo 根据类型设置
industry、website、employees、country、address、phone、email、summary公司的基本信息,和公司页面上的一样
owner_id、owner负责人和他的名字。添加的每一条记录都属于密钥所属的人,除非你给了 owner_id。销售的密钥一律把销售自己设成负责人
created_at、updated_at、url由 Ordo 设置。url 会在 Ordo 打开这条记录

联系人

字段说明
name必填
company_id、company必填:公司的 ID,或在 company 填公司名称。填名称的话,Ordo 会用同名的公司,没有就添加一家。两个都没填时,Ordo 会用工作邮箱找出公司
email、job_title、phone、source、buying_rolebuying_role 可以是 Decision Maker(决策者)、Influencer(影响者)、Blocker(阻碍者)或 Unknown(未知)
primary_contact由 Ordo 设置:这家公司的主要联系人
owner_id、owner、created_at、updated_at、url和公司一样

商机

字段说明
name、company_id(或 company)必填
main_contact_id、main_contact这家公司里的联系人
amount、currencycurrency 的写法像 USD 或 TWD。没填的话,Ordo 会用设置 → 币种里默认的商机币种
stage这笔商机的销售流程里的一个阶段,例如默认的 Discovery(需求挖掘)、Proposal(方案报价)、Won(成交)或 Lost(未成交)
probability由 Ordo 按阶段设置
close_date预计成交日
closed_on、loss_reason成交或未成交的日期,以及未成交的原因
why_they_buy、blocking商机页面上的“购买动机”和“阻碍因素”
pipeline_id、owner_id、owner、created_at、updated_at、url这笔商机的销售流程。其他的和公司一样

活动:会议和任务

字段说明
subject必填:主题
typeTask(任务)或 Meeting(会议)
format会议才有:Online(线上)或 Offline(线下)
statusPlanned(已计划)、Done(已完成)或 Canceled(已取消)
priorityLow(低)、Normal(普通)、High(高)或 Urgent(紧急)
due_date、due_time、length_minutesdue_time 和 length_minutes 是会议用的
company_id、person_id、deal_id、notes它和哪家公司、哪个联系人、哪笔商机有关,以及它的备注
completed_on完成时由 Ordo 设置
owner_id、owner、created_at、updated_at、url和公司一样

同一个还没完成的任务,Ordo 不会创建两次。同一个任务的意思是主题一样,而且是同一条记录、同一个人的。这时 Ordo 会回传已经有的那个任务,并加上 "existing": true

笔记:时间线上的记录

  • GET /api/v1/notes?company_id=7(或 person_id=、deal_id=):一条记录时间线上的记录,最新的在前
  • POST /api/v1/notes,内容是 { "deal_id": 42, "body": "Called Jane: budget approved" }。也可以加上 activity_id(这条记录的某场会议或某个任务)和 on_date(较早的日期)
  • PATCH /api/v1/notes/<id>,送出新的 body。只有写这笔记录的人或管理员可以改

出错的时候

Ordo 会返回一个状态码,和一句告诉你该怎么做的话。状态码是一个数字,说明这个请求的结果。这句话是英文的

{ "error": "There's no field colour on companies. The fields are: name, status, ..." }
状态码意思
400请求里有问题:Ordo 不认得的字段,或它不能接受的值
401没有密钥,或密钥不能用:密钥错了,或已经被收回
402这家公司的试用已经结束,Ordo 变成只读,看得到数据但不能修改。也可能是 Ordo On-site 的授权人数已满
403密钥不能做这件事,例如这不是 API 的请求
404找不到,或密钥所属的人没有权限看
409会多出一笔不能重复的数据,例如同名的公司,或同一个邮箱的联系人
429请求太多:请等 Retry-After 里的秒数

Webhook:Ordo 主动通知你的程序

Webhook 是你的程序的一个网址。发生事情时,Ordo 会发一条简短的消息到这个网址:一个带着 JSON 的 POST 请求

新建 Webhook

  • 管理员在设置 → 连接 → 新建 Webhook添加:填网址,再选要发送什么。接着 Ordo 会显示它的签名密钥(whsec_…)。管理员之后可以点“显示密钥”再看一次
  • 程序也可以用自己的 API 密钥新建 Webhook,用完再移除。送出 POST /api/v1/webhooks,内容是 { "url": "https://...", "events": ["deal.won"] },Ordo 就会回传它的 id 和 secret。DELETE /api/v1/webhooks/<id> 会移除它,GET /api/v1/webhooks 会列出这把密钥自己的 Webhook。密钥被收回时,它的 Webhook 也会一起移除

Webhook 只会发送它所属的人看得到的东西。Ordo Cloud 只会传到公开的 https:// 网址

Ordo 会发送什么

事件什么时候
deal.won商机成交
deal.lost商机未成交
deal.stage_changed商机进入另一个阶段。previous_stage 说明它原本在哪个阶段
company.created添加了一家公司
person.created添加了一位联系人
activity.done会议或任务完成
payment.overdue有一笔回款逾期。data 里有这笔 payment(回款)和它的 deal(商机)
ping测试,来自“发送测试”

消息的内容

{
  "id": "evt_5xKq2c9TfQ8a",
  "event": "deal.won",
  "created_at": "2026-11-03T08:00:00Z",
  "data": { "id": 42, "name": "40 cameras", "company": "Acme Robotics", "stage": "Won", "amount": 48000, "...": "..." }
}

data 就是这条记录在 API 里的样子。你的程序要在 10 秒内响应任何一个 2xx 的状态码,例如 200,意思是一切正常。如果你的程序没有响应,Ordo 会在 1 分钟后、10 分钟后再试,之后每小时试一次。一个 Webhook 连续失败一整天,就会被关闭,管理员也会在铃铛里收到通知

设置 → 连接 → 已发送的消息会列出每条消息和结果,还有“再发送一次”

确认消息是 Ordo 发来的

每条消息都有这个标头:

X-Ordo-Signature: t=1762156800,v1=5257a869e7ec...

v1 是用这个 Webhook 的密钥,对文字 <t>.<the body as sent>(t 的值、一个点,再接上原封不动的消息内容)算出的 HMAC-SHA256,用 hex 表示。HMAC-SHA256 是一种用密钥给文字签名的标准做法。请在你的程序里用同样的方式算一次,再比对两个值。也请确认 t 是最近的时间,例如 5 分钟以内,这样别人就没办法把旧的消息再送一次

JavaScript(Node):

import crypto from "node:crypto";
function fromOrdo(rawBody, header, secret) {
  const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const want = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
  return Math.abs(Date.now() / 1000 - Number(t)) < 300 && v1?.length === want.length && crypto.timingSafeEqual(Buffer.from(want), Buffer.from(v1));
}

Python:

import hashlib, hmac, time
def from_ordo(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    want = hmac.new(secret.encode(), f"{parts['t']}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return abs(time.time() - int(parts["t"])) < 300 and hmac.compare_digest(want, parts["v1"])

其他标头:X-Ordo-Event(事件)和 X-Ordo-Delivery(这条消息在“已发送的消息”里的编号)

Make、n8n 和 Zapier

Make、n8n 和 Zapier 都有一个送出网络请求的步骤,和一个等待 Webhook 的步骤。在 Make 是 HTTP 和 Webhooks 模块,在 n8n 是 HTTP Request 和 Webhook 节点,在 Zapier 两个都在 Webhooks by Zapier 里

  • 要读取或修改 Ordo 的数据:用送出网络请求的步骤,把 API 密钥放在它的 Authorization 标头,做法和上面一样
  • 要接收 Ordo 的通知:用等待 Webhook 的步骤。复制它的网址,在 Ordo 添加一个 Webhook

小提醒

  • API 和 Webhook 每个方案都有:Cloud、Cloud + AI 和 On-site,不用另外付费
  • API 的第 1 版会维持不变。之后可能会增加新的字段,但不会改名或移除任何字段
  • Ordo 不会保存密钥本身,只保存一份打乱过、恢复不回来的版本。所以没有人能再看到密钥,管理员也一样

常见问题

每个方案都有 API 吗?

有。API 和 Webhook 在 Cloud、Cloud + AI 和 On-site 都有,不用另外付费

谁可以创建 API 密钥?

只有管理员可以,在“设置 → 连接”。每把密钥都属于一个人,只能做这个人能做的事

密钥弄丢了,还能再看一次吗?

不能。Ordo 只会显示一次。请收回旧的密钥,再创建一把新的

程序可以通过 API 删除数据吗?

不行。程序可以读取、添加和修改数据,但通过 API 不会删除任何东西