Core Objects

The foundational data models that power the DoorStax platform. Each object represents a key entity in property management.

Properties

A property represents a physical real estate asset — a building, complex, or single-family home.

Key Fields

FieldTypeDescription
idStringUnique identifier
nameStringDisplay name
addressAddressFull street address
typePropertyTypeRESIDENTIAL | COMMERCIAL | MIXED
ownerIdStringOwner user ID
unitsUnit[]Associated units
statusStatusACTIVE | INACTIVE | ARCHIVED

Example

json
{
  "id": "prp_abc123",
  "name": "Sunset Apartments",
  "address": {
    "street": "123 Sunset Blvd",
    "city": "Los Angeles",
    "state": "CA",
    "zip": "90028"
  },
  "type": "RESIDENTIAL",
  "ownerId": "usr_own001",
  "status": "ACTIVE",
  "unitCount": 24
}

Related Endpoints

GET/api/properties
POST/api/properties
GET/api/properties/:id
PUT/api/properties/:id
DELETE/api/properties/:id

Units

A unit is a rentable space within a property — an apartment, suite, or room.

Key Fields

FieldTypeDescription
idStringUnique identifier
propertyIdStringParent property
unitNumberStringUnit number or label
bedroomsIntNumber of bedrooms
bathroomsFloatNumber of bathrooms
sqftInt?Square footage
rentAmountDecimalMonthly rent in cents
statusUnitStatusVACANT | OCCUPIED | MAINTENANCE

Example

json
{
  "id": "unt_456",
  "propertyId": "prp_abc123",
  "unitNumber": "4B",
  "bedrooms": 2,
  "bathrooms": 1.5,
  "sqft": 950,
  "rentAmount": 225000,
  "status": "OCCUPIED"
}

Related Endpoints

GET/api/properties/:id/units
POST/api/properties/:id/units
GET/api/units/:id
PUT/api/units/:id

Tenants

A tenant is a person who rents a unit. They have a user account and one or more lease associations.

Key Fields

FieldTypeDescription
idStringUnique identifier
userIdStringAssociated user account
firstNameStringFirst name
lastNameStringLast name
emailStringContact email
phoneString?Phone number
statusTenantStatusACTIVE | PAST | APPLICANT

Example

json
{
  "id": "tnt_012",
  "userId": "usr_tnt012",
  "firstName": "Jane",
  "lastName": "Doe",
  "email": "jane@example.com",
  "phone": "+1-555-0123",
  "status": "ACTIVE"
}

Related Endpoints

GET/api/tenants
POST/api/tenants
GET/api/tenants/:id
PUT/api/tenants/:id

Leases

A lease ties a tenant to a unit for a specific period with defined financial terms.

Key Fields

FieldTypeDescription
idStringUnique identifier
unitIdStringLeased unit
tenantIdStringPrimary tenant
startDateDateTimeLease start date
endDateDateTimeLease end date
rentAmountDecimalMonthly rent in cents
securityDepositDecimalSecurity deposit amount
statusLeaseStatusACTIVE | EXPIRED | TERMINATED

Example

json
{
  "id": "lea_xyz789",
  "unitId": "unt_456",
  "tenantId": "tnt_012",
  "startDate": "2025-01-01T00:00:00.000Z",
  "endDate": "2026-01-01T00:00:00.000Z",
  "rentAmount": 225000,
  "securityDeposit": 225000,
  "status": "ACTIVE"
}

Related Endpoints

GET/api/leases
POST/api/leases
GET/api/leases/:id
PUT/api/leases/:id
POST/api/leases/:id/terminate

Payments

A payment record tracks money movement — tenant rent payments processed through Kadima.

Key Fields

FieldTypeDescription
idStringUnique identifier
leaseIdStringAssociated lease
tenantIdStringPaying tenant
amountDecimalPayment amount in cents
methodPaymentMethodACH | CARD | CHECK
statusPaymentStatusPENDING | COMPLETED | FAILED | REFUNDED
processedAtDateTime?When payment was processed
externalIdString?Kadima transaction ID

Example

