ប្រើអាសយដ្ឋាន API របស់អង្គការអ្នក និងលិខិតសម្គាល់ដែលកំណត់វិស័យ។ ចាប់ផ្តើមជាមួយសំណើអាន ពិនិត្យការឆ្លើយតប ហើយរក្សាគន្លឹះសម្ងាត់នៅក្រៅការត្រួតពិនិត្យប្រព័ន្ធផ្សព្វផ្សាយ និងឧទាហរណ៍ក្នុងឯកសារ។
Quire មាន API សាធារណៈមួយ៖ REST តាម HTTPS ដែលពិពណ៌នាដោយឯកសារ OpenAPI 3.1 ជាមួយ webhooks ដែលមានហត្ថលេខាសម្រាប់ព្រឹត្តិការណ៍ និងម៉ាស៊ីនបម្រើ MCP សម្រាប់ជំនួយការ AI។ ឯកសារយោង API រាយចំណុចបញ្ចប់ និងព្រឹត្តិការណ៍ទាំងអស់។
អាសយដ្ឋាន
អង្គការនីមួយៗមានអាសយដ្ឋានផ្ទាល់ខ្លួន ហើយ API ស្ថិតនៅក្រោមវា៖
https://acme.quirelms.com/api/v1/coursesលិខិតសម្គាល់កំណត់អង្គការ។ សោសម្រាប់អង្គការមួយដែលប្រើនៅអាសយដ្ឋានអង្គការផ្សេងត្រូវបានបដិសេធ។
ឯកសារ OpenAPI ត្រូវបានបម្រើនៅ /api/v1/openapi.json លើអាសយដ្ឋានអង្គការណាមួយ ដូច្នេះឧបករណ៍បង្កើតកូឌូអស់តែងឃើញកំណែដែលអ្នកកំពុងហៅ។
ការផ្ទៀងផ្ទាត់
សោ API សម្រាប់ស្គ្រីប និងការរួមបញ្ចូលពីម៉ាស៊ីនមួយទៅម៉ាស៊ីនមួយ។ អ្នកគ្រប់គ្រងបង្កើតមួយនៅ /admin/integrations/api-keys ជ្រើសរើសវិស័យរបស់វា ហើយឃើញវាមួយដង។ ផ្ញើវាជាថូខេន bearer៖
curl -H "Authorization: Bearer qk_live_..." https://acme.quirelms.com/api/v1/users?limit=50សោចាប់ផ្តើមដោយ qk_live_ ឬ qk_test_។ ផ្តល់សោផ្ទាល់ខ្លួនមួយឱ្យការរួមបញ្ចូលនីមួយៗ។
OAuth 2.1 សម្រាប់កម្មវិធីដែលធ្វើសកម្មភាពដូចជាមនុស្សដែលបានចូល។ ចុះឈ្មោះអតិថិជនមួយនៅ /admin/integrations/oauth-clients រួចប្រើលំហូរកូដអនុញ្ញាតជាមួយ PKCE (/oauth/authorize, /oauth/token) ឬលិខិតសម្គាល់អតិថិជនសម្រាប់អតិថិជនម៉ាស៊ីន។ ការរកឃើញស្ថិតនៅ /.well-known/oauth-authorization-server។ វិស័យរួមបញ្ចូលអ្វីដែលថូខេនអាចធ្វើបាន វាមិនដែលអនុញ្ញាតឱ្យធ្វើច្រើនជាងអ្វីដែលមនុស្សនោះអាចធ្វើបានទេ។
វិស័យមានដូចជា resource:read, resource:write និង resource:delete ឧទាហរណ៍ courses:read ឬ enrolments:write។ បួនគឺសិទ្ធិពិសេស និងបង្ហាញជាមួយការព្រមាននៅលើអេក្រង់យល់ព្រម៖ audit:read, roles:write, tenants:write និង users:delete។

