CLI reference
This page is generated from the cobra command tree (go run ./scripts/gen-cli-reference). It’s the canonical surface — when prose elsewhere disagrees, this page wins.
revcat apps
Section titled “revcat apps”Manage RevenueCat apps (per-platform inside a project)
Each project has one app per platform/storefront (one for iOS, one forAndroid, etc.).
Read commands `list`, `view`, `public-keys`, `storekit-config` work onany app. Write commands `create`, `update`, `delete` use the v2 appendpoints; pass `--file <path>` for any non-trivial body since theschema is wide and storefront-specific.Usage
revcat appsSubcommands: create, delete, list, public-keys, storekit-config, update, view
revcat apps create
Section titled “revcat apps create”Create an app under the active project
Create a new app. v2's app body is discriminated by --type and theshape varies per storefront. For the common cases revcat takesshortcut flags:
--type app_store --bundle <com.acme.app> --type play_store --package <com.acme.app> --type amazon --package <com.acme.app>
Anything more (Stripe, rc_billing, paddle, roku, mac_app_store, or anyoptional fields like a shared_secret) needs --file <path.json>.
Examples: revcat apps create --type app_store --bundle com.acme.app --name "Acme iOS" revcat apps create --file ./apps/new-stripe.json revcat apps create --file - <<< '{"name":"Web","type":"stripe","stripe":{"stripe_account_id":"acct_..."}}'Usage
revcat apps create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--bundle | string | - | Bundle id (app_store / mac_app_store) |
--file | string | - | Path to a JSON file with the full v2 body (use - for stdin) |
--name | string | - | App name |
--package | string | - | Package name (play_store / amazon) |
--type | string | - | Storefront type: app_store | play_store | amazon | mac_app_store (use —file for stripe / rc_billing / paddle / roku) |
revcat apps delete
Section titled “revcat apps delete”Delete an app (hard delete)
Delete an app. This is a hard delete and can return 409 if the apphas dependent resources (offerings, products, etc.). Prefer to drainthose first.Usage
revcat apps delete <app_id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the confirmation prompt |
revcat apps list
Section titled “revcat apps list”List apps in the active project
Usage
revcat apps listrevcat apps public-keys
Section titled “revcat apps public-keys”List the public SDK keys for an app
Usage
revcat apps public-keys <app_id>revcat apps storekit-config
Section titled “revcat apps storekit-config”Print the StoreKit configuration for an iOS app
Usage
revcat apps storekit-config <app_id>revcat apps update
Section titled “revcat apps update”Update an app
Update an existing app. Pass --name to rename, or --file <path.json>for a full v2 body (everything except 'type'). Send a nested field asnull in the JSON body to clear it (e.g. {"app_store":{"shared_secret":null}}).
Examples: revcat apps update app_abc --name "Acme iOS (renamed)" revcat apps update app_abc --file ./patch.jsonUsage
revcat apps update <app_id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--file | string | - | Path to a JSON file with the v2 update body (use - for stdin) |
--name | string | - | Rename the app |
revcat apps view
Section titled “revcat apps view”Show one app
Usage
revcat apps view <id>revcat audit-logs
Section titled “revcat audit-logs”Inspect the project’s audit log
Usage
revcat audit-logsAliases: audit
Subcommands: list
revcat audit-logs list
Section titled “revcat audit-logs list”List audit log entries
Usage
revcat audit-logs listrevcat auth
Section titled “revcat auth”Manage RevenueCat authentication
revcat authenticates against RevenueCat via OAuth. One browser loginwrites the credential to ~/.revcat/config.json (mode 0600). A per-repo.revcat/config.json (written by `revcat init`) carries that credentialinto the directory so agents and sandboxes inside the directory inheritit without touching the global file.
Most users only need:
revcat auth login # browser OAuth cd ~/your/repo && revcat init # bind this repo to a project revcat auth status
For CI / fresh sandboxes with no browser: set REVCAT_REFRESH_TOKEN(and REVCAT_PROJECT_ID) to skip both file and login flow.Usage
revcat authSubcommands: doctor, list, login, logout, status, use
revcat auth doctor
Section titled “revcat auth doctor”Self-diagnose auth setup
Walk through the most common auth misconfigurations and report what'sworking, what isn't, and how to fix it.Usage
revcat auth doctorrevcat auth list
Section titled “revcat auth list”List stored auth profiles
Usage
revcat auth listrevcat auth login
Section titled “revcat auth login”Authenticate revcat against RevenueCat via OAuth
Run the browser OAuth flow and store the resulting tokens. The OAuthclient is RevenueCat's public PKCE client by default; override withREVCAT_OAUTH_CLIENT_ID or --client-id.
Tokens are written to ~/.revcat/config.json (mode 0600). After login,run `revcat init` inside your project directory to bind a project_id(or set REVCAT_PROJECT_ID per command).
Examples: revcat auth login # browser, default profile revcat auth login --name work # browser, named profile revcat auth login --client-id <id> # custom OAuth client_idUsage
revcat auth login [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--client-id | string | - | OAuth client_id (defaults to REVCAT_OAUTH_CLIENT_ID env or the embedded public client) |
-n, --name | string | - | Profile name (default: ‘default’) |
--no-verify | bool | - | Skip the API check that the credentials work after login |
--scope | stringSlice | - | OAuth scopes (default: revcat’s full read/write set) |
revcat auth logout
Section titled “revcat auth logout”Remove a stored auth profile
Delete a stored auth profile from ~/.revcat/config.json. Pass --allto wipe every profile.Usage
revcat auth logout [<profile>] [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--all | bool | - | Delete every stored profile |
-y, --yes | bool | - | Skip confirmation prompt |
revcat auth status
Section titled “revcat auth status”Show the active auth profile and resolved project
Print the active credential and where it came from (local.revcat/config.json, global ~/.revcat/config.json, or env hatch). Pass--validate to also hit the RevenueCat API and confirm the token isaccepted.Usage
revcat auth status [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-n, --name | string | - | Override the active global profile (ignored when a local config is present) |
--validate | bool | - | Hit the API to confirm the credential is accepted |
revcat auth use
Section titled “revcat auth use”Set the default auth profile
Set the active auth profile by writing the name to ~/.revcat/active.Equivalent to passing --profile <name> on every command, or settingREVCAT_PROFILE in your shell.Usage
revcat auth use <profile>revcat charts
Section titled “revcat charts”Project charts (revenue, active subs, conversion, etc.)
Charts mirror the dashboard graphs: revenue, active subscribers,conversion, MRR, churn, etc. Run `revcat charts options <name>` forthe supported filters before requesting data.Usage
revcat chartsSubcommands: get, options
revcat charts get
Section titled “revcat charts get”Fetch chart data (raw JSON)
Fetch chart data. Filters via --filter key=value (repeatable). Daterange via --start / --end (YYYY-MM-DD). Period via --period (day | week | month).Usage
revcat charts get <chart_name> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--end | string | - | End date YYYY-MM-DD |
--filter | stringArray | - | key=value (repeatable) |
--period | string | - | day | week | month |
--start | string | - | Start date YYYY-MM-DD |
revcat charts options
Section titled “revcat charts options”Show the available filters/dimensions for a chart
Usage
revcat charts options <chart_name>revcat collaborators
Section titled “revcat collaborators”Inspect project collaborators (members)
List the people with access to the active RevenueCat project.
Read-only: v2 doesn't expose invite / role-change / remove via REST.Manage membership in the dashboard.Usage
revcat collaboratorsAliases: members
Subcommands: list
revcat collaborators list
Section titled “revcat collaborators list”List collaborators on the active project
Usage
revcat collaborators listrevcat doctor
Section titled “revcat doctor”Run a top-level health check
Usage
revcat doctorrevcat entitlements
Section titled “revcat entitlements”Manage RevenueCat entitlements
Entitlements are project-level access flags (e.g., "premium", "pro").Customers gain entitlements via products attached on offerings, or viapromotional grants. Use `revcat subscribers info <user_id>` to see whata specific customer has.Usage
revcat entitlementsAliases: ent
Subcommands: archive, attach, create, delete, detach, list, products, unarchive, update, view
revcat entitlements archive
Section titled “revcat entitlements archive”Archive an entitlement
Usage
revcat entitlements archive <id>revcat entitlements attach
Section titled “revcat entitlements attach”Attach product(s) to an entitlement
Usage
revcat entitlements attach <id> <product_id> [<product_id> ...]revcat entitlements create
Section titled “revcat entitlements create”Create an entitlement
Create an entitlement. For the common case use shortcut flags:
revcat entitlements create --id premium --display-name "Premium"
For arbitrary v2 fields, pass --file <path.json>.Usage
revcat entitlements create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--display-name | string | - | Display name shown in dashboards |
-f, --file | string | - | Body as JSON file (or ’-’ for stdin) |
--id | string | - | Entitlement lookup_key (e.g., premium) |
revcat entitlements delete
Section titled “revcat entitlements delete”Delete an entitlement
Usage
revcat entitlements delete <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat entitlements detach
Section titled “revcat entitlements detach”Detach product(s) from an entitlement
Usage
revcat entitlements detach <id> <product_id> [<product_id> ...]revcat entitlements list
Section titled “revcat entitlements list”List all entitlements in the active project
Usage
revcat entitlements listrevcat entitlements products
Section titled “revcat entitlements products”List products attached to an entitlement
Usage
revcat entitlements products <id>revcat entitlements unarchive
Section titled “revcat entitlements unarchive”Unarchive an entitlement
Usage
revcat entitlements unarchive <id>revcat entitlements update
Section titled “revcat entitlements update”Update an entitlement
Usage
revcat entitlements update <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--display-name | string | - | New display name |
-f, --file | string | - | Patch body as JSON |
revcat entitlements view
Section titled “revcat entitlements view”Show one entitlement by lookup_key
Usage
revcat entitlements view <id>revcat init
Section titled “revcat init”Bootstrap project context (revcat.toml + .revcat/config.json)
Bind the current directory to a RevenueCat project. Writes:
- revcat.toml (committed): project_id + optional apps - .revcat/config.json (gitignored, mode 0600): credentials + project_id
After init, every command run inside this directory inherits the projectcontext. Agents and sandboxes that have access to the directory can runrevcat without touching the global ~/.revcat/config.json.
Interactive (default): lists projects you can access, prompts for one,then optionally lists apps in that project and lets you tag them.
Scripted: pass --project-id (and optional --app-id, repeated). Skip theapps block entirely with --no-apps. Skip the local creds copy with--no-local-creds (writes only revcat.toml).Usage
revcat init [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--app-id | stringSlice | - | App ids to record (repeatable) |
--force | bool | - | Overwrite an existing revcat.toml or .revcat/config.json |
--no-apps | bool | - | Skip the apps section entirely |
--no-local-creds | bool | - | Don’t write .revcat/config.json (only revcat.toml) |
--path | string | - | Where to write files (default: cwd) |
revcat invoices
Section titled “revcat invoices”Inspect invoices
Usage
revcat invoicesSubcommands: view
revcat invoices view
Section titled “revcat invoices view”Show one invoice (raw JSON)
Usage
revcat invoices view <id>revcat metrics
Section titled “revcat metrics”Project-level revenue + subscription metrics
Usage
revcat metricsSubcommands: overview
revcat metrics overview
Section titled “revcat metrics overview”Headline metrics for the active project
Returns the dashboard's headline numbers (active subscribers, MRR,lifetime revenue, conversion). Shape is preserved verbatim; the tableview flattens top-level keys.Usage
revcat metrics overviewrevcat offerings
Section titled “revcat offerings”Manage RevenueCat offerings
An offering is a presentation grouping of packages displayed on apaywall. Each project has 0..N offerings; exactly one is "current" and isreturned by SDKs that ask for the current offering.
To set an offering current along with a paywall config in one shot, use`revcat publish offering`.Usage
revcat offeringsAliases: offer
Subcommands: archive, create, delete, list, preview, set-current, unarchive, update, view
revcat offerings archive
Section titled “revcat offerings archive”Archive an offering
Usage
revcat offerings archive <id>revcat offerings create
Section titled “revcat offerings create”Create an offering
Usage
revcat offerings create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--display-name | string | - | Display name |
-f, --file | string | - | Body as JSON file |
--id | string | - | Offering lookup_key |
revcat offerings delete
Section titled “revcat offerings delete”Delete an offering
Usage
revcat offerings delete <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat offerings list
Section titled “revcat offerings list”List all offerings in the active project
Usage
revcat offerings listrevcat offerings preview
Section titled “revcat offerings preview”Show what the SDK will receive from /v1/subscribers/{user}/offerings
Hit the v1 SDK-facing endpoint that `Purchases.getOfferings()` calls andrender the response. Useful when the dashboard looks healthy but the SDKreports zero packages.
Auth is auto-handled: revcat fetches the public SDK key for the project'sapp on the chosen platform and sends it as the bearer. `--as` defaults to asynthetic user id (`revcat_preview_<unix_ms>`) so you don't have to thinkabout it.
Pass an optional <offering_id> to filter the rendered output to a singleoffering (the request still fetches all offerings; v1 has no per-offeringendpoint).Usage
revcat offerings preview [<offering_id>] [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--app-id | string | - | App id to derive the public SDK key from (default: auto-detect) |
--as | string | - | User id to query as (default: revcat_preview_<unix_ms>) |
--platform | string | ios | Storefront platform to preview (ios|android|web) |
revcat offerings set-current
Section titled “revcat offerings set-current”Promote an offering to current
Promote an offering so SDKs returning "current offering" hand back thisone. Equivalent to `revcat publish offering <id> --current` minus theplan/confirm flow.Usage
revcat offerings set-current <id>revcat offerings unarchive
Section titled “revcat offerings unarchive”Unarchive an offering
Usage
revcat offerings unarchive <id>revcat offerings update
Section titled “revcat offerings update”Update an offering
Usage
revcat offerings update <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--display-name | string | - | New display name |
-f, --file | string | - | Patch body as JSON |
revcat offerings view
Section titled “revcat offerings view”Show one offering by lookup_key
Usage
revcat offerings view <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--packages | bool | true | Include packages in the rendered card (table mode). On —output json, pass —packages explicitly to opt into the stitched typed shape; default is the verbatim v2 response. |
revcat packages
Section titled “revcat packages”Manage RevenueCat packages (purchasables inside an offering)
Packages are the purchasable units inside an offering. Identifiersfollow RC's $rc_monthly / $rc_annual / custom convention.Usage
revcat packagesAliases: pkg
Subcommands: attach, create, delete, detach, list, products, update, view
revcat packages attach
Section titled “revcat packages attach”Attach product(s) to a package
Attach products to a package. RC v2 stores per-attachment eligibilitycriteria - the same product can have different eligibility on differentpackages. Default is "all" which serves the product to every customer.
Other supported values: "google_sdk_lt_6", "google_sdk_ge_6" (used togate attachment by SDK version on Android). Pass --eligibility tooverride the default.Usage
revcat packages attach <pkg_id> <product_id> [<product_id> ...] [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--eligibility | string | all | Eligibility criteria for the attachment: all | google_sdk_lt_6 | google_sdk_ge_6 |
revcat packages create
Section titled “revcat packages create”Create a package under an offering
Create a package under an offering (passed as id or lookup_key).
Common case via flags:
revcat packages create default --id '$rc_monthly' --display-name "Monthly"
Or pass an arbitrary v2 body via --file:
{ "lookup_key": "$rc_monthly", "display_name": "Monthly", "position": 0 }Usage
revcat packages create <offering> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--display-name | string | - | Display name |
-f, --file | string | - | Body as JSON file |
--id | string | - | Package lookup_key (e.g., $rc_monthly) |
--position | int | 0 | Position in the offering (0-indexed) |
revcat packages delete
Section titled “revcat packages delete”Delete a package
Usage
revcat packages delete <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat packages detach
Section titled “revcat packages detach”Detach product(s) from a package
Usage
revcat packages detach <id> <product_id> [<product_id> ...]revcat packages list
Section titled “revcat packages list”List packages across one offering or all offerings
Usage
revcat packages list [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-o, --offering | string | - | Restrict to a single offering by lookup_key |
revcat packages products
Section titled “revcat packages products”List products attached to a package
List products attached to a package.
The v2 `GET /packages/{id}/products` endpoint returns eachattachment as a binding object: `{eligibility_criteria, product:{...}}`.The full nested product (display_name, app_id, store_identifier, etc.)arrives in the same response. `--output json` returns the raw v2items verbatim; the table view flattens them.Usage
revcat packages products <id>revcat packages update
Section titled “revcat packages update”Update a package
Usage
revcat packages update <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-f, --file | string | - | Patch body as JSON |
revcat packages view
Section titled “revcat packages view”Show one package by internal id
Usage
revcat packages view <id>revcat paywalls
Section titled “revcat paywalls”Manage top-level paywall resources
Manage paywall records in the project's paywall library. To deploy apaywall config to an offering use `revcat publish offering --paywall <file>`.Usage
revcat paywallsSubcommands: create, delete, list, view
revcat paywalls create
Section titled “revcat paywalls create”Create a paywall record scoped to an offering
Create a paywall record. v2 only takes {offering_id} - the paywallcontent (template, copy, components) is set later via`revcat publish offering <id> --paywall <file>`.
You usually want publish offering instead of this command.Usage
revcat paywalls create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-f, --file | string | - | JSON body |
--offering | string | - | Offering id (required if —file not used) |
revcat paywalls delete
Section titled “revcat paywalls delete”Delete a paywall
Usage
revcat paywalls delete <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat paywalls list
Section titled “revcat paywalls list”List paywalls in the project
Usage
revcat paywalls listrevcat paywalls view
Section titled “revcat paywalls view”Show one paywall (raw JSON)
Usage
revcat paywalls view <id>revcat products
Section titled “revcat products”Manage RevenueCat products (store SKUs)
A product is a project-level catalog entry that mirrors a store SKU(App Store / Play Store / Stripe / Web Billing). Products are attachedto packages, packages live inside offerings.
Most edits accept a JSON file via --file, since the product schemadiffers per store and revcat does not pin a specific shape. Use thev2 docs to author the body, then `revcat products create -f product.json`.Usage
revcat productsAliases: prod
Subcommands: archive, create, delete, list, push-to-store, unarchive, update, view
revcat products archive
Section titled “revcat products archive”Archive a product
Usage
revcat products archive <id>revcat products create
Section titled “revcat products create”Create a product from a JSON body
Create a product from a JSON body on disk. The body shape follows thev2 docs - store_identifier, type (subscription | non_subscription | ...),display_name, app_id are usually required.
Example body: { "store_identifier": "app.monthly", "type": "subscription", "display_name": "Monthly", "app_id": "app_xxx" }
For Test Store products, RevenueCat v2 does not expose price create/updateendpoints. After creating the product, set its price in the RevenueCatdashboard or the SDK will not show packages that contain it.Usage
revcat products create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-f, --file | string | - | Path to JSON body (required) |
revcat products delete
Section titled “revcat products delete”Delete a product (most teams should archive instead)
Usage
revcat products delete <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat products list
Section titled “revcat products list”List products
Usage
revcat products listrevcat products push-to-store
Section titled “revcat products push-to-store”Push a product config to the linked store
Usage
revcat products push-to-store <id>revcat products unarchive
Section titled “revcat products unarchive”Unarchive a product
Usage
revcat products unarchive <id>revcat products update
Section titled “revcat products update”Update a product
Update a product. Pass --file <path.json> for an arbitrary patch, or--display-name <new> for the common case.Usage
revcat products update <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--display-name | string | - | New display name (shortcut for the common case) |
-f, --file | string | - | Patch body as JSON |
revcat products view
Section titled “revcat products view”Show one product
Usage
revcat products view <id>revcat projects
Section titled “revcat projects”Inspect RevenueCat projects
A project is RevenueCat's top-level container - one per app or appfamily. revcat resolves the active project from --project-id,REVCAT_PROJECT_ID, the local .revcat/config.json written by`revcat init`, or revcat.toml.
v2 exposes project create + list. There is no v2 update or delete byid; manage those in the dashboard.Usage
revcat projectsAliases: proj
Subcommands: create, list, view
revcat projects create
Section titled “revcat projects create”Create a new project
Create a new project at the account level.
The project id is generated by RevenueCat and printed on success;quote it (or pipe with --output json) to feed into `revcat init` or`--project-id` for follow-up commands.
Examples: revcat projects create --name "My App" revcat projects create --name staging --output json | jq -r .idUsage
revcat projects create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--name | string | - | Project name (required) |
revcat projects list
Section titled “revcat projects list”List projects accessible to this credential
Usage
revcat projects listrevcat projects view
Section titled “revcat projects view”Show one project by id (defaults to the resolved project)
Usage
revcat projects view [id]revcat publish
Section titled “revcat publish”One-shot deploy verbs (offering, paywall, …)
Publish-style verbs compose several API calls behind a single command.The intent is to mirror the dashboard's higher-level actions ("set ascurrent", "deploy paywall") rather than mirror REST endpoints.Usage
revcat publishSubcommands: offering
revcat publish offering
Section titled “revcat publish offering”Set an offering as current and/or push a paywall config
Composes the dashboard's "deploy" workflow:
1. Verify the offering exists in the active project 2. (optional) Validate and PUT a paywall config from --paywall <path> 3. (optional) Promote the offering to current
By default both steps run when their inputs are provided. The plan isprinted before execution; pass --confirm to skip the prompt, or --dry-runto print the plan without making any changes.
Examples: revcat publish offering default --current --confirm revcat publish offering pro --paywall ./paywalls/pro.json --current revcat publish offering pro --paywall ./paywalls/pro.json --dry-runUsage
revcat publish offering <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the confirmation prompt |
--current | bool | - | Set the offering as current |
--dry-run | bool | - | Print the plan without making changes |
--no-current | bool | - | Do NOT set the offering as current (overrides —current default when —paywall is set alone) |
--paywall | string | - | Path to a paywall config JSON file to PUT |
revcat purchases
Section titled “revcat purchases”Inspect non-renewing purchases
A purchase is a one-shot non-renewing transaction (lifetime grants,consumables, in-app one-offs). For subscriptions see `revcat subscriptions`.Usage
revcat purchasesAliases: purchase
Subcommands: entitlements, refund, search, view
revcat purchases entitlements
Section titled “revcat purchases entitlements”List entitlements granted by a purchase
Usage
revcat purchases entitlements <id>revcat purchases refund
Section titled “revcat purchases refund”Refund a non-renewing purchase (Web Billing)
Usage
revcat purchases refund <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat purchases search
Section titled “revcat purchases search”Find purchases by store id
Usage
revcat purchases search <store_id>revcat purchases view
Section titled “revcat purchases view”Show one purchase
Usage
revcat purchases view <id>revcat subscribers
Section titled “revcat subscribers”Inspect and manage RevenueCat subscribers
Subscribers (a.k.a. customers, app users) are the end-users of your app.revcat treats them as the unit of debugging - one command surfaces theirentitlements, subscriptions, purchases, and aliases in a single card.Usage
revcat subscribersAliases: customers, subs
Subcommands: attributes, create, delete, grant, info, invoices, list, refund, revoke, transfer
revcat subscribers attributes
Section titled “revcat subscribers attributes”Get or set subscriber attributes
With no flags, lists current attributes. With --set key=value (repeatable)or --file <path.json>, upserts the listed attributes.
The v2 attributes endpoint takes an array of {name, value} objects.Both the file and --set forms are normalized to that shape beforesending.Usage
revcat subscribers attributes <user_id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--file | string | - | JSON map of attributes to upsert |
--set | stringArray | - | key=value to upsert (repeatable) |
revcat subscribers create
Section titled “revcat subscribers create”Pre-create a customer (migration / import)
Pre-create a customer record. Most apps let the SDK create customerson first launch; this is for migrations, test seeding, or cases whereyou want to seed attributes before the user opens the app.
Pass --file <path.json> for arbitrary v2 fields (attributes, etc.).Usage
revcat subscribers create <user_id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-f, --file | string | - | Optional JSON body merged into the request |
revcat subscribers delete
Section titled “revcat subscribers delete”Permanently delete a customer (GDPR / test cleanup)
Usage
revcat subscribers delete <user_id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat subscribers grant
Section titled “revcat subscribers grant”Grant a promotional entitlement to a subscriber
Grant a promotional entitlement (audited) to a subscriber for aspecified duration. v2 stores absolute expiry timestamps; revcattranslates --duration to the right "expires_at".
Duration accepts: forever | lifetime (~100 years) 7d, 30d, 90d (days) 1m, 3m, 6m (months ~ 30 days each) 1y, 2y, 5y (years ~ 365 days each)
Examples: revcat subscribers grant app_user_123 premium --duration 7d revcat subscribers grant app_user_123 pro --duration lifetime --confirmUsage
revcat subscribers grant <user_id> <entitlement> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the confirmation prompt |
-d, --duration | string | - | How long the grant lasts (required) |
revcat subscribers info
Section titled “revcat subscribers info”Show a full debug card for a subscriber
Fan out across the v2 customer endpoints (customer + active_entitlements+ subscriptions + purchases + aliases) and render a single card.
Pipe the output to a script and you get JSON instead of the card. Eachsection appears as a top-level key in the JSON object.
Example: revcat subscribers info app_user_123 revcat subscribers info app_user_123 --output json | jq .entitlementsUsage
revcat subscribers info <user_id>revcat subscribers invoices
Section titled “revcat subscribers invoices”List invoices for a customer
Usage
revcat subscribers invoices <user_id>revcat subscribers list
Section titled “revcat subscribers list”List customers in the active project (paged)
Page through every customer. For support workflows that look up aspecific user by email or order id, prefer the searches under`revcat purchases search` and `revcat subscriptions search` (fasterand indexed).Usage
revcat subscribers listrevcat subscribers refund
Section titled “revcat subscribers refund”Refund a transaction on a subscription
Issue a refund through the appropriate store (App Store, Play Store,Stripe, ...). v2 scopes refunds under the subscription, so both idsare required.
Find the subscription id with `revcat subscribers info <user_id>` -each subscription row carries an internal id.
Refund availability depends on the store and the original purchase date.RC returns the updated transaction status; we surface it in JSON if youpipe the output.Usage
revcat subscribers refund <subscription_id> <transaction_id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the confirmation prompt |
revcat subscribers revoke
Section titled “revcat subscribers revoke”Revoke a promotional entitlement from a subscriber
Remove a promotional entitlement that was previously granted via`revcat subscribers grant` or the dashboard. Does not affectentitlements granted by an active store subscription.Usage
revcat subscribers revoke <user_id> <entitlement> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the confirmation prompt |
revcat subscribers transfer
Section titled “revcat subscribers transfer”Transfer entitlements/subscriptions from one customer to another
Usage
revcat subscribers transfer <src_user_id> <dst_user_id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat subscriptions
Section titled “revcat subscriptions”Inspect and manage subscriptions
A subscription is one customer's ongoing purchase relationship with oneproduct. Find it via `revcat subscriptions search <store_id>` or bylisting it under a customer (`revcat subscribers info`).Usage
revcat subscriptionsAliases: sub
Subcommands: cancel, entitlements, management-url, refund, search, transactions, view
revcat subscriptions cancel
Section titled “revcat subscriptions cancel”Cancel a subscription (Web Billing)
Usage
revcat subscriptions cancel <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat subscriptions entitlements
Section titled “revcat subscriptions entitlements”List entitlements granted by a subscription
Usage
revcat subscriptions entitlements <id>revcat subscriptions management-url
Section titled “revcat subscriptions management-url”Print the store-specific manage/cancel URL
Usage
revcat subscriptions management-url <id>revcat subscriptions refund
Section titled “revcat subscriptions refund”Refund the entire subscription (Web Billing)
Usage
revcat subscriptions refund <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat subscriptions search
Section titled “revcat subscriptions search”Find subscriptions by store id (App Store / Play / Stripe / …)
Usage
revcat subscriptions search <store_id>revcat subscriptions transactions
Section titled “revcat subscriptions transactions”List billing transactions for a subscription
Usage
revcat subscriptions transactions <id>revcat subscriptions view
Section titled “revcat subscriptions view”Show one subscription
Usage
revcat subscriptions view <id>revcat version
Section titled “revcat version”Print revcat version and build info
Usage
revcat versionrevcat virtual-currencies
Section titled “revcat virtual-currencies”Manage virtual currencies (coins / credits)
Project-level virtual currencies (in-game coins, credits, tokens).v2 keys VCs by their uppercase code (e.g., COIN, GEM) - that's theidentifier you pass to view/update/delete/archive.
Per-customer balances and transactions are NOT exposed by v2 REST.Usage
revcat virtual-currenciesAliases: vc
Subcommands: archive, create, delete, list, unarchive, update, view
revcat virtual-currencies archive
Section titled “revcat virtual-currencies archive”Archive a virtual currency
Usage
revcat virtual-currencies archive <code>revcat virtual-currencies create
Section titled “revcat virtual-currencies create”Create a virtual currency
Create a virtual currency. Required: name + code. Code is uppercaseand acts as the identifier for view/update/delete.Usage
revcat virtual-currencies create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--code | string | - | Uppercase code (e.g. COIN) |
--description | string | - | Optional description |
-f, --file | string | - | JSON body |
--name | string | - | Display name |
revcat virtual-currencies delete
Section titled “revcat virtual-currencies delete”Delete a virtual currency
Usage
revcat virtual-currencies delete <code> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat virtual-currencies list
Section titled “revcat virtual-currencies list”List virtual currencies
Usage
revcat virtual-currencies listrevcat virtual-currencies unarchive
Section titled “revcat virtual-currencies unarchive”Unarchive a virtual currency
Usage
revcat virtual-currencies unarchive <code>revcat virtual-currencies update
Section titled “revcat virtual-currencies update”Update a virtual currency
Usage
revcat virtual-currencies update <code> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--description | string | - | New description |
-f, --file | string | - | Patch body as JSON |
--name | string | - | New name |
revcat virtual-currencies view
Section titled “revcat virtual-currencies view”Show one virtual currency by uppercase code (e.g. COIN)
Usage
revcat virtual-currencies view <code>revcat webhooks
Section titled “revcat webhooks”Manage webhook integrations
Webhooks are project integrations that receive event POSTs (purchases,renewals, cancellations, refunds, ...). Each webhook has a name, targetURL, and a list of event_types it subscribes to.
Event values are LOWERCASE in the API config (initial_purchase,renewal, cancellation, ...) - even though the webhook payload itselfuses screaming case (INITIAL_PURCHASE). revcat lowercases valuespassed via --events for you.Usage
revcat webhooksSubcommands: create, delete, list, update, view
revcat webhooks create
Section titled “revcat webhooks create”Create a webhook integration
Create a webhook. Required: name, url, event_types. URL must be avalid HTTPS endpoint that RC can validate as reachable - localhost andexample.com don't pass.Usage
revcat webhooks create [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--events | stringSlice | - | Event types (comma-separated). Values are lowercased before send. |
-f, --file | string | - | JSON body |
--name | string | - | Webhook name (required) |
--url | string | - | Target URL (required) |
revcat webhooks delete
Section titled “revcat webhooks delete”Delete a webhook
Usage
revcat webhooks delete <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
-y, --confirm | bool | - | Skip the prompt |
revcat webhooks list
Section titled “revcat webhooks list”List webhook integrations
Usage
revcat webhooks listrevcat webhooks update
Section titled “revcat webhooks update”Update a webhook
Usage
revcat webhooks update <id> [flags]Flags
| Flag | Type | Default | Description |
|---|---|---|---|
--events | stringSlice | - | New event_types list |
-f, --file | string | - | Patch body as JSON |
--name | string | - | New name |
--url | string | - | New target URL |
revcat webhooks view
Section titled “revcat webhooks view”Show one webhook
Usage
revcat webhooks view <id>