json
{
  "id": "pay_def456",
  "leaseId": "lea_xyz789",
  "tenantId": "tnt_012",
  "amount": 225000,
  "method": "ACH",
  "status": "COMPLETED",
  "processedAt": "2025-01-05T10:30:00.000Z",
  "externalId": "txn_kadima_abc"
}

Related Endpoints

GET/api/payments
POST/api/payments
GET/api/payments/:id
POST/api/payments/:id/refund

Ledger Entries

Immutable financial records that track every monetary event. See the Ledger System guide for details.

Key Fields

FieldTypeDescription
idStringUnique identifier
leaseIdStringAssociated lease
typeEntryTypeCHARGE | PAYMENT | REVERSAL | ADJUSTMENT
amountDecimalSigned amount in cents
runningBalanceDecimalBalance after this entry
descriptionStringHuman-readable description

Example

json
{
  "id": "led_abc123",
  "leaseId": "lea_xyz789",
  "type": "CHARGE",
  "amount": 225000,
  "runningBalance": 225000,
  "description": "Rent charge - February 2025"
}

Related Endpoints

GET/api/ledger
GET/api/ledger/:leaseId
GET/api/ledger/:leaseId/balance

Payouts

Payouts represent disbursements from DoorStax to property owners after collecting rent.

Key Fields

FieldTypeDescription
idStringUnique identifier
ownerIdStringRecipient owner
amountDecimalPayout amount in cents
statusPayoutStatusPENDING | PROCESSING | COMPLETED | FAILED
scheduledDateDateTimeScheduled payout date
completedAtDateTime?When payout was sent

Example

json
{
  "id": "po_ghi789",
  "ownerId": "usr_own001",
  "amount": 2100000,
  "status": "COMPLETED",
  "scheduledDate": "2025-01-15T00:00:00.000Z",
  "completedAt": "2025-01-15T06:00:00.000Z"
}

Related Endpoints

GET/api/payouts
GET/api/payouts/:id
POST/api/payouts/:id/retry

Owners

Property owners who receive payouts and manage their portfolio through DoorStax.

Key Fields

FieldTypeDescription
idStringUnique identifier
userIdStringAssociated user account
companyNameString?Business entity name
propertiesProperty[]Owned properties
payoutMethodPayoutMethodACH | WIRE | CHECK

Example

json
{
  "id": "own_001",
  "userId": "usr_own001",
  "companyName": "Sunset Properties LLC",
  "propertyCount": 3,
  "payoutMethod": "ACH"
}

Related Endpoints

GET/api/owners
GET/api/owners/:id
PUT/api/owners/:id

Leads

Prospective tenants who have expressed interest in a unit but have not yet signed a lease.

Key Fields

FieldTypeDescription
idStringUnique identifier
unitIdString?Interested unit
firstNameStringFirst name
lastNameStringLast name
emailStringContact email
statusLeadStatusNEW | CONTACTED | SCREENING | APPROVED | REJECTED
sourceString?Lead source (website, referral, etc.)

Example

json
{
  "id": "lead_jkl012",
  "unitId": "unt_789",
  "firstName": "Alex",
  "lastName": "Smith",
  "email": "alex@example.com",
  "status": "SCREENING",
  "source": "website"
}

Related Endpoints

GET/api/leads
POST/api/leads
GET/api/leads/:id
PUT/api/leads/:id
POST/api/leads/:id/convert

Users

User accounts that authenticate into DoorStax. Every tenant, owner, and team member has a user record.

Key Fields

FieldTypeDescription
idStringUnique identifier
emailStringLogin email
nameStringFull name
roleUserRoleAssigned role
twoFactorEnabledBoolean2FA status
statusUserStatusACTIVE | SUSPENDED | PENDING

Example

json
{
  "id": "usr_abc123",
  "email": "user@example.com",
  "name": "Jane Doe",
  "role": "PROPERTY_MANAGER",
  "twoFactorEnabled": true,
  "status": "ACTIVE"
}

Related Endpoints

GET/api/users
GET/api/users/:id
PUT/api/users/:id
POST/api/users/invite

Expenses

Track property and unit-level expenses with flexible billing assignment. Expenses can be charged to owners, tenants, PMs, insurance, or split between parties.

Key Fields

