Təşkilatınızın API ünvanından və məhdud scope-lu etimadnamədən istifadə edin. Oxuma sorğusu ilə başlayın, cavabı yoxlayın, secret-ləri isə mənbə nəzarətindən və sənədlərdəki nümunələrdən kənarda saxlayın.
Quire-in bir açıq API-si var: OpenAPI 3.1 sənədi ilə təsvir edilən HTTPS üzərindən REST, hadisələr üçün imzalı vebhuklar və süni intellekt köməkçiləri üçün MCP serveri. API arayışında hər endpoint və hadisə sadalanır.
Ünvanlar
Hər təşkilatın öz ünvanı var və API onun altında yerləşir:
https://acme.quirelms.com/api/v1/coursesTəşkilatı etimadnamə müəyyən edir. Bir təşkilatın açarı ilə başqasının ünvanına sorğu rədd edilir.
OpenAPI sənədi istənilən təşkilat ünvanında /api/v1/openapi.json yolundan verilir, buna görə client generatorları çağırdığınız versiyanı həmişə görür.
Autentifikasiya
API açarları skriptlər və serverdən serverə inteqrasiyalar üçündür. Administrator /admin/integrations/api-keys ünvanında açar yaradıb scope-ları seçir və onu yalnız bir dəfə görür. Bearer token kimi göndərin:
curl -H "Authorization: Bearer qk_live_..." https://acme.quirelms.com/api/v1/users?limit=50Açarlar qk_live_ və ya qk_test_ ilə başlayır. Hər inteqrasiyaya ayrıca açar verin.
OAuth 2.1 daxil olmuş şəxs adından işləyən tətbiqlər üçündür. /admin/integrations/oauth-clients ünvanında client qeydiyyatdan keçirin, sonra PKCE ilə avtorizasiya kodu axınından (/oauth/authorize, /oauth/token) və ya maşın client-i üçün client credentials-dən istifadə edin. Kəşf ünvanı /.well-known/oauth-authorization-server-dir. Scope tokenin edə biləcəklərini məhdudlaşdırır; şəxsə verilən icazədən artıq səlahiyyət vermir.
Scope-lar resource:read, resource:write və resource:delete formatındadır, məsələn, courses:read və ya enrolments:write. Dördü imtiyazlıdır və razılıq ekranında xəbərdarlıqla göstərilir: audit:read, roles:write, tenants:write və users:delete.
Sorğular
- Səhifələmə: hər siyahı cursor ilə səhifələnir.
limitgöndərin, sonranext_cursor-ıpage-dən götürübcursorkimi ötürün,has_moretrue olduqca (aşağıdakı nümunəyə baxın). Offset yoxdur. - Bu vaxtdan bəri dəyişikliklər:
updated_sincevaxtdan sonra dəyişənləri qaytarır. Silinənləri öyrənmək üçün bunuinclude_deleted=trueilə birləşdirin və ya/<resource>/deletionsoxuyun. - Xarici identifikatorlar: əksər resurslar öz
external_iddəyərinizi qəbul edir;/<resource>/ext:{external_id}həmin dəyərlə oxuyur və ya upsert edir, buna görə sinxronizasiya Quire identifikatorlarını saxlamağı tələb etmir. - İdemponentlik:
Idempotency-KeybaşlığınıPOST,PATCHvəDELETEsorğularında göndərin. Eyni açarla təkrar sorğu işi ikinci dəfə görmək əvəzinə ilk cavabı qaytarır. Bulk endpoint-lərdə bu məcburidir. - Versiyalar: əsas versiya yoldadır (
/v1). Onun daxilində pozucu dəyişikliklərin hər biri tarixli reviziyadır vəQuire-Versionbaşlığı ilə seçilir, məsələn,Quire-Version: 2026-09-20. Başlıq verilməsə, etimadnaməniz yaradılan vaxt qüvvədə olan reviziyanı alırsınız.
Siyahının bir səhifəsi:
{"data": [...], "page": {"next_cursor": "eyJ2Ijox...", "has_more": true, "limit": 100}}Xətalar
Hər xəta RFC 9457 problem sənədidir:
{"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..."}Sabit olan code-a əsasən yönləndirin; detail insanlar üçün yazılıb, onlara göstərmək təhlükəsizdir və dəyişə bilər. Kodu tanımırsınızsa, category üzrə qruplaşdırın:
| Kateqoriya | Status | Təkrar cəhd |
|---|---|---|
validation |
422, errors daxilində sahə təfərrüatı ilə |
Xeyr |
authentication |
401 | Xeyr |
authorization |
403 | Xeyr |
not_found |
404 | Xeyr |
conflict |
409 | Bəzən |
precondition |
412 | Xeyr |
quota |
Plan üçün 402, ölçü üçün 413 | Xeyr |
rate_limit |
429, Retry-After ilə |
Bəli |
upstream |
502 və ya 504 | Bəli |
internal |
500 | Bəli |
Dəstəyə müraciət edəndə request_id dəyərini verin.
Vebhuklar
/admin/webhooks ünvanında və ya API vasitəsilə /webhook_subscriptions yolunda abunə olun. Hadisələri adla (enrolment.created), sahəyə görə (enrolment.*) və ya hamısını (*) seçin. Quire əvvəlcə webhook.ping göndərir; endpoint cavab verdikdən sonra abunəlik başlayır.
Çatdırılmalar Standard Webhooks spesifikasiyasına əməl edir:
POST /hooks/quire
webhook-id: 01JB7XQK4Z8FQ2M3N4P5R6S7T8
webhook-timestamp: 1790000000
webhook-signature: v1,g0hM9SsE+OTPJTGt/tmIKtSyZlE3uFJELVlNIOLJ1OE=Çatdırılmanı yoxlamaq üçün:
- JSON təhlilindən əvvəl alınmış dəqiq baytlarla
{webhook-id}.{webhook-timestamp}.{raw body}sətrini qurun. - Abunəlik secret-i ilə üzərində HMAC-SHA256 hesablayın və Base64-a çevirin.
v1,dəyərlərinin hər biriniwebhook-signaturebaşlığı ilə sabit vaxtda müqayisə edin. Secret dəyişdirilərkən iki dəyər ola bilər; istənilən uyğunluq etibarlıdır.- Saatınızdan beş dəqiqədən artıq fərqlənən timestamp-i rədd edin.
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 dəyərinə əsasən dublikatı aradan qaldırın: çatdırılma birdən çox gələ bilər. Gövdədə identifikatorlar və qısa xülasə var; cari vəziyyət üçün resursu əldə edin. Uğursuz çatdırılmalar 72 saata qədər artan intervallarla yenidən göndərilir və çatdırılma jurnalından təkrar oynadıla bilər.
MCP
Quire MCP serveri təşkilatın ünvanındakı /mcp yolunda, axınlı HTTP üzərində işləyir. MCP client OAuth serverini /.well-known/oauth-protected-resource ünvanından aşkarlayır; şəxs istənilən OAuth client-də olduğu kimi daxil olub razılıq verir. Alətlər həmin şəxsin icazələri ilə onun adından işləyir, dağıdıcı alətlər isə təsdiq istəyir. Administratorlar əlçatan alətləri /admin/integrations/mcp ünvanında seçirlər.
Planlar və API
API açarları, OAuth client-lər, vebhuklar və MCP serveri planın API hüququna daxildir; hər standart planda bu hüquq var. Daxil etməyən planda açar, client və ya abunəlik yaratmaq, REST yazmaları və MCP bağlantısı rədd edilir; REST oxumaları məlumatın ixrac edilə bilməsi üçün işləyir. Rədd cavabı commerce.plan_entitlement kodlu və precondition kateqoriyalı problem sənədidir.
Genişlənmələr
Quire-in öz fəaliyyət növləri, blokları, qeydiyyat üsulları, giriş üsulları, sual növləri, hesabatları, mövzuları və inteqrasiyaları öz serverində quraşdırmanın əlavə edə bildiyi eyni genişlənmə reyestrində elan edilir. Genişlənmələr yığıma daxil edilir: işləmə zamanı plagin yükləyicisi yoxdur və hostinq təşkilatı yenisini əlavə edə bilməz. Administratorlar hər genişlənməni təşkilatları üçün /admin/extensions ünvanında aktivləşdirir və ya söndürür (administrator təlimatına baxın).
Genişlənmə yazmaq üçün packages/integration/extensions/src/sample.ts nümunə blok və mövzusundan başlayın. Genişlənmə nöqtəsini seçin, points.ts daxilində müqaviləsini oxuyun, sonra ID, versiya, lisenziya, təqdim etdiyi və tələb etdiyi imkanlar, eləcə də təşkilatın onu söndürə bilib-bilməməsi ilə elan edin. Veb tətbiq və worker-in tərkib olunduğu yerə qeydiyyatdan keçirin ki, hər ikisi uyğun olsun. Reyestr qurularkən və register çağırışında hər nöqtənin öz qaydalarını yoxlayır, bütün problemləri adlandıraraq etibarsız dəsti rədd edir və belə olduqda reyestri dəyişməz saxlayır. Genişlənmənin öz testləri onun üçün extensionContractProblems boş olduğunu və söndürməyin təsir etdiyi imkanları dəyişdirdiyini təsdiqləməlidir.