Ordo 的 API
讓其他程式也能使用你在 Ordo 的資料
本頁內容 13 個段落
- 管理員幫另一個程式建立一把 API 金鑰
- 每把金鑰只能做它所屬的人在 Ordo 能做的事
- 發生事情時,Webhook 會通知你的程式
在哪裡:設定 → 串接(管理員)
有了 API 金鑰,你們的網站、自己寫的程式、Make、n8n 或 Zapier 都可以讀取和修改公司、聯絡人和商機。會議和任務也一樣,還可以在公司、聯絡人或商機的時間軸上寫紀錄。API 是程式和程式之間溝通的方式,API 金鑰就像是給程式用的密碼。Webhook 則是反過來:發生事情時,Ordo 會主動通知你的程式
試試看
- 設定
- 串接
- 新增 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= | 搜尋名稱、Email 地址和網站 |
created_since=、updated_since= | 只要某個日期或時間之後新增或修改的 |
sort=updated | 最近修改的排在前面。預設是最新的排在前面 |
email= | 聯絡人:用這個 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 | 必填。公司名稱,不會有兩家公司同名 |
status | Prospect(開發中)、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 找出公司 |
email、job_title、phone、source、buying_role | buying_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、currency | currency 的寫法像 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 | 必填:主旨 |
type | Task(任務)或 Meeting(會議) |
format | 會議才有:Online(線上)或 Offline(實體) |
status | Planned(已排定)、Done(已完成)或 Canceled(已取消) |
priority | Low(低)、Normal(一般)、High(高)或 Urgent(緊急) |
due_date、due_time、length_minutes | due_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 | 會多出一筆不能重複的資料,例如同名的公司,或同一個 Email 的聯絡人 |
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 不會刪除任何東西