API 連線教學

使用 API 連線至你的帳戶:基礎 URL、驗證方式與程式碼範例。

基礎 URL 與驗證

請在 Authorization 標頭以 Bearer 方式傳送你的 API 金鑰,或使用查詢參數 api_key。你的帳戶端點基礎網址:

https://cname.enrollta.com/api/v1/me

主要端點:GET/POST /activities、GET/POST/PUT/DELETE /activities/{id}、/activity-participants、/activity-attend 等。皆需提供 API 金鑰。

活動

GET /activities
列出活動
# List your activities
curl -X GET "https://cname.enrollta.com/api/v1/me/activities" \
  -H "Authorization: Bearer YOUR_API_KEY"
# Or: curl -X GET "https://cname.enrollta.com/api/v1/me/activities?api_key=YOUR_API_KEY"
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activities");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Accept: application/json"],
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
r = requests.get("https://cname.enrollta.com/api/v1/me/activities", headers={"Authorization": "Bearer YOUR_API_KEY", "Accept": "application/json"})
activities = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activities", {
  headers: { "Authorization": "Bearer YOUR_API_KEY", "Accept": "application/json" }
});
const data = await res.json();
GET /activities/{id}
取得單一活動
curl -X GET "https://cname.enrollta.com/api/v1/me/activities/1" -H "Authorization: Bearer YOUR_API_KEY"
$id = 1;
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activities/" . $id);
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Accept: application/json"],
    CURLOPT_RETURNTRANSFER => true,
]);
$activity = json_decode(curl_exec($ch), true);
activity_id = 1
r = requests.get(f"https://cname.enrollta.com/api/v1/me/activities/{activity_id}", headers={"Authorization": "Bearer YOUR_API_KEY"})
activity = r.json()
const id = 1;
const res = await fetch(`https://cname.enrollta.com/api/v1/me/activities/${id}`, {
  headers: { "Authorization": "Bearer YOUR_API_KEY" }
});
const activity = await res.json();
POST /activities
建立活動

請求主體:

  • title — 必填, 字串,最多 255 字
  • description — 選填, string
  • location — 選填, string, max 255
  • start_date, end_date — 選填, date (end_date >= start_date)
  • max_participants — 選填, integer, min 0
  • status — 選填: draft, published, cancelled, completed
  • is_public — 選填, boolean
  • contact_email, contact_phone — 選填 (email / string max 50)
  • fee — 選填, numeric, min 0
curl -X POST "https://cname.enrollta.com/api/v1/me/activities" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"My Activity","description":"Description","status":"draft"}'
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activities");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode(["title" => "My Activity", "description" => "Description", "status" => "draft"]),
    CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json", "Accept: application/json"],
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
r = requests.post("https://cname.enrollta.com/api/v1/me/activities", headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}, json={"title": "My Activity", "description": "Description", "status": "draft"})
data = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activities", {
  method: "POST",
  headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ title: "My Activity", description: "Description", status: "draft" })
});
const data = await res.json();
POST /activities/{id}
更新活動

請求主體(所有欄位選填):

  • title — string, max 255
  • description, location — string (location max 255)
  • start_date, end_date — date
  • max_participants — integer, min 0
  • statusdraft, published, cancelled, completed
  • is_public — boolean
  • contact_email, contact_phone — email / string max 50
  • fee — numeric, min 0
curl -X POST "https://cname.enrollta.com/api/v1/me/activities/1" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Updated Title","status":"published"}'
$id = 1;
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activities/" . $id);
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode(["title" => "Updated Title", "status" => "published"]),
    CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json"], CURLOPT_RETURNTRANSFER => true]);
$data = json_decode(curl_exec($ch), true);
r = requests.post("https://cname.enrollta.com/api/v1/me/activities/1", headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}, json={"title": "Updated Title", "status": "published"})
data = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activities/1", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ title: "Updated Title", status: "published" }) });
const data = await res.json();

活動參與者