សំណើ
- ការបំបែកទំព័រ៖ បញ្ជីទាំងអស់បំបែកទំព័រដោយ cursor។ បញ្ជូល
limitរួចnext_cursorពីpageជាcursorខណៈhas_moreនៅតែជា true (ឧទាហរណ៍ខាងក្រោម)។ គ្មាន offset ទេ។ - ការផ្លាស់ប្តូរចាប់តាំងពី៖
updated_sinceត្រឡប់អ្វីដែលបានផ្លាស់ប្តូរបន្ទាប់ពីពេលវេលាមួយ។ ភ្ជាប់វាជាមួយinclude_deleted=trueឬអាន/<resource>/deletionsដើម្បីដឹងថាអ្វីដែលបានលុប។ - អត្តសញ្ញាណក្រៅ៖ ធនធានភាគច្រើនទទួល
external_idផ្ទាល់របស់អ្នក ហើយ/<resource>/ext:{external_id}អាន ឬ upsert តាមវា ដូច្នេះការសមកាលកម្មមិនដែលត្រូវការរក្សាអត្តសញ្ញាណរបស់ Quire ទេ។ - ការអត់ធ្មត់៖ ផ្ញើបឋមកថា
Idempotency-KeyលើPOST,PATCHនិងDELETE។ ការសាកល្បងឡើងវិញជាមួយសោដដែលត្រឡប់ការឆ្លើយតបដំបូងជំនួសការធ្វើការងារពីរដង។ ចំណុចបញ្ចប់បរិមាណតម្រូវឱ្យមានវា។ - កំណែ៖ កំណែសំខាន់ស្ថិតក្នុងផ្លូវ (
/v1)។ ខាងក្នុងវា ការផ្លាស់ប្តូរដែលបំបែកនីមួយៗជាកែសម្រួលដែលមានកាលបរិច្ឆេទ ជ្រើសរើសដោយបឋមកថាQuire-Versionឧទាហរណ៍Quire-Version: 2026-09-20។ គ្មានបឋមកថា អ្នកទទួលកែសម្រួលបច្ចុប្បន្ននៅពេលលិខិតសម្គាល់របស់អ្នកត្រូវបានចេញ។
ទំព័រមួយនៃបញ្ជី៖
{"data": [...], "page": {"next_cursor": "eyJ2Ijox...", "has_more": true, "limit": 100}}កំហុស
កំហុសនីមួយៗជាឯកសារបញ្ហាតាម RFC 9457៖
{"type": "https://quire.com/errors/enrolment.seat_limit_reached",
"title": "Seat limit reached", "status": 409,
"code": "enrolment.seat_limit_reached", "category": "conflict",
"detail": "The course has no seats left, so this enrolment was not created. ...",
"request_id": "01JB7XQK4Z..."}ដាច់ស្រឡះតាម code ដែលនៅស្ថិតនិរន្តរ៍ detail សរសេរសម្រាប់មនុស្ស សុវត្ថិភាពក្នុងការបង្ហាញឱ្យពួកគេ ហើយអាចផ្លាស់ប្តូរ។ នៅពេលអ្នកមិនស្គាល់កូដមួយ ដាក់វាក្នុងប្រភេទតាម category៖
| ប្រភេទ | ស្ថានភាព | សាកឡើងវិញ |
|---|---|---|
validation |
422 ជាមួយព័ត៌មានលម្អិតវាលនៅក្នុង errors |
ទេ |
authentication |
401 | ទេ |
authorization |
403 | ទេ |
not_found |
404 | ទេ |
conflict |
409 | ក្រោយមកខ្លះ |
precondition |
412 | ទេ |
quota |
402 សម្រាប់ផែនការ 413 សម្រាប់ទំហំ | ទេ |
rate_limit |
429 ជាមួយ Retry-After |
បាទ/ចាស |
upstream |
502 ឬ 504 | បាទ/ចាស |
internal |
500 | បាទ/ចាស |
ដកស្រង់ request_id នៅពេលអ្នកទាក់ទងការគាំទ្រ។
Webhooks
ចុះឈ្មោះនៅ /admin/webhooks ឬតាម API នៅ /webhook_subscriptions។ ជ្រើសរើសព្រឹត្តិការណ៍តាមឈ្មោះ (enrolment.created) តាមផ្នែក (enrolment.*) ឬទាំងអស់ (*)។ Quire ផ្ញើ webhook.ping ជាមុនសិន ការចុះឈ្មោះចាប់ផ្តើមនៅពេលចំណុចបញ្ចប់របស់អ្នកឆ្លើយតបវា។
ការផ្ញើធ្វើតាមសេចក្តីជំនួយការ Webhooks ស្តង់ដា៖
POST /hooks/quire
webhook-id: 01JB7XQK4Z8FQ2M3N4P5R6S7T8
webhook-timestamp: 1790000000
webhook-signature: v1,g0hM9SsE+OTPJTGt/tmIKtSyZlE3uFJELVlNIOLJ1OE=ដើម្បីផ្ទៀងផ្ទាត់ការផ្ញើមួយ៖
- សង់ស្សាតនិច
{webhook-id}.{webhook-timestamp}.{raw body}ពីបៃតាទាំងអស់ដែលបានទទួល មុនការញែក JSON ណាមួយ។ - គណនា HMAC-SHA256 លើវាជាមួយសំណង់នៃការចុះឈ្មោះរបស់អ្នក ហើយ base64 វា។
- ប្រៀបធៀបជាមួយតម្លៃ
v1,នីមួយៗក្នុងwebhook-signatureក្នុងពេលថេរ។ អាចមានពីរក្នុងអំឡុងពេលបង្វិលសំណង់ ការផ្គូផ្គងណាមួយក៏ត្រូវបានទទួលស្គាល់ដែរ។ - បដិសេធពេលវេលាដែលខុសគ្នាច្រើនជាងប្រាំនាទីពីនាឡិការបស់អ្នក។
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(secret, id, timestamp, rawBody, header) {
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = createHmac('sha256', Buffer.from(secret.replace(/^whsec_/, ''), 'base64'))
.update(`${id}.${timestamp}.${rawBody}`).digest();
return header.split(' ').some((part) => {
const [version, value] = part.split(',');
const given = Buffer.from(value ?? '', 'base64');
return version === 'v1' && given.length === expected.length && timingSafeEqual(given, expected);
});
}លុបការធ្វើឡើងឡើងវិញតាម webhook-id៖ ការផ្ញើមួយអាចមកដល់ច្រើនដង។ ខ្លឹមសារផ្ទុកអត្តសញ្ញាណ និងសេចក្តីសង្ខេបខ្លី ទាញយកធនធានសម្រាប់សភាពបច្ចុប្បន្នរបស់វា។ ការផ្ញើដែលបរាជ័យត្រូវបានសាកឡើងវិញជាមួយ backoff រហូតដល់ 72 ម៉ោង ហើយអាចលេងឡើងវិញបានពីកំណត់ត្រាការផ្ញើ។
MCP
ម៉ាស៊ីនបម្រើ MCP របស់ Quire ស្ថិតនៅ /mcp លើអាសយដ្ឋានអង្គការ តាម HTTP ដែលអាចផ្សាយបាន។ អតិថិជន MCP រកឃើញម៉ាស៊ីនបម្រើ OAuth ពី /.well-known/oauth-protected-resource ហើយមនុស្សនោះចូល និងយល់ព្រមដូចជាជាមួយអតិថិជន OAuth ណាមួយ។ ឧបករណ៍ធ្វើសកម្មភាពជាមនុស្សនោះ ជាមួយសិទ្ធីរបស់ពួកគេ ហើយឧបករណ៍ដែលបំផ្លាញសុំការបញ្ជាក់។ អ្នកគ្រប់គ្រងជ្រើសរើសថាឧបករណ៍ណាដែលអាចប្រើបាននៅ /admin/integrations/mcp។