FieldTypeDescription
idStringUnique identifier
propertyIdStringAssociated property
unitIdString?Specific unit (optional)
categoryExpenseCategoryMAINTENANCE, SERVICES, UPGRADES, TAXES, MORTGAGE, INSURANCE, PAYROLL, OTHER
amountDecimalExpense amount
payableByStringOWNER, TENANT, PM, INSURANCE, SPLIT
statusStringPENDING, APPROVED, INVOICED, PAID, WRITTEN_OFF
tenantIdString?Assigned tenant (when payableBy = TENANT)
paymentIdString?Linked Payment record
splitConfigJson?Split configuration array
recurringBooleanWhether this recurs monthly

Example

json
{
  "id": "exp_abc123",
  "propertyId": "prp_001",
  "category": "MAINTENANCE",
  "amount": 375.00,
  "payableBy": "TENANT",
  "status": "INVOICED",
  "tenantId": "tnt_012",
  "recurring": false
}

Related Endpoints

GET/api/expenses
POST/api/expenses
PUT/api/expenses/:id
DELETE/api/expenses/:id
POST/api/expenses/:id/approve
POST/api/expenses/:id/reject

Evictions

Track eviction proceedings from notice through resolution with full document and timeline management. 10-step status workflow with automatic tenant freeze on completion.

Key Fields

FieldTypeDescription
idStringUnique identifier
tenantIdStringTenant being evicted
unitIdStringUnit being vacated
statusString10-step workflow (NOTICE_PENDING through COMPLETED)
reasonStringNON_PAYMENT, LEASE_VIOLATION, PROPERTY_DAMAGE, etc.
noticeTypeString?PAY_OR_QUIT, CURE_OR_QUIT, UNCONDITIONAL_QUIT
noticeDaysInt?Notice period in days
caseNumberString?Court case number
hearingDateDateTime?Scheduled court hearing
judgmentResultString?FOR_LANDLORD, FOR_TENANT, DISMISSED
outstandingBalanceDecimal?Amount owed
resolutionTypeString?EVICTED, CURED, SETTLED, DISMISSED

Example

json
{
  "id": "evi_abc123",
  "tenantId": "tnt_012",
  "status": "CURE_PERIOD",
  "reason": "NON_PAYMENT",
  "noticeType": "PAY_OR_QUIT",
  "noticeDays": 3,
  "outstandingBalance": 3800.00
}

Related Endpoints

GET/api/evictions
POST/api/evictions
GET/api/evictions/:id
PUT/api/evictions/:id
POST/api/evictions/:id/documents
POST/api/evictions/:id/notes

Fee Schedules

Configurable fee structures that cascade from property to owner level. Controls ACH fees, management percentages, and payout calculations.

Key Fields

FieldTypeDescription
idStringUnique identifier
nameStringSchedule name (e.g., 'Premium')
achRateDecimalACH transaction fee
achFeeResponsibilityStringOWNER, TENANT, or PM
managementFeePercentDecimalManagement fee percentage
payoutFeeRateDecimalPayout processing rate
unitFeeRateDecimalPer-unit monthly fee

Example

json
{
  "id": "fsc_abc123",
  "name": "Premium",
  "achRate": 5.00,
  "achFeeResponsibility": "OWNER",
  "managementFeePercent": 8.00
}

Related Endpoints

GET/api/fee-schedules
POST/api/fee-schedules
PUT/api/fee-schedules/:id

Recurring Billing

Automatic rent payment configuration for tenants. Handles enrollment, pre-charge notifications, failure tracking, and automatic pause after max retries.

Key Fields

FieldTypeDescription
idStringUnique identifier
tenantIdStringTenant (one per tenant)
amountDecimalPayment amount
dayOfMonthIntDay rent is charged
statusStringACTIVE, PAUSED, CANCELLED
paymentMethodStringCARD or ACH
failedAttemptsIntConsecutive failures
maxRetriesIntMax retries before pause (default 3)

Example

json
{
  "id": "rec_abc123",
  "tenantId": "tnt_012",
  "amount": 1900.00,
  "dayOfMonth": 1,
  "status": "ACTIVE",
  "paymentMethod": "CARD",
  "failedAttempts": 0
}

Related Endpoints

POST/api/payments/autopay
DELETE/api/payments/autopay