Skip to content

Subscription infrastructure that behaves like infrastructure.

One verified event model for App Store and Google Play, one access-level check in your app, and delivery tooling that tells you what failed before a customer does.

Six setup steps. Sandbox events stay isolated from production.

Verify

signed

Store authenticity and replay protection.

Normalize

one schema

One vocabulary across both stores.

Deliver

replayable

Ordered webhooks with visible attempts.

From keys to resolved access.

The setup path is explicit and observable. Each checkpoint produces a testable artifact instead of hiding behind a final green badge.

Integration path
Six steps, each with its own proof.
Connect credentials, receive a signed event, map a product, and check access before production traffic arrives.
AppCreated
AppleKey valid
GoogleRTDN live
Map1 issue
SDKWaiting
TestNot run
API response
Small surface, explicit state.
{
  "id": "pro",
  "active": true,
  "store": "play",
  "reason": "renewed",
  "periodEnd": "2026-09-19"
}
Delivery inspector
Every attempt, response, and retry.
A failed destination remains an ordered job, not a vanished notification.
analytics-primary503 · retry in 28s
warehouse-copy200 · 126 ms
access-cache200 · 48 ms
Replay with original orderingSignature and event ID are preserved.ready
Deduplication enabledSafe across destination retries.on
Webhook verification
Reject altered payloads before business logic.
The SDK verifies the signature against the raw body before dispatch.
const event = cherry.webhooks.verify({
  rawBody: request.body,
  signature: request.headers.get("CherrySub-Signature")
})

switch (event.type) {
  case "access.changed":
    await syncAccess(event.customer)
}
Sandbox clocks
Test renewals, grace, and expiry in minutes.
Sandbox histories stay separate while preserving the production event model.
Test purchaseStoreKit · 14:02
Renewal × 3accelerated clock
Expirypro → inactive

Debug the layer you integrate, not the two stores behind it.

Keep store-specific validation at the boundary and expose one stable state model to the rest of your codebase.

01 / deterministic

One event ID

Verification, normalization, and delivery preserve a traceable identity from store payload to endpoint.

02 / inspectable

Failures have a layer

Connected, receiving, mapping, and delivery report separately, so every red state has an owner.

03 / reversible

Replay without guessing

Undelivered work retains order and can be replayed after the destination recovers.

Resolve one sandbox purchase through the full stack.

Create an app, connect one store, and see the signed event before adding client code.