Skip to content

憑證 API

建立並管理憑證(assertion)— 發給特定接收者的徽章。

所有端點皆需透過 X-Api-Key 標頭驗證。請見 驗證

建立憑證

將徽章頒發給接收者。

POST /awards

參數

參數型別必填說明
badgeIdstring要頒發的徽章 ID
recipientobject接收者資訊(見下)
recipient.namestring接收者完整姓名(至少 5 個字元)
recipient.emailstring接收者電子郵件
issuedOnstring頒發日期,ISO 8601 格式(例如 2025-01-15)
expiresstringISO 8601 格式的到期日

範例

bash
curl -X POST https://api.badges.ninja/awards \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "badgeId": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
      "recipient": {
        "name": "Jane Smith",
        "email": "jane@example.com"
      },
      "issuedOn": "2025-01-15"
    }
  }'

回應

json
{
  "awardId": "https://api.badges.ninja/certify-badge/award/c1d2e3f4-a5b6-7890-cdef-123456789012"
}

備註

  • 每筆憑證會扣抵你每月的配額(Free: 100/mo、Starter: 1,000/mo、Pro: 10,000/mo)。配額是以當前日曆月 1 號 00:00 UTC 起所建立的憑證數量計算 — 會在 UTC 日曆月邊界重置,而非你的計費週年日。

列出憑證

取得憑證,可選擇性加上篩選與分頁。

GET /awards

查詢參數

參數型別必填說明
filterJSON 字串篩選物件(見下)
lastEvaluatedKeystring前一次回應的分頁權杖

篩選物件

filter 參數接受含以下欄位的 JSON 字串:

欄位型別說明
badgeIdstring依徽章 ID 篩選。
searchstring於接收者姓名或電子郵件中搜尋的子字串(視 searchField 而定)。
searchFieldstringname(預設)或 email — 指定搜尋的欄位。

lastEvaluatedKey 分頁在有/無篩選時皆可使用。頁面大小為 50。

範例 — 列出所有憑證

bash
curl -X GET https://api.badges.ninja/awards \
  -H "X-Api-Key: bws_your_api_key_here"

範例 — 依徽章篩選

bash
curl -X GET "https://api.badges.ninja/awards?filter=%7B%22badgeId%22%3A%22b1c2d3e4%22%7D" \
  -H "X-Api-Key: bws_your_api_key_here"

回應

json
{
  "count": 1,
  "items": [
    {
      "id": "https://api.badges.ninja/certify-badge/award/c1d2e3f4-...",
      "badge": {
        "id": "https://api.badges.ninja/certify-badge/badge/b1c2d3e4-...",
        "name": "JavaScript Fundamentals",
        "image": "https://ipfs.ninja/ipfs/Qm..."
      },
      "recipient": {
        "name": "Jane Smith",
        "email": "jane@example.com"
      },
      "issuedOn": "2025-01-15T00:00:00.000Z",
      "timestamp": "2025-01-15T10:30:00.000Z"
    }
  ],
  "lastEvaluatedKey": "eyJ..."
}

若回應中出現 lastEvaluatedKey,代表還有更多結果。下一次請求將其作為查詢參數傳入,即可取得下一頁。


寄送憑證電子郵件

向接收者寄送一封憑證通知電子郵件。

POST /awards/{awardId}/send

參數

參數型別必填說明
awardIdstring頒發 ID(路徑參數與主體)
emailstring接收者電子郵件

範例

bash
curl -X POST https://api.badges.ninja/awards/c1d2e3f4-a5b6-7890-cdef-123456789012/send \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "awardId": "c1d2e3f4-a5b6-7890-cdef-123456789012",
      "email": "jane@example.com"
    }
  }'

回應

回傳一個純文字確認字串:

json
"email sent"

分享憑證

將憑證以電子郵件分享給多位接收者。

POST /awards/{awardId}/share

參數

參數型別必填說明
awardIdstring頒發 ID(路徑參數與主體)
recipientsstring以逗號分隔的電子郵件清單
subjectstring電子郵件主旨
messagestring電子郵件內容

範例

