Cancel a resident benefit enrollment
Ends an enrollment immediately on the property manager's authority, ignoring the tenant's commitment. Requires the resident_benefit_packages:write permission.
Authorization
AuthorizationstringrequiredPath parameters
enrollmentIdstringrequiredThe enrollment, as a Snowflake id in decimal string form.
Body
application/json
reasonstringrequiredWhy the enrollment is being cancelled. 1 to 500 characters. Stored on the enrollment as cancelledReason.
Response
200 · The enrollment, now `cancelled`.
idstringrequiredThe enrollment, as a Snowflake id in decimal string form.
leaseIdstringrequiredThe lease the enrolled tenant is on.
unitIdstringrequiredThe unit that lease is for.
propertyIdstringrequiredThe property that unit belongs to.
tenantIdstringrequiredThe enrolled tenant.
packageIdstringrequiredThe package the tenant is enrolled in.
statusenum<string>requiredpendingActivation is enrolled but not yet live with the partner, active is live, cancelled is terminal — re-enrolling creates a new record.
enrolledAtstring · date-timerequiredWhen the enrollment was created, in the company's timezone.
enrolledByenum<string>requiredWho performed the enrollment. Always propertyManager for an enrollment made through this API.
enrolledViastringrequiredThe surface the enrollment came from. Enrollments made through this API are stamped company_portal.
commitmentMonthsintegerrequiredThe commitment the tenant took on, copied from the package at enrollment and fixed afterwards.
committedUntilstring · date-timerequiredThe end of the tenant's commitment, in the company's timezone. It is the floor for a tenant-requested cancellation, not for a property manager's.
serviceStartsAtstring · date-timerequiredWhen benefits and billing begin. Enrolling on or after the 15th of a month pushes this to the start of the next month; enrolling before a lease starts anchors it to the lease start.
retailPriceSnapshotnumberrequiredThe package's list price at the moment of enrollment, as a decimal amount.
customRetailPricenumberA per-tenant price the property manager set on this enrollment. Absent when there is none; 0 means the property manager funds it.
effectiveRetailPricenumberrequiredWhat this enrollment bills next: the per-tenant override if one is set, otherwise the price snapshot while the price lock holds, otherwise the package's current list price.
cancellationRequestedAtstring · date-timeWhen the tenant asked to cancel. Absent when no request is outstanding.
cancelAtstring · date-timeWhen a scheduled cancellation takes effect. Absent when nothing is scheduled. No charge is posted for a period starting on or after it.
cancelOriginenum<string>Who scheduled the pending cancellation. Absent when nothing is scheduled.
cancelledAtstring · date-timeWhen the enrollment actually reached cancelled. Absent until then.
cancelledByenum<string>Who cancelled it. Absent until it is cancelled.
cancelledReasonstringThe reason recorded with the cancellation. Absent until it is cancelled.
firstChargedAtstring · date-timeWhen the first charge posted. Absent until then.
paidThroughstring · date-timeExclusive end of the latest month a charge actually posted for. Absent until the first charge. It is what paid-through cancellation maths is based on.
nextChargeDatestring · date-timeWhen the next monthly charge is due. Absent once the enrollment is cancelled.
400 · `reason` is missing, empty, or longer than 500 characters.
401 · The request carried no valid access token.
403 · The caller is not a property manager, or is missing the `resident_benefit_packages:write` permission.
404 · No enrollment with that id on this company.
Cancellation is terminal — the tenant cannot be put back on the same enrollment, only enrolled again, which creates a new one. nextChargeDate is cleared, so nothing further bills, and the partner-side membership is removed. Cancelling an enrollment that is already cancelled changes nothing and returns it as it stands.