Tenants

Deactivate a tenant

Marks a tenant inactive so they can no longer sign in to the tenant portal. Nothing is deleted: the tenant, their history and their ledger stay exactly as they are, and the tenant can be reactivated later.

DELETE
https://api.portal.magicdoor.com/company-app/tenants/{tenantId}/deactivate

Authorization

Authorizationstringrequired
Bearer token — Send your API token in the Authorization header as Bearer <token>. Requests without a valid token are rejected with 401 Unauthorized.

Path parameters

tenantIdstringrequired

The tenant. A Snowflake id, sent as a decimal string.

example: 1830472847398404096

Query parameters

forceMoveOutFromLeasesboolean

false, the default, refuses to deactivate a tenant who is still on a lease that has not ended. true moves them out of every one of those leases first, then deactivates them.

default: false

Response

200 · The tenant, now with `active` set to `false`.

idstring

The tenant. This is the person, not their place on any particular lease.

activeboolean

false once the tenant has been deactivated. A deactivated tenant cannot sign in and cannot be given a new password.

emailstring

Email address. Absent when none is on file.

firstNamestring

Given name.

lastNamestring

Family name. Absent when only a first name is on file.

phonestring

Phone number, formatted for reading. Absent when none is on file.

createdstring · date-time

When the tenant record was created.

updatedstring · date-time

When the tenant record was last changed.

lastSeenstring · date-time

When the tenant last used the tenant portal. Absent when they never have.

lastPortalInvitestring · date-time

When a portal invite was last sent. Absent when none ever was.

portalStatusenum<string>

Where the tenant is in getting onto the tenant portal: notInvited (never invited), invited (invited but never signed in), active (has signed in).

notInvitedinvitedactive
chatIdstring

The tenant's conversation with the company. Absent when no conversation exists.

languagestring

ISO 639-1 language code used for messages to this tenant.

ssnstring

The tenant's Social Security number, if one was recorded. Returned in full, so treat every response containing it as sensitive. No example is shown here on purpose.

driversLicenseobject

Driver's licence details, if recorded. Returned in full, so treat it as sensitive. No example is shown here on purpose.

dateOfBirthstring · date

The tenant's date of birth, if recorded. No example is shown here on purpose.

genderenum<string>

The tenant's recorded gender. Absent when not recorded.

malefemaleotherpreferNotToSay
currentAddressobject

Where the tenant currently lives, as recorded on the tenant record. This is not derived from their lease.

emergencyContactsobject[]

People to contact in an emergency.

iconsstring[]

Icon keys a property manager has pinned to the tenant. Always present, possibly empty.

imageIdstring

The tenant's photo. Absent when they have none.

primaryLeaseIdstring

Of the tenant's leases that have not ended, the one with the highest rent. Absent when they are on none.

currentLeasesobject[]

Every lease the tenant is on that has not ended.

propertiesobject[]

The properties behind currentLeases.

unitsobject[]

The units behind currentLeases.

401 · The access token is missing, expired, or does not belong to a property manager.

404 · No tenant with that id exists for the calling company. A record that belongs to another company is reported the same way as one that does not exist. The id you asked for is in `entityId`; `detail` names only the kind of record.

409 · The tenant is still on at least one lease that has not ended, and `forceMoveOutFromLeases` was not set. The count is in `title`, and `instance` carries the exception name rather than a request path — this response is assembled by the controller rather than by the usual problem-details machinery.

Deactivating sets active to false on the tenant and disables their MagicDoor sign-in. That is the whole of it.

What changes: the tenant can no longer sign in to the tenant portal. Lists that filter on active=true stop returning them.

What does not change: the tenant record itself, their name and contact details, their identity documents, their lease history, their payments and their ledger are all untouched and still readable through this API. Deactivating a tenant does not remove them from a lease unless you ask for that with forceMoveOutFromLeases.

There is no endpoint in this section that erases a tenant. Reactivate a tenant puts them back.

forceMoveOutFromLeases changes leases

With forceMoveOutFromLeases=true the tenant is moved out of every lease that has not ended before they are deactivated. That is a real change to those leases and to anything derived from them. It is not undone by reactivating the tenant.

Calling it twice is harmless

Deactivating an already-inactive tenant returns the tenant unchanged rather than failing.