bash
curl -X POST https://api.badges.ninja/awards/c1d2e3f4-a5b6-7890-cdef-123456789012/share \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "awardId": "c1d2e3f4-a5b6-7890-cdef-123456789012",
      "recipients": "manager@example.com,hr@example.com",
      "subject": "Check out my new badge!",
      "message": "I just earned the JavaScript Fundamentals badge."
    }
  }'

回應

回傳一個純文字確認字串:

json
"email sent"

撤銷憑證

撤銷你所發出的憑證。所託管的 Open Badges v2.0 assertion 會被標記為 revoked: true(並可附上原因),讓任何驗證者都能看到該徽章已不再有效。憑證紀錄會為稽核目的保留,且不退還額度。

POST /awards/{awardId}/revoke

參數

參數型別必填說明
awardIdstring頒發 ID(路徑參數)
reasonstring撤銷原因。會被截斷至 500 個字元。
notifyboolean當為 true 時,寄送電子郵件通知接收者其憑證已被撤銷。預設為 false

範例

bash
curl -X POST https://api.badges.ninja/awards/c1d2e3f4-a5b6-7890-cdef-123456789012/revoke \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "awardId": "c1d2e3f4-a5b6-7890-cdef-123456789012",
      "reason": "Issued to the wrong recipient",
      "notify": true
    }
  }'

回應

json
{
  "revoked": true,
  "awardId": "c1d2e3f4-a5b6-7890-cdef-123456789012"
}

撤銷一個已被撤銷的憑證是冪等的 — 它會回傳相同的回應,且不會重新寄送通知。


刪除憑證

硬刪除你所發出的憑證。與撤銷不同,此操作會完全移除紀錄,且公開憑證頁會回傳 404。此操作適用於真正的錯誤(例如頒發給了錯誤的對象);對於真實的憑證,請優先使用撤銷,讓 assertion 仍能以已撤銷的狀態被驗證。不退還額度。

DELETE /awards/{awardId}

參數

參數型別必填說明
awardIdstring頒發 ID(路徑參數)

範例

bash
curl -X DELETE https://api.badges.ninja/awards/c1d2e3f4-a5b6-7890-cdef-123456789012 \
  -H "X-Api-Key: bws_your_api_key_here"

回應

json
{
  "deleted": true,
  "awardId": "c1d2e3f4-a5b6-7890-cdef-123456789012"
}

下載 PDF 證書

為憑證產生一份可列印的 A4 PDF 證書。

GET /certify-badge/award/{awardGuid}/pdf

無需驗證 — 此端點為公開,讓接收者可自行下載證書。

範例

bash
curl -OJ https://api.badges.ninja/certify-badge/award/c1d2e3f4-a5b6-7890-cdef-123456789012/pdf

回應為二進位 PDF,標頭為 Content-Type: application/pdf


追蹤憑證事件

記錄互動事件。由公開憑證頁使用,用以累計互動統計。無需驗證。

POST /certify-badge/award/{awardGuid}/event

參數

此端點直接讀取其主體(無 parameters 包裝)。

參數型別必填說明
eventstringviewsharedownloadclick_linkedin_addtoprofileclick_pdfclick_verify 之一。
networkstringevent=share 時的社群網路:linkedintwitterfacebookwhatsapptelegramemailcopy

依 IP 重複抑制:同一 IP 相同事件於 24 小時內僅計算一次。

範例

bash
curl -X POST https://api.badges.ninja/certify-badge/award/c1d2e3f4-a5b6-7890-cdef-123456789012/event \
  -H "Content-Type: application/json" \
  -d '{"event": "share", "network": "linkedin"}'

回應

json
{
  "ok": true
}

取得憑證統計

取得憑證的累計互動計數。

GET /certify-badge/award/{awardGuid}/stats

無需驗證。

回應

計數以原始事件類型為鍵回傳。totals 保存每個事件的總計數;networks 則針對帶有 network 的事件(目前為 share)拆分各網路的分佈。沒有任何紀錄活動的事件會直接省略。

json
{
  "totals": {
    "view": 142,
    "share": 16,
    "download": 3,
    "click_linkedin_addtoprofile": 4
  },
  "networks": {
    "share": { "linkedin": 8, "twitter": 2, "email": 1, "copy": 5 }
  }
}

badges.ninja Documentation