API: Monetization
Controllers: admin-pricing.controller.ts + admin-monetization.controllers.ts.
Pricing
Section titled “Pricing”Mount admin/pricing.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/pricing/config | pricing:read |
| POST | /admin/pricing/overrides | pricing:write |
| PUT | /admin/pricing/overrides/:id | pricing:write |
| DELETE | /admin/pricing/overrides/:id | pricing:write |
GET /admin/pricing/config
Section titled “GET /admin/pricing/config”Returns global defaults + all active overrides.
{ "defaultCoinsPerEpisode": 30, "overrides": [ { "id": "...", "scope": "market", "scopeRef": "EG", "coins": 25, "currencyHint": "EGP", "activeFrom": null, "activeTo": null, "active": true } ]}Create override
Section titled “Create override”{ "scope": "series", "scopeRef": "0193...", "coins": 45, "activeFrom": "2026-08-01T00:00:00Z", "activeTo": null}Scope: market | series | episode. ScopeRef: ISO-2 for market, ID for series/episode.
Coin packages
Section titled “Coin packages”Mount admin/coin-packages.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/coin-packages | pricing:read |
| GET | /admin/coin-packages/:id | pricing:read |
| POST | /admin/coin-packages | pricing:write |
| PUT | /admin/coin-packages/:id | pricing:write |
| DELETE | /admin/coin-packages/:id | pricing:write |
Create
Section titled “Create”{ "sku": "tc_coins_1200_bonus200", "coins": 1200, "bonusCoins": 200, "priceCents": 999, "currency": "USD", "rails": ["apple", "google", "card_web"], "status": "active"}Promos
Section titled “Promos”Mount admin/promos.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/promos | pricing:read |
| GET | /admin/promos/:id | pricing:read |
| POST | /admin/promos | pricing:write |
| PUT | /admin/promos/:id | pricing:write |
| DELETE | /admin/promos/:id | pricing:write |
Create
Section titled “Create”{ "code": "WELCOME2026", "type": "coin_grant", "config": { "amount": 100, "max_uses_per_user": 1, "trigger": "manual_claim" }, "budgetCoins": 500000, "window": { "start": "2026-01-01T00:00:00Z", "end": "2026-03-31T23:59:59Z" }, "segmentId": null}Types: bonus_multiplier, coin_grant, trial_ext. See Promos guide for config schemas.
Subscriptions (read)
Section titled “Subscriptions (read)”Mount admin/subscriptions.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/subscriptions | payments:read |
Query: status, platform, country, cursor, limit.
Returns list of active/expired subscriptions across users. Read-only in v2.
Economy monitor
Section titled “Economy monitor”Mount admin/economy.
GET /v1/admin/economy
Section titled “GET /v1/admin/economy”Permission: any of analytics:read, payments:read, pricing:read.
Query: dateFrom, dateTo, market, segmentId.
Response:
{ "period": { "start": "...", "end": "..." }, "mintedCoins": 1234567, "burnedCoins": 987654, "liabilityBonusCoins": 2345678, "liabilityPaidCoins": 3456789, "zeroSumBreach": false, "mintedBySource": { "source_iap_apple": 500000, "source_promo": 12000, "source_support_grant": 3400, ... }, "burnedBySink": { "sink_unlock": 900000, "sink_refund": 87000, ... }, "daily": [ /* per-day series */ ]}