Kullanıcılar API
Sunucu tarafı kullanıcı yönetimi. Yalnızca sunucu anahtarı, kapsamlar users:read / users:write. İki adresleme biçimi — bizim id'miz ve sizin external id'niz — aynı handler'lara düşer.
GET /v1/users/:id · GET /v1/users/by-external-id/:externalId
{
"id": "66f2…",
"externalId": "user_123",
"tags": { "plan": "premium", "firstName": "Ayşe" },
"language": "tr", "timezone": "Europe/Istanbul", "country": "TR",
"createdAt": "2026-07-01T10:00:00.000Z", "lastActiveAt": "2026-09-17T08:12:00.000Z",
"subscriptions": [
{
"id": "66f1…", "platform": "ios", "token": "…a3f9",
"optedIn": true, "appVersion": "3.4.1", "sdkVersion": "0.1.0", "osVersion": "17.5", "deviceModel": "iPhone 15 Pro",
"browser": null, "standalone": null,
"createdAt": "…", "lastActiveAt": "…", "lastNotifiedAt": "…", "invalidatedAt": null
}
]
}
token maskelidir — bu destek içindir, gönderim için değil.
PATCH /v1/users/:id · PATCH /v1/users/by-external-id/:externalId
{ "tags": { "plan": "premium", "trial": null }, "language": "tr", "timezone": "Europe/Istanbul", "country": "TR" }
En az bir alan. Tag'ler merge, null siler. Kullanıcıyı GET'teki gibi döner.
by-external-id biçimi upsert eder: bilinmeyen external id cihazsız bir kullanıcı olur. Backend'in birine telefonu kaydolmadan tag koymasının yolu budur — kaydolduğunda login("user_123") cihazı bu satırın altına taşır ve tag'ler uygulanır.
DELETE /v1/users/:id · DELETE /v1/users/by-external-id/:externalId
204. Kullanıcıyı ve her aboneliği siler. Geçmiş olaylarda yalnızca id'ler kalır. GDPR silme yolu budur.
Hatalar
404 not_found, 422 invalid_body, 403 forbidden (public anahtar ya da eksik kapsam).