GET /activity-participants
列出活動參與者
curl -X GET "https://cname.enrollta.com/api/v1/me/activity-participants" -H "Authorization: Bearer YOUR_API_KEY"
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-participants");
curl_setopt_array($ch, [CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Accept: application/json"], CURLOPT_RETURNTRANSFER => true]);
$data = json_decode(curl_exec($ch), true);
r = requests.get("https://cname.enrollta.com/api/v1/me/activity-participants", headers={"Authorization": "Bearer YOUR_API_KEY"})
participants = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-participants", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
const data = await res.json();
GET /activity-participants/{id}
取得單一參與者
curl -X GET "https://cname.enrollta.com/api/v1/me/activity-participants/1" -H "Authorization: Bearer YOUR_API_KEY"
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-participants/1");
curl_setopt_array($ch, [CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"], CURLOPT_RETURNTRANSFER => true]);
$participant = json_decode(curl_exec($ch), true);
r = requests.get("https://cname.enrollta.com/api/v1/me/activity-participants/1", headers={"Authorization": "Bearer YOUR_API_KEY"})
participant = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-participants/1", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
const participant = await res.json();
POST /activity-participants
建立參與者

請求主體:

  • activity_id — 選填;若改以 activity_titleactivity_nametitle 指定活動則可省略。整數。使用標題時可加上 activity_exact=1(或 exact=1)做完全比對。
  • user_id — 選填;整數。須提供 user_idemailuser_email,或 participant_nameuser_namedisplay_name 其中之一(新建訪客帳戶除外,見下文)。
  • emailuser_email — 選填;依電郵尋找現有會員。若電郵不存在,請一併傳送 first_name + last_name(或單一 name 欄位)以為該電郵建立訪客帳戶。
  • participant_nameuser_namedisplay_name — 選填;必須唯一對應一位使用者(或先呼叫 GET /user-lookup)。
  • first_namelast_name — 選填但建議每次報名都填(與公開活動報名表相同)。會寫入報名後設資料,API 的 display_name 會顯示參加者填寫的姓名。
  • name — 選填;若未填 first_namelast_name,第一個詞為名字,其餘為姓氏。
  • phoneteltelephone — 選填;存於報名後設資料。
  • status — 選填:registeredconfirmedwaiting_listattendedcancelled(抽籤活動在報名開放期間可能固定為 registered)。
  • notes — 選填;字串,最多 1000 字。

行為盡量與公開訪客報名一致:名額與後補、抽籤報名時間視窗,以及每位新報名時向閣下(活動擁有者)發送的應用程式內通知。此 API 不會向參加者寄送報名確認電郵。

curl -X POST "https://cname.enrollta.com/api/v1/me/activity-participants" \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"activity_id":38,"email":"[email protected]","first_name":"Tai Man","last_name":"Chan","phone":"9834123","status":"registered"}'
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-participants");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode([
    "activity_id" => 38,
    "email" => "[email protected]",
    "first_name" => "Tai Man",
    "last_name" => "Chan",
    "phone" => "9834123",
    "status" => "registered",
]),
    CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json"], CURLOPT_RETURNTRANSFER => true]);
$data = json_decode(curl_exec($ch), true);
r = requests.post("https://cname.enrollta.com/api/v1/me/activity-participants", headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}, json={"activity_id": 38, "email": "[email protected]", "first_name": "Tai Man", "last_name": "Chan", "phone": "9834123", "status": "registered"})
data = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-participants", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ activity_id: 38, email: "[email protected]", first_name: "Tai Man", last_name: "Chan", phone: "9834123", status: "registered" }) });
const data = await res.json();
POST /activity-participants/{id}
更新參與者

請求主體(所有欄位選填):

  • status — 其一: registered, confirmed, waiting_list, attended, cancelled
  • notes — 字串,最多 1000 字
curl -X POST "https://cname.enrollta.com/api/v1/me/activity-participants/1" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"status":"confirmed","notes":"Will attend"}'
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-participants/1");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode(["status" => "confirmed", "notes" => "Will attend"]),
    CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json"], CURLOPT_RETURNTRANSFER => true]);
$data = json_decode(curl_exec($ch), true);
r = requests.post("https://cname.enrollta.com/api/v1/me/activity-participants/1", headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}, json={"status": "confirmed", "notes": "Will attend"})
data = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-participants/1", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ status: "confirmed", notes: "Will attend" }) });
const data = await res.json();

活動簽到

