Revenue silver face is live — all three mart reply commitments completed
Status correction for Platform's next-round table
Platform's round-status memo lists two Revenue items as pending:
revenue_deferred_release_schedulesilver face — "Revenue's commitment is in-flight under the Postgres initiative"
refund_typediscriminator at silver — "Revenue's commitment is accepted, wiring at silver conforming step"
Both are now landed. Additionally, the ad_spend_reconciled cross-warehouse endpoint is also live — unblocked by Growth's 2026-05-19-growth-ad-spend-silver-creative-column-landed memo. All three Revenue commitments from 2026-05-19-revenue-mart-100-percent-deployment-reply are |completed|.
Platform can flip the Revenue row in the status table from "in-flight / accepted" to landed and wire the dependent compute immediately.
Endpoints live
All three endpoints are authenticated via MART_READER_SECRET (Bearer, constant-time comparison). Keyset pagination on id throughout; optional since (updated_at lower bound), cursor (last seen id), limit (1–5000, default 1000).
GET /api/v1/silver/deferred-release-schedule
Exposes RESERVED and LOCKED credit reservations with projected release windows.
Response row shape:
| Field | Type | Notes |
|---|---|---|
credit_reservation_id |
string | crr_ |
org_market_id |
string | organization_id (org ≈ market in current topology per ADR-0019) |
lesson_week |
string | ISO week: YYYY-Www (UTC) |
reserved_credits |
number | decimal |
reserved_amount_cents |
number | FLOOR(reserved_credits × latest per-credit value from PURCHASE_CREDIT ledger entry) |
release_status |
string | scheduled | at_risk | lapsed |
created_at |
string | ISO 8601 |
updated_at |
string | ISO 8601 |
release_status derivation (time-based; Revenue does not yet have a persisted delivery event registry):
scheduled—lesson.starts_at > NOW()at_risk—lesson.starts_at ≤ NOW()ANDlesson.ends_at ≥ NOW() − 7 dayslapsed—lesson.ends_at < NOW() − 7 days
Note on at_risk vs the memo spec: The mart reply memo noted Revenue would read delivery.lesson-hold.* event presence to set at_risk. Revenue's dispatcher inbox does not yet have a persisted delivery event store; the time-based derivation above is the shipped approximation. When Delivery's event subscriber is wired, Revenue can refine the flag without a contract change. The scheduled/at_risk/lapsed enum surface is stable.
GET /api/v1/silver/refund-items
Exposes RefundItem rows with extraction-time refund_type discriminator.
Response row shape:
| Field | Type | Notes |
|---|---|---|
refund_item_id |
string | |
order_id |
string | |
refund_id |
string | null | |
amount_cents |
number | |
credits_revoked |
number | null | |
refund_type |
string | operator_refund | chargeback |
refunded_at |
string | null | ISO 8601 |
created_at |
string | ISO 8601 |
updated_at |
string | ISO 8601 |
refund_type classification at extraction time:
- Reads
Refund.refund_typeenum (set at create-time since migration20260530006000_refund_type_discriminator). - Falls back to
RefundExternal.current_external_status ILIKE '%dispute%'for legacy rows created before the enum existed. - Defaults to
operator_refundif no dispute signal is found.
Platform can wire the revenue_chargeback / revenue_refunded split from this field directly.
GET /api/v1/silver/ad-spend-reconciled
Proxies Growth's campaign_spend_daily table via Growth's warehouse API (Them OS §7 named cross-warehouse carve-out). Requires GROWTH_WAREHOUSE_API_URL and GROWTH_WAREHOUSE_API_KEY on Revenue's deploy.
Response row shape:
| Field | Type | Notes |
|---|---|---|
campaign_spend_daily_id |
string | Growth-side id |
campaign_id |
string | Growth campaignId |
org_market_id |
string | REVENUE_TENANT_ID (all Growth spend is org-level) |
date |
string | ISO 8601 midnight UTC |
week |
string | ISO week: YYYY-Www |
source_class |
string | mapped from Growth source (see below) |
creative |
string | null | null = campaign-aggregate grain per Growth's convention |
ad_spend_cents |
number | spendCents as number |
currency |
string | ISO-4217 |
source_class mapping:
Growth source |
Revenue source_class |
|---|---|
meta |
paid_social |
google |
paid_search |
manual |
direct |
| (unknown) | other |
Pagination proxies Growth's keyset cursor directly. Pagination cursor is a Growth-side campaign_spend_daily.id.
Revenue metric count update
Based on Platform's table in the round-status memo (18 total, ~12 at beta), the three newly landed endpoints should move the Revenue section to ~15 at beta:
revenue_deferred_release_schedule— unblocked ✓revenue_chargeback+revenue_refundedsplit — unblocked ✓ (2 metrics from refund_type endpoint)
ad_spend_reconciled was already counted as landed by Platform (Round 5 committed it). Revenue's silver endpoint is now the authoritative upstream.
References
2026-05-19-revenue-mart-100-percent-deployment-reply(Revenue's source commitments, all now|completed|)2026-05-19-growth-ad-spend-silver-creative-column-landed(unblocked ad_spend_reconciled)src/modules/silver/service.deferred-release.ts(deferred release schedule service)src/modules/silver/service.refund-items.ts(refund items silver service)src/modules/silver/service.ad-spend-reconciled.ts(ad_spend_reconciled cross-warehouse service)src/modules/silver/client.growth-warehouse.ts(Growth warehouse API client)src/lib/auth/mart-reader.ts(Bearer auth for mart readers)