Reactivation
Overview
A user in PAUSED status can return to ACTIVE through one of two flows:
| Flow | Endpoint | Description |
|---|---|---|
MX Reactivation |
|
Admin-initiated. Sets user to active and unblocks Auth0. No payment collection. |
Collect-on-Reactivation |
|
User-initiated. Collects any outstanding float balance and reactivates the subscription before setting user to active. |
MX Reactivation
Used by MX operations to reactivate a user without collecting payment. Typically used after resolving an investigation or manually clearing a situation.
Flow
POST /users/{user_id}/reactivate
│
▼
User must exist and have status PAUSED ──No──► 400 Bad Request
│ Yes
▼
Get current membership (or create base membership)
│
▼
Write new membership record
status: (empty — good standing)
event_type: REACTIVATE
reactivation_date: now
│
▼
Update user status → ACTIVE
│
▼
Unblock Auth0 account
│
▼
Return 200 OK
Notes
-
Does not collect outstanding floats or reactivate a subscription.
-
Used exclusively via the admin API — not accessible to end users.
-
event_typeis set toREACTIVATE(vsMANUAL_REACTIVATIONfor user-initiated) to distinguish source in the Kinesis stream and avoid triggering automated subscription cancellation logic downstream.
Collect-on-Reactivation
The primary user-facing reactivation flow. Collects any outstanding float balance, reactivates the subscription, updates the membership, and marks the user as active.
Request
{
"tier": "base"
}
tier is optional and defaults to "base" if not provided or if the request body is empty. The tier is resolved to its current version from Growthbook before use.
Cooldown Period
A user cannot reactivate again within ReactivationLimitDays of their last reactivation date. Attempts within the cooldown window return 403 Forbidden.
Flow
POST /{user_id}/user/collect
│
▼
Decode request body (default tier: "base")
│
▼
Fetch tier config from Growthbook
Resolve tier version
│
▼
User in INVESTIGATE status? ──Yes──► 405 Method Not Allowed
│ No
▼
Get current membership
Check reactivation cooldown ──Within cooldown──► 405 Method Not Allowed
│ Outside cooldown
▼
Repay outstanding float balance (Float Service)
├── Not found (no float): continue
├── Partial repayment (402): continue with partial
└── Error: 500
│
▼
Reactivate subscription (Subscription Service)
├── Already active (200): continue
├── Created (201): success
└── Other error: 500
│
▼
Write new membership record
status: (empty — good standing)
event_type: MANUAL_REACTIVATION
reactivation_date: now
│
▼
Update user status → ACTIVE
│
▼
Persist active Plaid item records (remove TTLs)
└── Failure: logged but non-fatal (user already charged)
│
▼
Recalculate underwriting (Underwriting Service)
└── Failure: logged but non-fatal
│
▼
Send AppsFlyer acquisition event
│
▼
Send reactivation receipt via Segment
│
▼
Full float repayment?
├── Yes → 201 Created
└── No → 206 Partial Content
Response
Both 201 Created and 206 Partial Content indicate a successful reactivation. The difference is whether the outstanding float was fully collected.
| Field | Description |
|---|---|
|
|
|
Total amount collected (float + subscription), in dollars |
|
Outstanding float balance remaining after collection, in dollars |
Partial Success (206)
A 206 Partial Content response means the user is fully reactivated but their float balance was not fully collected. The remaining balance will be retried on the next billing cycle. The user should be shown a message indicating the partial payment and remaining balance.
Reactivation Receipt
On success, a user-reactivation-receipt event is sent to Segment with the following fields:
| Field | Description |
|---|---|
|
Billing frequency (e.g. |
|
Total amount collected (float + subscription) |
|
Amount collected toward the float |
|
Subscription amount charged |
|
RFC3339 timestamp of reactivation |
|
Always |
|
Last 4 digits of the debit card used |
|
The tier the user reactivated to (uppercased) |
Related Pages
-
User Lifecycle — Full status lifecycle and cancellation flow
-
Users & Data Model — Membership event types and status values
-
Membership Upgrades — Upgrading tier after reactivation
-
Event-Driven Flows —
MANUAL_REACTIVATIONandREACTIVATEevents produced on the outbound Kinesis stream