rtdn

rtdn is a skill for Claude Code, Codex from RevenueCat/play-billing-skills. It costs 56 tokens per session (2,585 once invoked), scanned A, original, Apache-2.0.

A guide to Google Play Real Time Developer Notifications, or RTDN, which sends purchase and subscription changes to your backend through Cloud Pub/Sub. It covers the notification data, delivery behavior, and subscription event types.

In plain words
What is it for?
Use it to configure Pub/Sub, parse notification messages, process all supported event types, and update subscription access reliably despite duplicate or out-of-order messages.
Why use it?
It helps your backend react to renewals, cancellations, refunds, holds, pauses, and other changes without relying only on scheduled checks.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Good fit Use it to configure Pub/Sub, parse notification messages, process all supported event types, and update subscription access reliably despite duplicate or out-of-order messages.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/revenuecat/play-billing-skills/rtdn
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add RevenueCat/play-billing-skills --skill rtdn
Clone the repo
git clone --depth 1 https://github.com/RevenueCat/play-billing-skills

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for rtdn

README.md
[![agentmods](https://agentmods.dev/badge/skills/revenuecat/play-billing-skills/rtdn/github.svg)](https://agentmods.dev/skills/revenuecat/play-billing-skills/rtdn)
Your own site
<a href="https://agentmods.dev/skills/revenuecat/play-billing-skills/rtdn"><img src="https://agentmods.dev/badge/skills/revenuecat/play-billing-skills/rtdn/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for rtdn

Your own site · 80×15
<a href="https://agentmods.dev/skills/revenuecat/play-billing-skills/rtdn"><img src="https://agentmods.dev/badge/skills/revenuecat/play-billing-skills/rtdn.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 56 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,585 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00056 $0.02585
Opus 5 $0.00028 $0.01293
Sonnet 5 $0.00011 $0.00517
Haiku 4.5 $0.00006 $0.00259

Measured 13d ago against content hash b45bc8334dd3, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

rtdn scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 13d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

google-play/rtdn/SKILL.md · 233 lines

How it starts

The opening of the file, as written. The whole thing — 233 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Real Time Developer Notifications (RTDN)

RTDN pushes subscription and purchase state changes from Google Play to your backend within seconds. Use it as the primary signal for entitlement updates; polling the Play Developer API on a schedule is a fallback, not a substitute.

Phase 1: Understand

Pin down the following before you write code:

  • What triggers a notification. Google Play publishes a message to a Cloud Pub/Sub topic you own every time a subscription or one time product changes state (renewal, cancellation, refund, hold, pause, revocation, price change confirmation, etc.).
  • What the notification contains. A DeveloperNotification JSON object with packageName, eventTimeMillis, and exactly one of subscriptionNotification, oneTimeProductNotification, voidedPurchaseNotification, or testNotification. It carries a purchaseToken and a type code, not the full purchase state.
  • Who owns what. You own the Pub/Sub topic and subscription in your own Google Cloud project. Google Play only has publish rights.
  • Delivery semantics. Cloud Pub/Sub guarantees at least once delivery and does not guarantee ordering. Duplicates and out of order messages are normal.
  • The golden rule. RTDNs are signals, not sources of truth. For every notification, call purchases.subscriptionsv2.get or purchases.products.get and update entitlements from the API response, not the notification type.

Decide push vs pull:

Strategy Pick when
Push subscription You have a public HTTPS endpoint and want a webhook style integration with retries handled by Pub/Sub
Pull subscription Your backend has no public URL, needs batch processing, or wants fine grained control over consumption rate

Push is the simpler default. You can swap strategies later without changing the Play Console configuration.

Phase 2: Plan

Write the plan before provisioning anything.

Infrastructure checklist

  • One Pub/Sub topic (example: play-billing-notifications). One topic handles subscriptions, one time products, and voided purchases.
  • One subscription attached to the topic with an appropriate ack-deadline (60s is a reasonable starting point).
  • IAM binding granting roles/pubsub.publisher to [email protected] on the topic.
  • Play Console Monetization setup pointing at projects/YOUR_PROJECT_ID/topics/play-billing-notifications.
  • A test notification fired from the Play Console to confirm end to end wiring.

Read the full file on GitHub · 233 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 13d ago First seen · 233 lines · 56 tokens per session scan A b45bc8334dd3

Subscribe to this mod's changes

rtdn is a skill published in the GitHub repository RevenueCat/play-billing-skills (53 stars, last pushed 3mo ago), licensed Apache-2.0. It adds 56 tokens to every session and 2,585 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

convex-billing

Add Stripe billing/payments to the Convex app via @convex-dev/stripe (checkout + webhook + gating).

openclaw/clawhub · 29 tokens

cloudbase-wechat-integration

A guide for connecting CloudBase applications to WeChat services, including payments, official accounts, and user identity.

TencentCloudBase/CloudBase-AI-Toolkit · 94 tokens

commerce-app-business-config

Manage custom business configuration in an Adobe Commerce app. Use when the user wants to add, modify, or remove merchant-configurable settings (config fields, admin config, store configuration) exposed through Commerce Admin. Creates typed config fields (text, password, email, url, tel, boolean, list) in…

adobe/skills · 80 tokens

baselinker-webhooks

Receive BaseLinker (Base.com) webhooks. Use when building a BaseLinker order or warehouse callback receiver, because BaseLinker is not a normal webhook source: deliveries arrive as HTTP HEAD requests with NO body, the entire payload is in the query string (observed params: orderid, state), there is NO signature…

hookdeck/webhook-skills · 131 tokens

b2c-custom-job-steps

Create custom job steps for B2C Commerce batch processing. Use this skill whenever the user needs to write a batch job, data export script, scheduled cleanup task, or any server-side processing that runs on a schedule. Also use when they ask about steptypes.json, chunk-oriented vs task-oriented job steps…

SalesforceCommerceCloud/b2c-developer-tooling · 148 tokens

b2c-business-manager-extensions

Build Business Manager extension cartridges with custom admin tools, menu items, and dialog actions. Use this skill whenever the user needs to create bm cartridges, add menu actions or dialog buttons in BM, configure bmextensions.xml, or extend admin pages with form overlays. Also use when customizing the BM interface…

SalesforceCommerceCloud/b2c-developer-tooling · 90 tokens