GET /activity-attend
列出簽到記錄
curl -X GET "https://cname.enrollta.com/api/v1/me/activity-attend" -H "Authorization: Bearer YOUR_API_KEY"
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-attend");
curl_setopt_array($ch, [CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"], CURLOPT_RETURNTRANSFER => true]);
$data = json_decode(curl_exec($ch), true);
r = requests.get("https://cname.enrollta.com/api/v1/me/activity-attend", headers={"Authorization": "Bearer YOUR_API_KEY"})
records = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-attend", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
const data = await res.json();
GET /activity-attend/activity/{activity_id}/stats
活動簽到統計
curl -X GET "https://cname.enrollta.com/api/v1/me/activity-attend/activity/1/stats" -H "Authorization: Bearer YOUR_API_KEY"
$activityId = 1;
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-attend/activity/" . $activityId . "/stats");
curl_setopt_array($ch, [CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"], CURLOPT_RETURNTRANSFER => true]);
$stats = json_decode(curl_exec($ch), true);
activity_id = 1
r = requests.get(f"https://cname.enrollta.com/api/v1/me/activity-attend/activity/{activity_id}/stats", headers={"Authorization": "Bearer YOUR_API_KEY"})
stats = r.json()
const activityId = 1;
const res = await fetch(`https://cname.enrollta.com/api/v1/me/activity-attend/activity/${activityId}/stats`, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
const stats = await res.json();
GET /activity-attend/user/{user_id}/history
使用者簽到紀錄
curl -X GET "https://cname.enrollta.com/api/v1/me/activity-attend/user/123/history" -H "Authorization: Bearer YOUR_API_KEY"
$userId = 123;
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-attend/user/" . $userId . "/history");
curl_setopt_array($ch, [CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"], CURLOPT_RETURNTRANSFER => true]);
$history = json_decode(curl_exec($ch), true);
user_id = 123
r = requests.get(f"https://cname.enrollta.com/api/v1/me/activity-attend/user/{user_id}/history", headers={"Authorization": "Bearer YOUR_API_KEY"})
history = r.json()
const userId = 123;
const res = await fetch(`https://cname.enrollta.com/api/v1/me/activity-attend/user/${userId}/history`, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
const history = await res.json();
POST /activity-attend/check-registration
檢查使用者報名

請求主體:

  • activity_id — 必填, integer
  • object_slot_id — 必填, integer
  • user_id 由你的 API 金鑰(已驗證使用者)決定。
curl -X POST "https://cname.enrollta.com/api/v1/me/activity-attend/check-registration" \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"activity_id":1,"object_slot_id":5}'
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-attend/check-registration");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode(["activity_id" => 1, "object_slot_id" => 5]),
    CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json"], CURLOPT_RETURNTRANSFER => true]);
$result = json_decode(curl_exec($ch), true);
r = requests.post("https://cname.enrollta.com/api/v1/me/activity-attend/check-registration", headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}, json={"activity_id": 1, "object_slot_id": 5})
result = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-attend/check-registration", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ activity_id: 1, object_slot_id: 5 }) });
const result = await res.json();
GET /activity-attend/activity/{activity_id}/slot/{object_slot_id}
依活動與時段取得
curl -X GET "https://cname.enrollta.com/api/v1/me/activity-attend/activity/1/slot/5" -H "Authorization: Bearer YOUR_API_KEY"
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-attend/activity/1/slot/5");
curl_setopt_array($ch, [CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"], CURLOPT_RETURNTRANSFER => true]);
$data = json_decode(curl_exec($ch), true);
r = requests.get("https://cname.enrollta.com/api/v1/me/activity-attend/activity/1/slot/5", headers={"Authorization": "Bearer YOUR_API_KEY"})
data = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-attend/activity/1/slot/5", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
const data = await res.json();
GET /activity-attend/{id}
取得單一簽到記錄
curl -X GET "https://cname.enrollta.com/api/v1/me/activity-attend/1" -H "Authorization: Bearer YOUR_API_KEY"
$ch = curl_init("https://cname.enrollta.com/api/v1/me/activity-attend/1");
curl_setopt_array($ch, [CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"], CURLOPT_RETURNTRANSFER => true]);
$record = json_decode(curl_exec($ch), true);
r = requests.get("https://cname.enrollta.com/api/v1/me/activity-attend/1", headers={"Authorization": "Bearer YOUR_API_KEY"})
record = r.json()
const res = await fetch("https://cname.enrollta.com/api/v1/me/activity-attend/1", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
const record = await res.json();