Ana içeriğe geç

REST API genel bakış

Taban URL: kurulumunuz, örn. https://push.example.com. Tüm uçlar /v1 altında. Gövdeler JSON; doğrulama katıdır ve hatalar hangi alan olduğunu söyler.

Etkileşimli OpenAPI tarayıcısı API'nin kendisinde /docs altında sunulur.

Kimlik doğrulama

AnahtarBaşlıkÖnekKim için
Sunucu anahtarıAuthorization: Bearer sk_live_<appId>_<secret>sk_backend'iniz, CI. Kapsamlarının izin verdiği her şey.
Public anahtarx-app-key: pk_live_<appId>_<secret>pk_SDK'lar. Cihaz kaydet, o cihazın kullanıcısını güncelle.
(yok)POST /v1/e/:kind/:msgId — imzalı msgId kimlik bilgisidir.

Uygulama kimliği anahtara gömülüdür; doğrulama tek indexli sorgu artı bcrypt karşılaştırmadır, API_KEY_CACHE_TTL (60 sn) boyunca önbellekte kalır. Sunucu ucunda public anahtar, kapsamdan bağımsız 403 forbidden döner. Anahtarlar Ayarlar › API anahtarları'nda üretilip iptal edilir.

Kapsamlar

KapsamUçlar
subscriptions:writePOST/PATCH/DELETE /v1/subscriptions/*
subscriptions:readPOST /v1/segments/preview
users:read / users:writeGET / PATCH,DELETE /v1/users/*
notifications:sendPOST /v1/notifications
campaigns:readGET /v1/campaigns/:id/stats
campaigns:writePOST /v1/campaigns, /send, /cancel, /experiment/winner

Rate limit'ler

Sabit 60 saniyelik pencereler, API süreci başına:

KovaVarsayılanAnahtar
subscribe / rotateSUBSCRIBE_RATE_LIMIT = 10/dkistemci IP
/v1/notificationsSEND_RATE_LIMIT = 100/dkAPI anahtarı
/v1/e/*EVENT_RATE_LIMIT = 600/dkistemci IP

Sınır aşılınca: mesajında beklenecek saniyeyle 429 rate_limited. İstemci IP'si x-forwarded-for (ilk atlama) ya da x-real-ip'den gelir — proxy'nizin birini ayarladığından emin olun.

Hatalar

Her yerde tek şekil:

{
"error": {
"code": "invalid_body",
"message": "notification payload is invalid",
"details": [
{ "path": "content._default", "message": "_default \"fr\" is not one of: en, tr" },
{ "path": "target", "message": "provide exactly one of externalIds, userIds, subscriptionIds, segment or all" }
]
}
}

Tam kod listesi: Hatalar.

Idempotency

POST /v1/notifications ve POST /v1/campaigns Idempotency-Key (≤ 255 karakter) kabul eder; 24 saat içindeki tekrarlar Idempotent-Replayed: true ile ilk yanıtı döner. Ayrıntı: Idempotency.

Erişilebilirlik

  • GET /health200 {"status":"ok","db":"ready"} ya da MongoDB ulaşılamazken 503.
  • Mongo kapalıyken her veri ucu kuyruğa almak yerine 503 database_unavailable döner.
  • Redis olmadan API hiç başlamaz.

Uç dizini

Metot ve yolAnahtarKapsamSayfa
POST /v1/subscriptionspk / sksubscriptions:writeAbonelikler
PATCH /v1/subscriptions/:idpk / sksubscriptions:write
POST /v1/subscriptions/:id/loginpk / sksubscriptions:write
POST /v1/subscriptions/:id/logoutpk / sksubscriptions:write
PATCH ya da POST /v1/subscriptions/:id/userpk / sksubscriptions:write
DELETE /v1/subscriptions/:idpk / sksubscriptions:write
POST /v1/subscriptions/rotatepk / sksubscriptions:write
POST /v1/subscriptions/:id/sessionpk / sksubscriptions:write
GET /v1/users/:id · /by-external-id/:externalIdskusers:readKullanıcılar
PATCH /v1/users/:id · /by-external-id/:externalIdskusers:write
DELETE /v1/users/:id · /by-external-id/:externalIdskusers:write
POST /v1/notificationssknotifications:sendBildirimler
POST /v1/campaignsskcampaigns:writeKampanyalar
POST /v1/campaigns/:id/send · /cancelskcampaigns:write
POST /v1/campaigns/:id/experiment/winnerskcampaigns:write
GET /v1/campaigns/:id/statsskcampaigns:read
POST /v1/segments/previewsksubscriptions:readSegmentler
GET /v1/segments · GET /v1/segments/:id · POST /v1/segments/:id/countsksubscriptions:read
POST /v1/segments · PUT · DELETE /v1/segments/:idskcampaigns:write
GET /v1/templates · GET /v1/templates/:idskcampaigns:readŞablonlar
POST /v1/templates · PUT · DELETE /v1/templates/:idskcampaigns:write
POST /v1/e/:kind/:msgIdyokOlaylar
GET /healthyok
/v1/admin/*ADMIN_API_TOKENyalnızca panel; ayarsızken 404

Gelenekler

  • Id'ler string olarak 24 hex MongoDB ObjectId'dir.
  • Zaman damgaları ISO 8601 UTC'dir.
  • PATCH gövdeleri kısmidir ve en az bir alan içermelidir.
  • Admin yüzeyi (/v1/admin) public API değildir: panel için vardır, paylaşılan token ister ve kararlılık sözü yoktur.