Davetleri toplu oluştur

POST /v1/invitations:batch · izin invitations:write

1 ile 100 arasında davet (items) oluşturur. Her öğe POST /v1/invitations kurallarını izler ve kendi başına yazılır: hatalı bir öğe diğerlerini durdurmaz. Yanıt 200 OK olur ve items, istek sırasını korur. Bir öğenin status değeri 201 (yeni davet), 200 (bekleyen bir davet yeniden gönderildi) veya hatasının HTTP durumudur; başarısız bir öğe, code ve status içeren bir error ile /items/<i>/… biçiminde alan işaretçilerini taşır. link_only öğelerinin accept_url değeri yalnızca bu yanıtta döndürülür (Cache-Control: no-store); Idempotency-Key ile tekrar oynatılan bir yanıtta bağlantılar bulunmaz ve secret_redacted: true döner. organization_id içermeyen bir öğe ortam davetidir. email öğesi e-posta ile gönderilir; davet e-postası bu dağıtım için yapılandırılmamışsa bu bir öğe hatası olarak 501 not_implemented döner ve bu ortamda bulunmayan bir application_id bir öğe hatası olarak 404 not_found döner. Yazılan her davet invitation.created olarak denetlenir.

İstek

Alan Tür Zorunlu Açıklama
items object[] evet POST /v1/invitations alanlarını içeren 1 ile 100 arasında davet.
Idempotency-Key header hayır Yeniden denemenin, bağlantısız saklanan sonucu döndürmesini sağlar.

Yanıt

Her öğe için bir sonuç içeren 200 OK.

{
  "items": [
    {
      "status": 201,
      "invitation": {
        "id": "inv_01j9xt9v3w4y8z0a2b4c6d8e0g",
        "organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
        "email": "ada@example.com",
        "role_ids": [
          "rol_01j9xr7s1t2w6x8y0z2a4b6c8e"
        ],
        "application_id": null,
        "delivery": "link_only",
        "delivery_status": "not_sent",
        "status": "pending",
        "send_count": 1,
        "last_sent_at": "2026-10-12T09:31:00.123456Z",
        "expires_at": "2026-10-19T09:31:00.123456Z",
        "accepted_user_id": null,
        "accepted_at": null,
        "revoked_at": null,
        "created_at": "2026-10-12T09:31:00.123456Z",
        "updated_at": "2026-10-12T09:31:00.123456Z",
        "version": 1,
        "accept_url": "https://acme.eu.keenauth.app/u/login?invitation=<token>"
      }
    },
    {
      "status": 422,
      "error": {
        "code": "validation_failed",
        "status": 422,
        "errors": [
          {
            "pointer": "/items/1/email",
            "code": "invalid_value"
          }
        ]
      }
    }
  ]
}

Hatalar

HTTP code Ne zaman
422 validation_failed items eksik, boş veya 100'den uzun.
401 unauthenticated Kimlik bilgisi eksik, geçersiz veya iptal edilmiş.
403 insufficient_permissions Kimlik bilgisinde gerekli izin yok. Ayrıcalıklı (is_privileged) bir rol içeren öğe, kimlik bilgisinde roles:write yoksa bu öğe hatasıyla başarısız olur.
429 rate_limited Hız sınırı aşıldı; Retry-After süresinden sonra yeniden deneyin.
503 service_unavailable Bir bağımlılık geçici olarak kullanılamıyor; Retry-After süresinden sonra yeniden deneyin.

Örnek

curl -i -X POST "https://api.eu.keenauth.com/v1/invitations:batch" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 0f6c1d2e3a4b5c6d7e8f9a0b" \
  -d '{"items":[{"organization_id":"org_01j9xk3m7q8r2s4t6v8w0y2z4a","email":"ada@example.com","delivery":"link_only"},{"organization_id":"org_01j9xk3m7q8r2s4t6v8w0y2z4a","email":"bob@example.com","delivery":"link_only"}]}'

Kişisel veriler

Bu uç noktada kişisel veriler bulunur: kuruluş üyelikleri ve davetler. KeenAuth API'lerindeki kişisel veriler hangi verilerin saklandığını, ne kadar süre tutulduğunu ve nasıl silindiğini açıklar. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.