API Guides

RevenueCat and Stripe Webhook Flow

Provider webhook yapılandırması, imza doğrulama, idempotency ve kredi yükleme akışı

RevenueCat and Stripe Webhook Flow

RevenueCat ve Stripe webhook endpoint'leri client uygulamaları tarafından doğrudan çağrılmaz. Bu sayfa provider dashboard yapılandırması, backend'in beklediği doğrulama header'ları ve başarılı event işleme davranışını özetler.

Endpoint'ler

ProviderEndpointDoğrulama
RevenueCatPOST /api/v1/revenuecat/webhookAuthorization: Bearer <REVENUECAT_WEBHOOK_SECRET>
StripePOST /api/v1/stripe/webhookStripe-Signature header ve raw body

Provider dashboard'larında ortam bazlı URL kullanılmalıdır:

Development: https://dev-api.allminelive.com/api/v1/revenuecat/webhook
Staging:     https://staging-api.allminelive.com/api/v1/revenuecat/webhook
Production:  https://api.allminelive.com/api/v1/revenuecat/webhook

Stripe için aynı ortamların /api/v1/stripe/webhook path'i kullanılır.

RevenueCat akışı

RevenueCat request'i şu header ile gelmelidir:

Authorization: Bearer <REVENUECAT_WEBHOOK_SECRET>

Payload root'unda event alanı zorunludur. Credit package satın alımlarında ana event NON_RENEWING_PURCHASE veya doğrulanmış ürün için INITIAL_PURCHASE olabilir.

{
  "api_version": "1.0",
  "event": {
    "type": "NON_RENEWING_PURCHASE",
    "id": "event-id",
    "app_user_id": "65f000000000000000000001",
    "product_id": "credit_package_100",
    "transaction_id": "transaction-id",
    "store": "APP_STORE",
    "purchased_at_ms": 1716285600000,
    "event_timestamp_ms": 1716285600100
  }
}

Backend event.id üzerinden idempotency kaydı tutar. Aynı event tekrar gelirse duplicate işlem yapılmadan başarılı response dönebilir.

Stripe akışı

Stripe webhook signature doğrulaması için raw body gereklidir. Backend /api/stripe/webhook ve /api/v1/stripe/webhook path'lerinde raw body middleware çalıştırır.

Stripe dashboard'da en az şu event'ler gönderilmelidir:

  • checkout.session.completed
  • payment_intent.succeeded

Kredi ekleme için checkout session tarafında:

  • client_reference_id: Allmine user id
  • metadata.credit: eklenecek kredi miktarı

Payment intent tarafında:

  • metadata.userId veya metadata.user_id: Allmine user id
  • metadata.credit: eklenecek kredi miktarı

Backend event id üzerinden idempotency lock alır, kullanıcıyı bulur, kredi bakiyesini artırır, credit transaction kaydı oluşturur ve balance socket event'i yayınlamaya çalışır.

Response ve retry

Başarılı işlemde provider'a HTTP 200 döner.

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "received": true
  },
  "errors": [],
  "timestamp": "2026-05-21T10:00:00.000Z"
}

Provider retry davranışı HTTP status code'a bağlıdır. Geçersiz secret/signature 401, invalid payload 400, beklenmeyen işlem hataları 500 sınıfı cevap üretebilir.

Operasyon notları

  • RevenueCat secret ve Stripe webhook secret ortam bazlı farklı olmalıdır.
  • Stripe signature doğrulaması için proxy veya gateway raw body'yi değiştirmemelidir.
  • Webhook event'leri idempotent kabul edilmelidir; provider aynı event'i tekrar gönderebilir.
  • Client ödeme tamamlandı ekranında sadece provider dönüşüne güvenmemelidir. Kredi bakiyesi backend balance endpoint'i veya balance socket event'i ile yenilenmelidir.
  • Webhook başarısızsa provider dashboard retry/log ekranı ve backend logs birlikte kontrol edilmelidir.

On this page