Rental Flow API Reference Guide
This document provides a comprehensive guide for integrating with the Monument rental flow API. The API allows third-party companies to build custom rental experiences for their customers.Base URL
All endpoints are prefixed with::portfolio is the defined database prefix.
Authentication
All requests require an API key in the header:Table of Contents
- Get Facilities
- Get Unit Groups
- Create a Lead
- Check if Tenant Exists
- Validate Pre-existing Tenant Code
- Validate Lead Verification Token
- Fill in Lead Information
- Change Facility or Unit Group
- Retrieve Shopping Cart
- Request Coverage List for Facility
- Assign Coverage or Mark Private Insurance
- Assign Additional Services to Lead
- View Available Access Plans
- Assign Access Plans to Lead
- Get Payrix Public Keys
- Create Payment Profile
- Get PandaDoc Iframe Link
- Generate Lease
- Sign Lease Redirect
- Check if Lead Converted to Tenant
- Minimum Requirements for Lead Conversion
- Exit Shopping Experience
- Get Unit Details
- Get Gate Access Code
- Get Facility Policies
- Find Eligible Auto-Applied Promotions
- Get Portfolio Organization
1. Get Facilities
Retrieves a list of all available facilities in the portfolio.Endpoint
Request Headers
Response
2. Get Unit Groups
Understanding Unit Groups
Unit Groups are collections of similar storage units that share the same characteristics (size, features, pricing). When a customer selects a unit group, they are not selecting a specific physical unit - instead, they are reserving a unit from that group. The actual unit assignment happens later in the process.Get Unit Groups for a Facility
Retrieves all unit groups available at a specific facility.Endpoint
Request Headers
Path Parameters
facilityUuid(string, required): UUID of the facility
Response
Get Unit Group Details
Retrieves detailed information about a specific unit group, including available additional services.Endpoint
Request Headers
Path Parameters
unitGroupUuid(string, required): UUID of the unit group
Query Parameters
isForBusiness(boolean, optional): Whether this is for a business rental
Response
3. Create a Lead
Creates a new lead associated with a facility and unit group. Returns a verification token that must be used for all subsequent requests for this lead.Endpoint
Request Headers
Request Body
facilityUuid(string, required): UUID of the facilityunitGroupUuid(string, required): UUID of the unit groupperson(object, required): Person informationfirstName(string, required): First namelastName(string, required): Last nameemail(string, required): Email addressphone(string, optional): Phone numberphoneType(string, optional): Phone type (e.g., “MOBILE”, “HOME”, “WORK”)addressLine1(string, optional): Street address line 1addressLine2(string, optional): Street address line 2city(string, optional): Citystate(string, optional): State codecountry(string, optional): Country codezip(string, optional): ZIP/postal codeisSmsEnrolled(boolean, optional): Whether SMS enrollment is enabledhaveMilitary(boolean, optional): Whether person has military recordmilitary(object, optional): Military information (required ifhaveMilitaryis true)branch(string, optional): Military branchcommandingOfficer(string, required): Commanding officer namecommandingOfficerEmail(string, required, nullable): Commanding officer emailstartDateOfService(date, required): Start date of military servicedateOfBirth(date, required): Date of birth
identification(object, optional): Identification informationidentificationType(string, required): Identification type (e.g., “DRIVERS_LICENSE”, “PASSPORT”)identificationString(string, required, nullable): Identification numberissueDate(date, optional): Issue dateexpirationDate(string, optional): Expiration datecountry(string, required): Country where ID was issuedstate(string, required): State where ID was issued
dateDesiredMoveIn(date, optional, nullable): Desired move-in dateleadType(string, optional): Lead type (e.g., “PERSONAL”, “BUSINESS”)leadStatus(string, optional): Lead status (e.g., “OPEN”, “RESERVED”)businessName(string, optional, nullable): Business name (for business accounts)taxId(string, optional, nullable): Tax ID (for business accounts)haveVehicle(boolean, optional): Whether lead has a vehiclevehicle(object, optional): Vehicle information (see section 7 for full structure)
haveAlternateContact(boolean, optional): Whether lead has an alternate contactalternateContact(object, optional): Alternate contact information (see section 7 for full structure)hasBeneficiary(boolean, optional): Whether lead has a beneficiarybeneficiary(object, optional): Beneficiary information (see section 7 for full structure)
Response
leadUuid(string, required): UUID of the created leadverifyToken(string, required, nullable): Verification token for authenticating future requests. May benullin some cases. This
leadUuid and verifyToken - you’ll need them for all subsequent API calls for this lead. The verifyToken is used to authenticate requests when updating lead information (see section 7).
4. Check if Tenant Exists
Checks if a tenant with the provided email already exists in the system. If they do, a verification code will be sent to their email.Endpoint
Request Headers
Request Body
Response
exists is true, proceed to section 5 to validate the verification code.
5. Validate Pre-existing Tenant Code
After checking if a tenant exists (section 4) and receiving the verification code sent to their email, validate the code to create a lead associated with their existing account.Endpoint
Request Headers
Request Body
Required Fields:email(string, required): Email address of the pre-existing tenantvalidationCode(string, required): Verification code sent to the tenant’s emailunitGroupUuid(string, required): UUID of the unit groupfacilityUuid(string, required): UUID of the facility
leadUuid(string, optional): UUID of an existing lead (if updating an existing lead)
Response
createdLead information to continue with the rental flow.
Important: If validation fails (e.g., valid is false or the code is expired), you cannot create a lead with the same email address from an existing tenant unless you successfully validate the code. This validation is required to connect the new lead to the existing tenant account. If validation fails, you must either retry with the correct verification code or use a different email address.
6. Validate Lead Verification Token
Validates a lead verification token and returns the lead’s personal information. Useful for resuming a shopping session or verifying lead identity.Endpoint
Request Headers
Path Parameters
leadUuid(string, required): UUID of the lead
Query Parameters
verifyToken(string, required): The verification token returned when the lead was created
Response
personUuid(string, required): UUID of the personfirstName(string, required): First namelastName(string, required): Last nameemail(string, required, nullable): Email addressphone(string, required, nullable): Phone numberphoneType(string, required): Phone type (e.g., “MOBILE”, “HOME”, “WORK”)addressLine1(string, required, nullable): Street address line 1addressLine2(string, required, nullable): Street address line 2city(string, required, nullable): Citystate(string, required): State codecountry(string, required): Country codezip(string, required, nullable): ZIP/postal codebusinessName(string, required, nullable): Business name (for business accounts)taxId(string, required, nullable): Tax ID (for business accounts)isSmsEnrolled(boolean, optional): Whether SMS enrollment is enabledidType(string, required): Identification type (e.g., “DRIVERS_LICENSE”, “PASSPORT”)idCode(string, required): Identification numberidState(string, optional, nullable): State where ID was issuedidCountry(string, optional, nullable): Country where ID was issuedaccountType(string, required): Account type (e.g., “PERSONAL”, “BUSINESS”)haveAlternateContact(boolean, optional, nullable): Whether alternate contact existsalternateContactFirstName(string, optional, nullable): Alternate contact first namealternateContactLastName(string, optional, nullable): Alternate contact last namealternateContactPhone(string, optional, nullable): Alternate contact phonealternateContactRelationship(string, optional, nullable): Relationship to alternate contacthaveMilitary(boolean, optional): Whether person has military recordmilitaryBranch(string, optional, nullable): Military branchdateOfBirth(date, optional, nullable): Date of birthstartDateOfService(date, optional, nullable): Start date of military servicecommanderOfficer(string, optional, nullable): Commanding officer nameofficerEmail(string, optional, nullable): Commanding officer emaildateDesiredMoveIn(date, optional, nullable): Desired move-in datehaveVehicle(boolean, optional): Whether lead has a vehiclehaveLienHolder(boolean, optional): Whether vehicle has a lien holderisPreviousTenant(boolean, optional): Whether person is a previous tenantvehicleType(string, optional, nullable): Vehicle typevehicleMake(string, optional, nullable): Vehicle makevehicleModel(string, optional, nullable): Vehicle modelvinNumber(string, optional, nullable): Vehicle VIN numberlicensePlate(string, optional, nullable): License plate numberlienHolderName(string, optional, nullable): Lien holder namelienHolderAddress(string, optional, nullable): Lien holder addressfacilityUuid(string, optional): UUID of the facility associated with the leadunitGroupUuid(string, optional): UUID of the unit group associated with the leadleadUuid(string, optional): UUID of the leadbeneficiary(object, optional, nullable): Beneficiary informationfirstName(string, optional): Beneficiary first namelastName(string, optional): Beneficiary last nameemail(string, optional): Beneficiary emailphone(string, optional): Beneficiary phonerelationship(string, optional): Relationship to beneficiary
verifyToken securely and use it to validate and retrieve lead information. The response includes all personal information associated with the lead, including optional fields that may be null if not provided.
7. Fill in Lead Information
Updates a lead with personal information, unit details, and other required fields. Requires the verification token from lead creation.Endpoint
Request Headers
Path Parameters
leadUuid(string, required): UUID of the lead
Request Body
Required Fields:verifyToken(string, required): Verification token from lead creation
lead(object, optional): Lead information objectperson(object, required ifleadis provided): Person informationfirstName(string, required): First namelastName(string, required): Last nameemail(string, required): Email addressphone(string, optional): Phone numberphoneType(string, optional): Phone type (e.g., “MOBILE”, “HOME”, “WORK”)addressLine1(string, optional): Street address line 1addressLine2(string, optional): Street address line 2city(string, optional): Citystate(string, optional): State codecountry(string, optional): Country codezip(string, optional): ZIP codeisSmsEnrolled(boolean, optional): Whether SMS enrollment is enabledidentification(object, optional): Identification informationidType(string, optional): Type of ID (e.g., “DRIVERS_LICENSE”)idCode(string, optional): ID numberidState(string, optional): State where ID was issuedidCountry(string, optional): Country where ID was issued
military(object, optional): Military informationmilitaryBranch(string, optional): Branch of militarystartDateOfService(date, optional): Start date of servicecommanderOfficer(string, optional): Commander/officer nameofficerEmail(string, optional): Officer email
haveMilitary(boolean, optional): Whether person has military affiliation
leadType(string, optional): Type of lead (“PERSONAL” or “BUSINESS”)leadStatus(string, optional): Status of the leadbusinessName(string, optional): Business name (required if leadType is “BUSINESS”)taxId(string, optional): Tax ID numberdateDesiredMoveIn(date, optional): Desired move-in datehasBeneficiary(boolean, optional): Whether lead has a beneficiarybeneficiary(object, optional): Beneficiary informationfirstName(string, optional): Beneficiary first namelastName(string, optional): Beneficiary last nameemail(string, optional): Beneficiary emailphone(string, optional): Beneficiary phonerelationship(string, optional): Relationship to lead
haveAlternateContact(boolean, optional): Whether lead has alternate contactalternateContact(object, optional): Alternate contact informationfirstName(string, optional): Alternate contact first namelastName(string, optional): Alternate contact last namephone(string, optional): Alternate contact phonerelationship(string, optional): Relationship to lead
haveVehicle(boolean, optional): Whether lead has a vehiclevehicle(object, optional): Vehicle informationtype(string, required if vehicle provided): Vehicle typemake(string, required if vehicle provided): Vehicle makemodel(string, required if vehicle provided): Vehicle modelvinNumber(string, required if vehicle provided): VIN numberlicensePlateNumber(string, optional): License plate numberhaveVehicleLien(boolean, required if vehicle provided): Whether vehicle has a lienvehicleLien(object, optional): Lien holder informationname(string, optional): Lien holder nameaddress(string, optional): Lien holder address
facilityUuid(string, optional): UUID of the facilityunitGroupUuid(string, optional): UUID of the unit groupcoverageUuid(string, optional, nullable): UUID of the coverage option, or null for no coverageaccessPlanUuid(string, optional, nullable): UUID of the access plan, or null for no access planadditionalServices(array of strings, optional): Array of additional service UUIDsisAutopayEnabled(boolean, optional): Whether autopay is enabled
Response
verifyToken must match the token returned when the lead was created, or the request will fail with a 403 Forbidden error.
8. Change Facility or Unit Group
Updates a lead’s facility or unit group selection. This can be done by including the newfacilityUuid or unitGroupUuid in the update lead request.
Endpoint
Request Headers
Request Body
Required Fields:verifyToken(string, required): Verification token from lead creation
facilityUuid(string, optional): New facility UUIDunitGroupUuid(string, optional): New unit group UUIDlead(object, optional): Lead information (see section 7 for full structure)coverageUuid(string, optional, nullable): Coverage UUID or nullaccessPlanUuid(string, optional, nullable): Access plan UUID or nulladditionalServices(array of strings, optional): Additional service UUIDsisAutopayEnabled(boolean, optional): Whether autopay is enabled
Response
9. Retrieve Shopping Cart
Retrieves the current shopping cart for a lead, including all items, fees, taxes, and totals.Endpoint
Request Headers
Path Parameters
unitGroupUuid(string, required): UUID of the unit groupleadUuid(string, required): UUID of the lead
Query Parameters
verifyToken(string, required): Verification token for the lead
Response
When to Refresh Shopping Cart Data
You should refresh the shopping cart data after:- Changing the facility or unit group (section 8)
- Changing coverage selection (section 11)
- Adding or removing additional services (section 12)
- Changing access plans (section 14)
- Updating the move-in date
- Any other change that might affect pricing
10. Request Coverage List for Facility
Retrieves all available coverage options (insurance) for a specific facility.Endpoint
Request Headers
Path Parameters
facilityUuid(string, required): UUID of the facility
Response
Get Private Coverage Information
If the lead wants to use their own insurance (private coverage):Endpoint
Response
11. Assign Coverage or Mark Private Insurance
Assigns a coverage option to a lead or marks them as using private insurance. To mark as private insurance, use the private coverage UUID (11111111-1111-1111-1111-111111111111), to set coverage none use coverageUuid as null.
Endpoint
Request Headers
Request Body
Required Fields:verifyToken(string, required): Verification token from lead creation
coverageUuid(string, optional, nullable): UUID of the coverage option. Use"11111111-1111-1111-1111-111111111111"for private insurance,nullfor no coverage, or a coverage UUID from section 10.facilityUuid(string, optional): Facility UUIDunitGroupUuid(string, optional): Unit group UUIDlead(object, optional): Lead information (see section 7 for full structure)accessPlanUuid(string, optional, nullable): Access plan UUID or nulladditionalServices(array of strings, optional): Additional service UUIDsisAutopayEnabled(boolean, optional): Whether autopay is enabled
Response
13. Assign Additional Services to Lead
Assigns additional services to a lead by including the service UUIDs in theadditionalServices array when updating the lead.
Important: Monument automatically calculates taxes for all amount values in the rental flow. You do not need to calculate or include tax amounts when assigning services - Monument handles all tax calculations based on facility location, service type, and applicable tax rules.
Endpoint
Request Headers
Request Body
Required Fields:verifyToken(string, required): Verification token from lead creation
additionalServices(array of strings, optional): Array of additional service UUIDs. To remove services, send an empty array[]or omit the field.facilityUuid(string, optional): Facility UUIDunitGroupUuid(string, optional): Unit group UUIDlead(object, optional): Lead information (see section 7 for full structure)coverageUuid(string, optional, nullable): Coverage UUID or nullaccessPlanUuid(string, optional, nullable): Access plan UUID or nullisAutopayEnabled(boolean, optional): Whether autopay is enabled
additionalServices array in the unit group response contains all available services for that unit group.
Response
additionalServices array or send an empty array [].
14. View Available Access Plans
Retrieves all available access plans for a facility. Access plans define when and how tenants can access the facility.Endpoint
Request Headers
Path Parameters
facilityUuid(string, required): UUID of the facility
Response
14. Assign Access Plans to Lead
Assigns an access plan to a lead by including theaccessPlanUuid when updating the lead.
Endpoint
Request Headers
Request Body
Required Fields:verifyToken(string, required): Verification token from lead creation
accessPlanUuid(string, optional, nullable): UUID of the access plan, or null to remove access planfacilityUuid(string, optional): Facility UUIDunitGroupUuid(string, optional): Unit group UUIDlead(object, optional): Lead information (see section 7 for full structure)coverageUuid(string, optional, nullable): Coverage UUID or nulladditionalServices(array of strings, optional): Additional service UUIDsisAutopayEnabled(boolean, optional): Whether autopay is enabled
Response
accessPlanUuid to null.
16. Get Payrix Public Keys
What is Payrix?
Payrix is a payment processing platform that Monument uses to securely handle credit card and ACH payments. Payrix provides PayFields, which are PCI-compliant payment form fields that can be embedded directly into your application. This allows you to collect payment information without handling sensitive card data yourself, as all payment data is tokenized by Payrix.What are these keys for?
The public keys returned by this endpoint are used to:- Initialize PayFields in your frontend application
- Securely tokenize payment information (credit cards or bank accounts)
- Create payment profiles that can be used for future transactions
Endpoint
Request Headers
Response
apiKey(string, required): Payrix public API key used to initialize PayFieldspayfieldsUrl(string, required): URL for loading PayFields JavaScript library
Integration Steps
- Fetch the public key: Call this endpoint to get the
apiKeyandpayfieldsUrl - Load PayFields library: Include the PayFields script in your HTML using the
payfieldsUrl - Initialize PayFields: Use the
apiKeyto configure PayFields in your payment form - Collect payment information: Users enter their payment details in the PayFields form
- Tokenize payment: PayFields handles tokenization and returns a secure token
- Create payment profile: Use the token to create a payment profile via section 17
Resources
- Payrix Documentation: Integrated Payment Pages - Complete guide on how to embed PayFields in your application
- Payrix Status Page: Worldpay for Platforms Status - Check Payrix service status and uptime
payfieldsUrl provided in the response. The apiKey is used to configure PayFields and must be refreshed every hour.
16. Create Payment Profile
What is a Payment Profile?
A payment profile is a secure, tokenized representation of a customer’s payment method (credit card or bank account) that is stored in Monument’s system. Payment profiles allow you to:- Store payment information securely without handling sensitive card data
- Enable automatic recurring payments (autopay)
- Process future transactions without requiring the customer to re-enter payment details
- Meet PCI compliance requirements
Step-by-Step Integration Guide
Step 1: Get Payrix Public Keys
First, retrieve the Payrix public keys using section 16. You’ll need:apiKey: Used to configure PayFieldspayfieldsUrl: URL to load the PayFields JavaScript library
Step 2: Load PayFields Library
Include the PayFields script in your HTML:payfieldsUrl from step 1 to ensure you’re loading from the correct endpoint.
Step 3: Initialize PayFields
Configure PayFields with theapiKey and merchant ID. The merchant ID should be provided by Monument support or may be available through your integration setup.
Step 4: Render Payment Form
Add PayFields form elements to your HTML:Step 5: Handle PayFields Success Callback
When the user submits the form, PayFields will tokenize the payment information and call your success callback:Step 6: Create Payment Profile via Monument API
Call this endpoint with the tokenized payment information:Endpoint
Request Headers
Request Body
Required Fields:facilityUuid(string, required): UUID of the facilitybillingFirstName(string, required): Billing first namebillingLastName(string, required): Billing last nameleadUuid(string, required): UUID of the leadprocessorToken(string, required): Payment processor token from Payrix (obtained in Step 5)processorTokenId(string, required): Payment processor token ID (obtained in Step 5)processorAuthTransactionId(string, required): Payment processor authorization transaction ID (obtained in Step 5)paymentType(string, required): Payment type (e.g., “CREDIT/DEBIT”, “ACH”)lastFour(string, required): Last four digits of payment methodbillingAddressLine1(string, required): Billing address line 1billingCity(string, required): Billing citybillingState(string, required): Billing statebillingZip(string, required): Billing ZIP codeautopayEnabled(boolean, required): Whether autopay is enabled
billingAddressLine2(string, optional): Billing address line 2
Response
leadUuid(string, required): UUID of the leadleaseSessionUrl(string, required): Lease session URL (typically empty for payment profile creation)
Error Handling
If PayFields validation fails, handle the error callback:Next Steps
After successfully creating a payment profile:- The lead now has a stored payment method
- You can proceed to generate a lease (section 19)
- If
autopayEnabledistrue, future payments will be processed automatically
processorToken, processorTokenId, and processorAuthTransactionId are all obtained from PayFields in Step 5. Never store or log these tokens - they should only be passed directly to this API endpoint.
18. Get PandaDoc Iframe Link
The lease session URL returned from the generate lease endpoint (section 19) is the PandaDoc iframe link. This URL can be embedded in an iframe to display the lease document for signing.Usage
TheleaseSessionUrl from the generate lease response is the PandaDoc iframe link:
PandaDoc Events
You can listen for PandaDoc events to track the signing process:19. Generate Lease
Generates a lease document for a lead. This endpoint will:- Verify that a payment profile exists
- Find an available unit in the selected unit group
- Reserve that unit for the lead
- Create a signable lease document
- Return a lease session URL for signing
Endpoint
Request Headers
Request Body
Response
- A payment profile must exist before generating a lease (see section 17)
- This endpoint reserves a unit, so only call it when the lead is ready to sign
- If lease generation fails, the unit reservation will be automatically cancelled
20. Sign Lease Redirect
Redirects users to the signable lease document. This is a redirect endpoint that sends users directly to PandaDoc for signing.Endpoint
Request Headers
Path Parameters
leaseUuid(string, required): UUID of the lease document
Response
This endpoint performs an HTTP redirect (302) to the PandaDoc signing session URL. The response body may contain error messages if the lease is not available:- If the lease is not found: “This lease is no longer available. Please check your email for a new link”
- If the lease link is disabled: “Your lease is not ready to be signed. please check again soon.”
leaseSessionUrl from the generate lease endpoint (section 19) instead. This endpoint is not commonly used by API clients building custom rental flows, as you would typically use the iframe approach.
Error Handling
Common HTTP Status Codes
200 OK: Request successful201 Created: Resource created successfully400 Bad Request: Invalid request data403 Forbidden: Invalid verification token or unauthorized404 Not Found: Resource not found500 Internal Server Error: Server error
Error Response Format
Verification Token Errors
If you receive a 403 Forbidden error when updating a lead, verify:- The
verifyTokenmatches the one returned when the lead was created - The token hasn’t expired (tokens don’t expire, but ensure you’re using the correct one)
- The
leadUuidis correct
Best Practices
- Always store the verification token: Save both
leadUuidandverifyTokenimmediately after lead creation - Refresh shopping cart after changes: Always refresh the shopping cart after any change that might affect pricing
- Handle pre-existing tenants: Always check if a tenant exists before creating a new lead
- Poll for conversion: After lease signing, poll the check-lead-status endpoint to detect conversion
- Refresh Payrix keys: Payrix public keys expire after 1 hour - refresh them before expiration
- Validate before generating lease: Ensure all required information is filled before generating a lease
- Handle errors gracefully: Implement proper error handling for all API calls
Questions?
If you have questions about any endpoint or need clarification on the API behavior, please contact the Monument Integrations Support Team. Email: [email protected]21. Minimum Requirements for Lead Conversion
Before a lead can be successfully converted to a tenant (see section 18 and section 20), certain minimum information must be provided. Without these required fields, the conversion will fail with validation errors. Important: This section describes the minimum requirements for lead conversion. These requirements are enforced by the validation system and conversion will fail if any required field is missing or invalid.Overview
The lead conversion process validates multiple entities to ensure all required information is present. This section outlines the minimum requirements based on the validation flow that occurs during conversion. The conversion process is triggered by a webhook managed by Pandadoc once the generate lease is signed by the tenant and processed by Pandadoc.Required Lead Information
The following fields must be present on the lead:primaryPerson(object, required): Primary person information (see Primary Person requirements below)primaryPersonUuid(string, required): UUID of the primary personleadType(string, required): Lead type (“PERSONAL” or “BUSINESS”)facility(object, required): Facility objectfacilityUuid(string, required): UUID of the facilityunitGroup(object, required): Unit group objectunitGroupUuid(string, required): UUID of the unit groupunitUuid(string, required): UUID of the assigned unitunit(object, required): Unit objectsignableLease(object, required): Signable lease object (see Signable Lease requirements below)leadStatus(string, required): Must be “PENDING” for conversion to succeed
- If
leadData.autoPayEnabledistrue, thenleadData.paymentTypemust also be defined
Required Primary Person Information
The primary person must have the following fields:firstName(string, required): First namelastName(string, required): Last nameemail(string, required): Email addressphone(string, required): Phone numberpersonType(string, required): Person typeaddressLine1(string, required): Street address line 1country(string, required): Country codecity(string, required): Citystate(string, required): State codezip(string, required): ZIP/postal code
Required Identification Information
The primary person must have a valid identification document. One of the following is required:Option 1: Driver’s License
primaryPersonIdentification(object, required): Identification objectidentificationType(string, required): Must be “Driver’s License”identificationString(string, optional): Identification numberidState(string, optional): State where ID was issuedidCountry(string, optional): Country where ID was issued
Option 2: Passport
primaryPersonIdentification(object, required): Identification objectidentificationType(string, required): Must be “PASSPORT”identificationString(string, required): Passport numbercountry(string, required): Country where passport was issued
Required Signable Lease Information
The signable lease must have:startDate(date, required): Lease start date
Validation Failure
If any of the above required fields are missing or invalid, the conversion will fail with validation errors. The error response will indicate which fields are missing or invalid. Important Notes:- Lead Status: The lead status must be “PENDING” before conversion. If the lead status is not “PENDING”, conversion will fail.
-
Unit Assignment: A unit must be assigned to the lead (
unitUuidandunitmust be present). Units are typically assigned when a lease is generated (see section 18). - Signable Lease: A signable lease must exist for the lead. This is typically created when generating a lease (see section 18).
- Payment Profile: While not explicitly validated in the conversion flow, a payment profile is typically required before generating a lease (see section 16).
-
Business Accounts: If
leadTypeis “BUSINESS”, additional fields may be required:businessName(string, required for business accounts)taxId(string, optional for business accounts)
Best Practices
- Ensure all required fields are collected before attempting to generate a lease
- Validate required fields in your frontend before calling the generate lease endpoint
- Handle validation errors gracefully and provide clear feedback to users about missing required information
- Use the Fill in Lead Information endpoint to update lead information before conversion
22. Check if Lead Converted to Tenant
Checks whether a lead that has signed their lease has been converted to a tenant.Endpoint
Request Headers
Path Parameters
leadUuid(string, required): UUID of the lead
Response
Get Converted Lead Details
If the lead has been converted, you can retrieve their tenant information:Endpoint
Response
- Conversion typically happens automatically after the lease is signed
- You may need to poll this endpoint periodically after the lease is signed
- Once converted, the lead status changes to
CONVERTEDand they become a tenant
23. Exit Shopping Experience
Marks a lead as no longer hidden in the Facility Management System (FMS). Call this endpoint when a lead exits the shopping experience, making them immediately visible to facility managers.Endpoint
Request Headers
Path Parameters
leadUuid(string, required): UUID of the lead
Response
24. Get Unit Details
Retrieves detailed information about a unit for a lead that has been converted to a tenant. Requires verification code for authentication.Endpoint
Request Headers
Path Parameters
leadUuid(string, required): UUID of the lead (now tenant)verifyCode(string, required): The verification token returned when the lead was created
Response
Returns aGetUnitDetailDto object with comprehensive unit information including:
25. Get Gate Access Code
Retrieves the gate access code for a lead that has been converted to a tenant. The gate access code may be pending generation or not configured for the facility.Endpoint
Request Headers
Path Parameters
leadUuid(string, required): UUID of the lead (now tenant)verifyCode(string, required): The verification token returned when the lead was created
Request Body
unitUuid(string, required): UUID of the unitfacilityUuid(string, required): UUID of the facility
Response
The response includes a status indicating whether the gate access code is available: Status: GENERATEDGENERATED: Gate access code is available and returned ingateAccessCodePENDING: Gate access code is being generated, check again laterNOT_CONFIGURED: Facility is not configured to generate gate access codes
PENDING, you may need to poll this endpoint periodically until the code is generated. If the status is NOT_CONFIGURED, the facility does not use gate access codes.
26. Get Facility Policies
Retrieves facility-specific policies that affect the rental flow behavior.Endpoint
Request Headers
Path Parameters
facilityUuid(string, required): UUID of the facility
Response
moveOutPhotoRequired(boolean, required): Whether move-out photos are requiredmanualAccessApproval(boolean, required): Whether manual access approval is requiredallowReservations(boolean, required): Whether reservations are allowednoPrivateCoverageInRentalFlow(boolean, required): Whether private coverage is disabled in the rental flowallowWaitlist(boolean, required): Whether waitlist functionality is enabledmessagingTimeRange(object, optional, nullable): Time range for messaging (if configured)startTime(string): Start time in HH:mm:ss formatendTime(string): End time in HH:mm:ss format
false and messagingTimeRange will be null. Use these policies to configure your rental flow UI and behavior.
27. Find Eligible Auto-Applied Promotions
Finds eligible automatically applied promotions with the highest discount for each unit group. Useful for displaying promotional pricing to users. Important: In the rental flow API, promotions are only auto-applied - you cannot manually assign or select promotions. Promotions are automatically applied when a lead is created or updated based on eligibility criteria (facility, unit group, business status, autopay status, etc.). This endpoint allows you to preview which promotions would be auto-applied, but you do not need to explicitly assign them.Endpoint
Request Headers
Request Body
facilityUuids(array of strings, required): Array of facility UUIDs to check promotions forunitGroupUuids(array of strings, optional): Optional array of unit group UUIDs to filter byisForBusiness(boolean, optional): Whether the lead is a business accountisAutopayEnabled(boolean, optional): Whether autopay is enabled (affects promotion eligibility)
Response
facilityUuid(string, required): UUID of the facilityunitGroupUuid(string, required): UUID of the unit grouppromotionUuid(string, required): UUID of the promotionpromotionName(string, required): Name of the promotionhighestDiscountAmount(number, required): Discount amount in pennies
28. Get Portfolio Organization
Retrieves the portfolio organization communications name. Useful for branding and displaying the organization name in your custom rental flow.Endpoint
Request Headers
Response
portfolioName(string, optional, nullable): The portfolio organization communications name, ornullif not set
Error Handling
Common HTTP Status Codes
200 OK: Request successful201 Created: Resource created successfully400 Bad Request: Invalid request data403 Forbidden: Invalid verification token or unauthorized404 Not Found: Resource not found500 Internal Server Error: Server error
Error Response Format
Verification Token Errors
If you receive a 403 Forbidden error when updating a lead, verify:- The
verifyTokenmatches the one returned when the lead was created - The token hasn’t expired (tokens don’t expire, but ensure you’re using the correct one)
- The
leadUuidis correct
Best Practices
- Always store the verification token: Save both
leadUuidandverifyTokenimmediately after lead creation - Refresh shopping cart after changes: Always refresh the shopping cart after any change that might affect pricing
- Handle pre-existing tenants: Always check if a tenant exists before creating a new lead
- Poll for conversion: After lease signing, poll the check-lead-status endpoint to detect conversion
- Refresh Payrix keys: Payrix public keys expire after 1 hour - refresh them before expiration
- Validate before generating lease: Ensure all required information is filled before generating a lease
- Handle errors gracefully: Implement proper error handling for all API calls