ផែនការ និង API
សោ API អតិថិជន OAuth webhooks និងម៉ាស៊ីនបម្រើ MCP ស្ថិតក្នុងសិទ្ធិ API របស់ផែនការ ហើយផែនការស្តង់ដារនីមួយៗរួមបញ្ចូលវា។ លើផែនការដែលគ្មានវា ការបង្កើតសោ អតិថិជន ឬការចុះឈ្មោះត្រូវបានបដិសេធ ការសរសេរ REST និងការតភ្ជាប់ MCP ត្រូវបានបដិសេធ ហើយការអាន REST នៅតែដំណើរការដូច្នេះទិន្នន័យនៅអាចនាំចេញបាន។ ការបដិសេធជាឯកសារបញ្ហាជាមួយកូដ commerce.plan_entitlement ក្នុងប្រភេទ precondition។
ផ្នែកបន្ថែម
ប្រភេទសកម្មភាពផ្ទាល់របស់ Quire ប្លុក វិធីចុះឈ្មោះ វិធីចូល ប្រភេទសំណួរ របាយការណ៍ រចនាបថ និងការរួមបញ្ចូល ត្រូវបានប្រកាសតាមបញ្ជីផ្នែកបន្ថែមដដែលដែលការដំឡើងដោយខ្លួនឯងអាចបន្ថែម។ ផ្នែកបន្ថែមត្រូវបានកូឌូរ៖ គ្មាកម្មវិធីរត់ផ្ទុក plugin ទេ ហើយអង្គការដែល hosting មិនអាចបន្ថែមមួយបានទេ។ អ្នកគ្រប់គ្រងបិត ឬបើកផ្នែកបន្ថែមនីមួយៗសម្រាប់អង្គការរបស់ពួកគេនៅ /admin/extensions (សូមមើលមគ្គុទ្ទេសអ្នកគ្រប់គ្រង)។
ដើម្បីសរសេរមួយ ចាប់ផ្តើមពីប្លុក និងរចនាបថគំរូនៅក្នុង packages/integration/extensions/src/sample.ts។ ជ្រើសរើសចំណុចផ្នែកបន្ថែម ហើយអានកិច្ចសន្យារបស់វានៅ points.ts រួចប្រកាសផ្នែកបន្ថែមជាមួយ id កំណែអាជ្ញាប័ណ្ណ អ្វីដែលវាផ្តល់ និងទាមទារ និងថាតើអង្គការអាចបិតវាបានឬអត់។ ចុះឈ្មោះវានៅកន្លែងដែលកម្មវិធី web និង worker ត្រូវបានបង្កើតឡើង ដូច្នេះទាំងពីរយល់ស្របគ្នា។ បញ្ជីពិនិត្យច្បាប់ផ្ទាល់របស់ចំណុចនីមួយៗនៅពេលវាត្រូវបានសង់ ហើយនៅពេលអ្នកហៅ register បដិសេធបញ្ជីដែលនឹងមិនត្រឹមត្រូវដោយដាក់ឈ្មោះបញ្ហាទាំងអស់ ហើយទុកបញ្ជីមិនផ្លាស់ប្តូរនៅពេលវាធ្វើដូច្នេះ។ ការសាកល្បងផ្ទាល់របស់ផ្នែកបន្ថែមគួរតែអះអាងថា extensionContractProblems ទទេសម្រាប់វា ហើយការបិតវាផ្លាស់ប្តូរអ្វីដែលវាប៉ះពាល់។