所有主題

從這裡開始

你的一天

商機與銷售流程

公司與聯絡人

會議、任務與時間軸

郵件與行事曆

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=搜尋名稱、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必填。公司名稱,不會有兩家公司同名
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 找出公司
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會多出一筆不能重複的資料,例如同名的公司,或同一個 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 不會刪除任何東西