{"components": {"securitySchemes": {"TimeStamp": {"in": "header", "name": "X-storageapi-date", "type": "apiKey"}, "apiKey": {"in": "header", "name": "X-storageapi-key", "type": "apiKey"}, "Scopes": {"in": "header", "name": "X-nectar-scopes", "description": "Includes different permission scopes to access the API endpoints", "type": "apiKey"}}, "headers": {"origin": {"schema": {"example": "http://sandbox.hummingbird.local", "type": "string"}}}, "schemas": {"Contact": {"type": "array", "description": "Tenant details", "items": {"type": "object", "properties": {"Addresses": {"type": "array", "description": "Tenant address details", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "type": {"type": "string", "description": "Address type", "example": "home,work,primary"}}}}, "Business": {"type": "object", "description": "To be populated if tenant is renting as a business", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "name": {"type": "string"}, "phone": {"type": "string", "description": "Phone number"}, "phone_type": {"type": "string", "description": "Type of phone"}}}, "Phones": {"type": "array", "description": "Tenant phone details", "items": {"type": "object", "properties": {"phone": {"type": "string", "description": "Tenant phone number"}, "sms": {"type": "boolean", "description": "If true tenant opt for SMS"}, "type": {"type": "string", "description": "Type of phone", "example": "phone,cell,work,homefax,other"}}}}, "Relationships": {"type": "array", "description": "Alternate tenant contact details", "items": {"type": "object", "properties": {"Contact": {"type": "object", "properties": {"Addresses": {"type": "array", "description": "Alternate tenant address details", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "type": {"type": "string"}}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"phone": {"type": "string"}, "sms": {"type": "boolean"}, "type": {"type": "string"}}}}, "email": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}}}, "is_alternate": {"type": "boolean", "description": "Is this contact alternate"}, "type": {"type": "string", "description": "Relationship of contact with the tenant", "example": "alternate,mother,father,wife,friend,partner"}}}}, "dob": {"type": "string", "format": "date", "description": "Tenant date of birth"}, "driver_license": {"type": "string", "description": "Tenant driver licence number"}, "driver_license_city": {"type": "string"}, "driver_license_exp": {"type": "string", "format": "date"}, "driver_license_state": {"type": "string"}, "email": {"type": "string", "description": "Tenant email ID"}, "first": {"type": "string", "description": "Tenant first name"}, "last": {"type": "string", "description": "Tenant last name"}, "middle": {"type": "string", "description": "Tenant middle name"}}}}, "PaymentMethodCard": {"type": "object", "description": "Card payment details", "properties": {"type": {"type": "string", "description": "Payment method type", "example": "card"}, "name_on_card": {"type": "string", "description": "Name on the card"}, "card_number": {"type": "string", "description": "Card number"}, "exp_mo": {"type": "string", "description": "Card expiration month"}, "exp_yr": {"type": "string", "description": "Card expiration year"}, "cvv2": {"type": "string", "description": "Card Verification Value"}, "save_to_account": {"type": "boolean", "description": "Save card details for future refernce"}, "auto_charge": {"type": "boolean", "example": false, "description": "Auto charge"}, "address": {"type": "string", "description": "Billing address"}, "address2": {"type": "string", "description": "Billing apt,suite etc"}, "city": {"type": "string", "description": "Billing city"}, "state": {"type": "string", "description": "Billing state", "example": "LA,MA,MO"}, "zip": {"type": "string", "description": "Billing zip code"}, "country": {"type": "string", "description": "Billing country"}}, "required": ["name_on_card", "card_number", "exp_mo", "exp_yr", "address", "city", "state", "zip"]}, "ExtendedPaymentMethodCard": {"type": "object", "description": "Card payment details", "properties": {"type": {"type": "string", "description": "Payment method type", "example": "card"}, "name_on_card": {"type": "string", "description": "Name on the card"}, "card_number": {"type": "string", "description": "Card number"}, "exp_mo": {"type": "string", "description": "Card expiration month"}, "exp_yr": {"type": "string", "description": "Card expiration year"}, "cvv2": {"type": "string", "description": "Card Verification Value"}, "save_to_account": {"type": "boolean", "description": "Save card details for future refernce"}, "auto_charge": {"type": "boolean", "example": false, "description": "Auto charge"}, "address": {"type": "string", "description": "Billing address"}, "address2": {"type": "string", "description": "Billing apt,suite etc"}, "city": {"type": "string", "description": "Billing city"}, "state": {"type": "string", "description": "Billing state", "example": "LA,MA,MO"}, "zip": {"type": "string", "description": "Billing zip code"}, "country": {"type": "string", "description": "Billing country"}, "token": {"type": "string", "description": "The token representing the card in Fat Zebra systems as per hosted payment response from gateway"}, "card_type": {"type": "string", "description": "The card type of the credit card used. Possible values are VISA, MasterCard, AMEX, JCB, Diners, Discover, China UnionPay, Unknown as per hosted payment response from gateway"}}, "required": ["name_on_card", "card_number", "exp_mo", "exp_yr", "address", "city", "state", "zip"]}, "PaymentMethodDetails": {"type": "object", "description": "Card payment details", "properties": {"type": {"type": "string", "description": "Payment method type", "example": "card"}, "source": {"type": "string", "description": "Payment method type", "example": "in-store"}}, "required": ["type", "source"]}, "HostedPaymentMethodDetails": {"type": "object", "description": "Card payment details", "properties": {"type": {"type": "string", "description": "Payment method type always \"card\"", "example": "card"}, "source": {"type": "string", "description": "Payment method type always \"hosted\"", "example": "hosted"}}, "required": ["type", "source"]}, "CreateLeaseHostedPaymentMethodDetails": {"type": "object", "properties": {"type": {"type": "string", "description": "payment type always \"card\"", "example": "card"}, "source": {"type": "string", "description": "payment source always \"hosted\"", "example": "hosted"}, "amount": {"type": "integer", "format": "int32", "description": "The total amount that is about to be paid"}, "transaction_id": {"type": "string", "description": "Payment gateway transaction id"}, "status_desc": {"type": "string", "description": "Any messages relating to the transaction as per hosted payment response from gateway"}, "status": {"type": "integer", "description": "Status of the payment (1 for successful transaction and 0 for failed transaction)"}}, "required": ["type", "source", "status", "status_desc", "amount", "transaction_id"]}, "CreateLeaseHostedPaymentMethodCard": {"type": "object", "description": "Card payment details", "properties": {"address": {"type": "string", "description": "Billing address"}, "address2": {"type": "string", "description": "Billing apt,suite etc"}, "auto_charge": {"type": "boolean", "example": false, "description": "Auto charge"}, "type": {"type": "string", "description": "Payment method type always \"card\"", "example": "card"}, "name_on_card": {"type": "string", "description": "Name on the card"}, "first": {"type": "string", "description": "Tenant first name"}, "last": {"type": "string", "description": "Tenant last name"}, "card_number": {"type": "string", "description": "Masked Card number", "example": "512345XXXXXXXX2346"}, "exp_mo": {"type": "string", "description": "Card expiration month"}, "exp_yr": {"type": "string", "description": "Card expiration year"}, "cvv2": {"type": "string", "description": "Card Verification Value"}, "save_to_account": {"type": "boolean", "description": "Save card details for future refernce"}, "city": {"type": "string", "description": "Billing city"}, "state": {"type": "string", "description": "Billing state", "example": "LA,MA,MO"}, "zip": {"type": "string", "description": "Billing zip code"}, "country": {"type": "string", "description": "Billing country"}, "token": {"type": "string", "description": "The token representing the card in payment gateway systems"}, "card_type": {"type": "string", "description": "The card type of the credit card used", "example": "VISA, MasterCard, AMEX, JCB, Diners, Discover, China UnionPay, Unknown."}}, "required": ["name_on_card", "card_number", "exp_mo", "exp_yr", "address", "city", "state", "zip", "token", "card_type"]}, "HostedPaymentMethodCard": {"type": "object", "description": "Card payment details", "properties": {"type": {"type": "string", "description": "Payment method type", "example": "card"}, "name_on_card": {"type": "string", "description": "Name on the card"}, "card_number": {"type": "string", "description": "Masked Card number", "example": "512345XXXXXXXX2346"}, "exp_mo": {"type": "string", "description": "Card expiration month"}, "exp_yr": {"type": "string", "description": "Card expiration year"}, "cvv2": {"type": "string", "description": "Card Verification Value"}, "save_to_account": {"type": "boolean", "description": "Save card details for future reference always \"true\"", "example": true}, "zip": {"type": "string", "description": "Billing zip code"}, "token": {"type": "string", "description": "The token representing the card in payment gateway systems", "example": "ufkdhfkldhflihei9380uhfuwyekcksndc"}, "card_type": {"type": "string", "description": "The card type of the credit/debit card used", "example": "VISA, MasterCard, AMEX, JCB, Diners, Discover, China UnionPay, Unknown."}}, "required": ["name_on_card", "card_number", "exp_mo", "exp_yr", "zip", "token"]}, "PropertyUnits": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"units": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "category_id": {"type": "string"}, "space_mix_id": {"type": "string", "description": "Should be space mix id/space group id."}, "address_id": {"type": "string"}, "template_id": {"type": "string"}, "unit_group_id": {"type": "string"}, "product_id": {"type": "string"}, "number": {"type": "string"}, "floor": {"type": "string"}, "type": {"type": "string"}, "description": {"type": "string"}, "price": {"type": "number", "description": "Sell price"}, "default_price": {"type": "number"}, "featured": {"type": "number"}, "available_date": {"type": "string"}, "state": {"type": "string", "description": "Current state of unit"}, "next_lease_start": {"type": "string"}, "length": {"type": "string"}, "width": {"type": "string"}, "height": {"type": "string"}, "x": {"type": "number"}, "y": {"type": "number"}, "rotate": {"type": "number"}, "left": {"type": "number"}, "top": {"type": "number"}, "Lease": {"type": "object", "properties": {"id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "rent": {"type": "number"}, "rent_paid_through": {"type": "string"}, "status": {"type": "number"}, "last_rent_raise": {"type": "string"}, "last_rent_raise_amount": {"type": "string"}, "future_rent_raise": {"type": "string"}, "future_rent_raise_amount": {"type": "string"}, "is_transferred": {"type": "number"}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "sort": {"type": "string"}, "type": {"type": "string"}, "created_at": {"type": "string"}, "Contact": {"type": "object", "properties": {"salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "suffix": {"type": "string"}, "email": {"type": "string"}, "company": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "string"}}}}}}}}}}}, "Reservation": {"type": "object", "properties": {"id": {"type": "string"}}}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number"}, "lng": {"type": "number"}, "formatted_address": {"type": "string"}, "district": {"type": "string"}, "region": {"type": "string"}}}, "category": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "price": {"type": "number"}, "unit_type": {"type": "string"}}}, "Amenities": {"type": "object", "properties": {"Access": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "value": {"type": "string"}, "category_type": {"type": "string"}, "category_name": {"type": "string"}}}}}}}}}}}, "message": {"type": "string"}}}, "ConciseCompanyLeases": {"allOf": [{"$ref": "#/components/schemas/ConciseCompanyMoveOutLeases"}, {"type": "object", "properties": {"data": {"type": "object", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"is_transferred": {"type": "integer", "format": "int32", "enum": [0, 1], "description": "1 when this lease was created by a space transfer, otherwise 0"}, "transferred_from": {"type": "string", "nullable": true, "description": "Identifier of the space the lease was transferred from, null when the lease was not created by a transfer"}, "future_rent_raise": {"type": "string", "format": "nullable", "description": "Future rent raise date"}, "future_rent_raise_amount": {"type": "string", "format": "nullable", "description": "Future rent raise amount"}}}}}}}}]}, "ConcisePropertyUnits": {"type": "object", "description": "Response when concise is set true in query param", "properties": {"status": {"type": "integer", "format": "int32", "description": "Status code"}, "data": {"type": "object", "description": "Response data", "properties": {"units": {"type": "array", "description": "Array of spaces object with concise data", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Space ID"}, "property_id": {"type": "string", "description": "Property ID"}, "unit_group_id": {"type": "string", "description": "Space Group ID which will vary based on the given Grouping Profile. This field will be empty if grouping_profile_id is not defined in query param"}, "number": {"type": "string", "description": "Number assigned to each individual space, in order to make it identifiable from all other spaces."}, "floor": {"type": "string", "description": "Floor/Storey at which the given space is designated."}, "price": {"type": "integer", "format": "int32", "description": "Active Rent/Lease amount which the tenant must pay for a space"}, "default_price": {"type": "integer", "format": "int32", "description": "Default Rent/Lease amount set to the given space"}, "state": {"type": "string", "description": "Current status of this space. E.g., Leased, Available, Pending, etc."}, "created": {"type": "string", "format": "date", "description": "Date at which this space was created"}, "length": {"type": "string", "description": "Length of the given space"}, "width": {"type": "string", "description": "Width of the given space"}, "unit_type": {"type": "string", "description": "Space type of the given space, for example storage or parking. Use this rather than unit_type_id, which is obfuscated on output and cannot be compared."}, "category_id": {"type": "string", "description": "Category ID assigned to the space"}, "Category": {"type": "object", "nullable": true, "description": "Category assigned to the space. Null when the space has no category.", "properties": {"id": {"type": "string", "description": "Category ID"}, "name": {"type": "string", "description": "Category name"}}}, "Amenities": {"type": "object", "properties": {"category_name": {"description": "Here, the category_name is a dynamic key. It will be an amenity category name like Moving Options, Space Features, Renting and Payments, Access etc,.", "type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Amenity ID which is specific to a space."}, "name": {"type": "string", "description": "Amenity Name."}, "value": {"description": "Amenity value. Eg:- 'Split doors' is a value for the amenity door and 'Second Floor' is a value for the amenity floor.", "type": "string"}, "category_type": {"type": "string"}, "category_name": {"description": "Category of the given space. (Will be same as the parent key)", "type": "string"}}}}}}}}}, "paging": {"type": "object", "description": "Paging details", "properties": {"total": {"type": "integer", "format": "int32", "description": "Total number of records"}, "count": {"type": "integer", "format": "int32", "description": "Number records returned in the current response"}, "next": {"type": "string", "description": "Link to next page"}, "prev": {"type": "string", "description": "Link to previous page"}}}}}, "message": {"type": "string"}}}, "ConciseCompanyMoveOutLeases": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Lease ID"}, "unit_id": {"type": "string", "description": "Unit ID"}, "start_date": {"type": "string", "format": "date", "description": "Lease start date"}, "end_date": {"type": "string", "format": "nullable", "description": "Lease end date"}, "rent": {"type": "number", "description": "Rent Amount"}, "has_autopay": {"type": "number", "description": "Autopay enabled (1-enabled, 0-disabled)"}, "paid_through_date": {"type": "string", "format": "date", "description": "The date to which the payment has been made"}, "property_id": {"type": "string", "description": "Property ID"}, "last_rent_raise": {"type": "string", "format": "nullable", "description": "Previous rent raise date"}, "reservation_date": {"type": "string", "format": "date", "description": "Reservation date"}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"contact_id": {"type": "string", "description": "Contact ID"}}}}}}}, "paging": {"type": "object", "properties": {"count": {"type": "number"}, "total": {"type": "number"}, "num_pages": {"type": "number"}, "next": {"type": "string"}, "prev": {"type": "string", "format": "nullable"}}}}}, "message": {"type": "string"}}}, "CompanyLeases": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "unit_id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "notes": {"type": "string"}, "terms": {"type": "string"}, "rent": {"type": "number"}, "sb_709_max_rent": {"type": "number"}, "status": {"type": "string"}, "send_invoice": {"type": "number"}, "last_payment_date": {"type": "string", "description": "Date when the most recent payment was made for the given lease."}, "security_deposit": {"type": "number"}, "monthly": {"type": "number"}, "code": {"type": "string"}, "balance": {"type": "string", "description": "Total balance due till yesterday"}, "open_balance": {"type": "string", "description": "Total balance due till today"}, "decline_insurance": {"type": "string"}, "moved_out": {"type": "string"}, "rent_paid_through": {"type": "string"}, "lease_standing_id": {"type": "string"}, "insurance_exp_month": {"type": "number"}, "insurance_exp_year": {"type": "string"}, "move_in_rent": {"type": "number"}, "total_rent_raises": {"type": "number"}, "last_rent_raise": {"type": "string"}, "future_rent_raise": {"type": "string"}, "future_rent_raise_amount": {"type": "string"}, "Standing": {"type": "object", "properties": {"name": {"type": "string"}}}, "auction_status": {"type": "string"}, "OpenInvoices": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "number": {"type": "string"}, "date": {"type": "string"}, "due": {"type": "string"}, "discounts": {"type": "string"}, "sub_total": {"type": "number"}, "total_tax": {"type": "string"}, "total_due": {"type": "number"}, "total_payments": {"type": "string"}, "balance": {"type": "number"}, "Payments": {"type": "array", "items": {"type": "string"}}}}}, "Unit": {"type": "object", "properties": {"id": {"type": "string"}, "price": {"type": "number"}, "label": {"type": "string"}, "number": {"type": "string"}, "type": {"type": "string"}, "property_id": {"type": "string"}}}, "Metrics": {"type": "object", "properties": {"lifetime_payments": {"type": "string"}, "paid_through_date": {"type": "string"}, "prepaid_balance": {"type": "string"}, "prepaid_balance_net": {"type": "string", "description": "Real cash-backed prepaid balance on future invoices. Same as prepaid_balance but excludes non-cash credits such as Free Coverage Credits, credit-type payments, and adjustments."}, "has_autopay": {"type": "string"}}}, "is_transferred": {"type": "integer", "format": "int32", "enum": [0, 1], "description": "1 when this lease was created by a space transfer, otherwise 0"}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "sort": {"type": "number"}, "created_at": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "suffix": {"type": "string"}, "email": {"type": "string"}, "company": {"type": "string"}, "dob": {"type": "string"}, "ssn": {"type": "string"}, "gender": {"type": "string"}, "driver_license": {"type": "string"}, "source": {"type": "string"}, "status": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "primary": {"type": "number"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}}}}}}}}}, "CreatedBy": {"type": "object", "properties": {"id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "suffix": {"type": "string"}, "email": {"type": "string"}, "company": {"type": "string"}, "dob": {"type": "string"}, "ssn": {"type": "string"}, "gender": {"type": "string"}, "driver_license": {"type": "string"}, "active_military": {"type": "string"}, "military_branch": {"type": "string"}, "source": {"type": "string"}, "status": {"type": "string"}}}, "Discounts": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "promotion_id": {"type": "string"}, "coupon_id": {"type": "string"}, "start": {"type": "string"}, "end": {"type": "string"}, "lease_id": {"type": "string"}, "company_id": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "pretax": {"type": "number"}, "msg": {"type": "string"}, "Promotion": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "label": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "months": {"type": "number"}, "offset": {"type": "string"}, "sort": {"type": "number"}, "pretax": {"type": "number"}, "active": {"type": "number"}, "public": {"type": "number"}, "required_months": {"type": "number"}, "days_threshold": {"type": "string"}, "consecutive_pay": {"type": "string"}, "enable": {"type": "number"}, "active_period": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "created_by": {"type": "number"}, "created_at": {"type": "string"}, "round": {"type": "string"}}}, "round": {"type": "string"}}}}}}}, "paging": {"type": "object", "properties": {"count": {"type": "number"}, "total": {"type": "number"}, "num_pages": {"type": "number"}, "next": {"type": "string"}, "prev": {"type": "string"}}}}}, "message": {"type": "string"}}}, "CompanyLeads": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"leads": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "property_id": {"type": "string"}, "category_id": {"type": "string"}, "unit_id": {"type": "string"}, "note": {"type": "string"}, "content": {"type": "string"}, "extras": {"type": "string"}, "created": {"type": "string"}, "status": {"type": "string"}, "source": {"type": "string"}, "move_in_date": {"type": "string", "description": "Rental starting date."}, "documents_pending": {"type": "string", "description": "Flag to know whether the lease associated with lead has any pending documents(Documents haven't been signed but payment is done then the value will be true). The default value is false."}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "suffix": {"type": "string"}, "email": {"type": "string"}, "company": {"type": "string"}, "dob": {"type": "string"}, "ssn": {"type": "string"}, "gender": {"type": "string"}, "driver_license": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "number"}, "lng": {"type": "string"}, "sms": {"type": "boolean"}}}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "primary": {"type": "number"}, "type": {"type": "string"}, "move_in": {"type": "string"}, "move_out": {"type": "string"}, "rent": {"type": "string"}}}}}}}, "paging": {"type": "object", "properties": {"count": {"type": "number"}, "total": {"type": "number"}, "num_pages": {"type": "number"}, "next": {"type": "string"}, "prev": {"type": "string"}}}}}, "message": {"type": "string"}}}, "CreateReservationUsingLead": {"title": "Request body for reservation creation using lead ID", "type": "object", "properties": {"start_date": {"type": "string", "format": "date", "description": "Reservation start date"}, "lead_id": {"type": "string", "description": "lead ID"}}}, "CreateReservationUsingContact": {"title": "Request body for reservation creation using contact", "type": "object", "properties": {"start_date": {"type": "string", "format": "date", "description": "Reservation start date"}, "rent_as_business": {"type": "boolean", "description": "Tenant Rent as a Business", "default": false}, "contacts": {"type": "array", "description": "Tenant details", "items": {"type": "object", "properties": {"Addresses": {"type": "array", "description": "Tenant address details", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "type": {"type": "string", "description": "Address type", "example": "home,work,primary"}}}}, "Business": {"type": "object", "description": "To be populated if tenant is renting as a business", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "name": {"type": "string"}, "phone": {"type": "string", "description": "Phone number"}, "phone_type": {"type": "string", "description": "Type of phone"}}}, "Phones": {"type": "array", "description": "Tenant phone details", "items": {"type": "object", "properties": {"phone": {"type": "string", "description": "Tenant phone number"}, "sms": {"type": "boolean", "description": "If true tenant opt in for SMS"}, "type": {"type": "string", "description": "Type of phone", "example": "phone,cell,work,homefax,other"}}}}, "Relationships": {"type": "array", "description": "Alternate tenant contact details", "items": {"type": "object", "properties": {"Contact": {"type": "object", "properties": {"Addresses": {"type": "array", "description": "Alternate tenant address details", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "type": {"type": "string"}}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"phone": {"type": "string"}, "sms": {"type": "boolean"}, "type": {"type": "string"}}}}, "email": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}}}, "is_alternate": {"type": "boolean", "description": "Is this contact alternate"}, "type": {"type": "string", "description": "Relationship of contact with the tenant", "example": "alternate,mother,father,wife,friend,partner"}}}}, "dob": {"type": "string", "format": "date", "description": "Tenant date of birth"}, "driver_license": {"type": "string", "description": "Tenant driver licence number"}, "driver_license_city": {"type": "string"}, "driver_license_exp": {"type": "string", "format": "date"}, "driver_license_state": {"type": "string"}, "email": {"type": "string", "description": "Tenant email ID"}, "first": {"type": "string", "description": "Tenant first name"}, "last": {"type": "string", "description": "Tenant last name"}, "middle": {"type": "string", "description": "Tenant middle name"}, "abn_number": {"type": "integer", "description": "Australian Business Number (ABN) is 11 digit identifying number used for tax purpose in Australia."}}}}, "promotions": {"type": "array", "items": {"type": "object", "properties": {"promotion_id": {"type": "string", "description": "Promotion ID"}}}}, "auto_pay_after_billing_date": {"type": "integer", "description": "Auto pay after billing date", "example": 0}, "bill_day": {"type": "integer", "description": "Bill day for lease", "example": 1}, "billing_cycle_id": {"type": "string", "description": "Billing cycle id, you can either choose payment_cycle or billing_cycle_id", "example": "k2M10LI72J"}, "discount_id": {"type": "string", "description": "Discount Id", "example": "P8vx8Yfbv5"}, "payment_cycle": {"type": "string", "description": "Lease payment cycle. Can choose payment_cycle or billing_cycle_id", "example": "Quarterly"}, "rent": {"type": "integer", "description": "Rent of a lease.", "example": 12}, "source": {"type": "string", "description": "Source of reservation", "example": "HummingBird"}, "move_in_date": {"type": "string", "format": "date", "description": "Move-in date", "example": "2024-11-19"}, "time": {"type": "string", "description": "Time of reservation", "example": "2024-11-19 06:50:27"}}}, "CreateReservationSchema": {"title": "Request body for reservation creation", "oneOf": [{"$ref": "#/components/schemas/CreateReservationUsingLead"}, {"$ref": "#/components/schemas/CreateReservationUsingContact"}]}, "CreateReservationUsingContactResp": {"title": "Response body for reservation creation using contact", "type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"reservation": {"type": "object", "properties": {"lease_id": {"type": "string"}, "reservation_id": {"type": "string"}, "Invoice": {"type": "object", "properties": {"id": {"type": "string", "example": null, "description": "Always null"}}}, "tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}}}}}}}}}}, "message": {"type": "string"}}}, "CreateReservationUsingLeadResp": {"title": "Response body for reservation creation using lead ID", "type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"reservation": {"type": "object", "properties": {"lease_id": {"type": "string"}, "reservation_id": {"type": "string"}, "Invoice": {"type": "object", "properties": {"id": {"type": "string", "format": "nullable", "example": null}}}, "tenants": {"type": "array", "items": {"type": "string", "example": []}}}}}}, "message": {"type": "string"}}}, "CreateLease": {"type": "object", "properties": {"start_date": {"type": "string", "format": "date", "description": "Move-in date for the lease. If not provided then todays date will be the start date"}, "hold_token": {"type": "string", "description": "It is a token generated at the time of holding unit"}, "idv_id": {"type": "string", "description": "IDV verification id"}, "insurance_id": {"type": "string", "description": "Insurance ID"}, "reservation_id": {"type": "string", "description": "You do not need to provide a hold token when you provide the reservation ID"}, "promotions": {"type": "array", "items": {"type": "object", "properties": {"promotion_id": {"type": "string", "description": "Promotion ID"}}}}, "additional_months": {"type": "integer", "description": "Advance pay for how many months", "example": 0}, "payment_method": {"$ref": "#/components/schemas/PaymentMethodCard"}, "payment_pending": {"type": "boolean", "description": "Set to true to create the lease without collecting payment inline; payment is deferred and a payment_link is returned in the response. Cannot be combined with payment_method (sending both returns a 400 error).", "example": false}, "lead_id": {"type": "string", "description": "Hashed ID of an existing lead to convert into this rental. The lead is matched against the rental contact and the unit being leased; on a match the existing lead is linked to the new lease and its status becomes converted (no duplicate lead is created). If it does not match, a new lead is created and lease creation proceeds.", "example": "MjRy5Afm2O"}, "stored_contents": {"type": "array", "items": {"type": "object", "properties": {"stored_content_id": {"type": "string", "description": "Hashed id of the stored content"}, "value": {"type": "string", "description": "Additional stored content details"}}}}, "contacts": {"oneOf": [{"$ref": "#/components/schemas/Contact"}, {"type": "array", "description": "Using contact ID", "items": {"description": "Using contact ID", "type": "object", "properties": {"id": {"type": "string", "description": "Contact ID"}}}}]}, "billing_cycle_id": {"type": "string", "description": "Billing cycle id, you can either choose payment_cycle or billing_cycle_id", "example": "k2M10LI72J"}, "payment_cycle": {"type": "string", "description": "Lease payment cycle. Can choose payment_cycle or billing_cycle_id", "example": "Quarterly"}}, "required": ["start_date", "hold_token", "contacts"]}, "CreateLeaseHostedPayment": {"type": "object", "properties": {"start_date": {"type": "string", "format": "date", "description": "Move-in date for the lease. If not provided then todays date will be the start date"}, "hold_token": {"type": "string", "description": "It is a token generated at the time of holding unit"}, "idv_id": {"type": "string", "description": "IDV verification id"}, "insurance_id": {"type": "string", "description": "Insurance ID"}, "reservation_id": {"type": "string", "description": "You do not need to provide a hold token when you provide the reservation ID"}, "promotions": {"type": "array", "items": {"type": "object", "properties": {"promotion_id": {"type": "string", "description": "Promotion ID"}}}}, "additional_months": {"type": "integer", "description": "Advance pay for how many months", "example": 0}, "payment": {"$ref": "#/components/schemas/CreateLeaseHostedPaymentMethodDetails"}, "payment_method": {"$ref": "#/components/schemas/CreateLeaseHostedPaymentMethodCard"}, "stored_contents": {"type": "array", "items": {"type": "object", "properties": {"stored_content_id": {"type": "string", "description": "Hashed id of the stored content"}, "value": {"type": "string", "description": "Additional stored content details"}}}}, "contacts": {"oneOf": [{"$ref": "#/components/schemas/Contact"}, {"type": "array", "description": "Using contact ID", "items": {"description": "Using contact ID", "type": "object", "properties": {"id": {"type": "string", "description": "Contact ID"}}}}]}, "billing_cycle_id": {"type": "string", "description": "Billing cycle id, you can either choose payment_cycle or billing_cycle_id", "example": "k2M10LI72J"}, "payment_cycle": {"type": "string", "description": "Lease payment cycle. Can choose payment_cycle or billing_cycle_id", "example": "Quarterly"}}, "required": ["start_date", "hold_token", "payment_method", "contacts"]}, "ConfigurePreviewInvoice": {"type": "object", "description": "An invoice built by Configure a lease for a unit. These invoices are a preview and are not saved.", "properties": {"id": {"type": "string", "nullable": true, "description": "Always null. This endpoint does not save invoices."}, "lease_id": {"type": "string", "nullable": true, "description": "Null in a preview. The new lease's ID when `save` is true."}, "property_id": {"type": "string", "nullable": true}, "contact_id": {"type": "string", "nullable": true}, "number": {"type": "string", "nullable": true}, "date": {"type": "string", "format": "date"}, "due": {"type": "string", "format": "date"}, "type": {"type": "string", "example": "manual"}, "status": {"type": "integer"}, "total_amt": {"type": "number"}, "total_tax": {"type": "number"}, "balance": {"type": "number"}, "total_due": {"type": "number", "description": "Total to pay, including tax."}}}, "ConfigureError": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "ConfigureLease": {"type": "object", "properties": {"start_date": {"type": "string", "format": "date", "description": "Move-in date for the lease. If not provided then todays date will be the start date", "example": "2024-11-08"}, "insurance_id": {"type": "string", "description": "Insurance ID"}, "reservation_id": {"type": "string", "description": "You do not need to provide a hold token when you provide the reservation ID"}, "promotions": {"type": "array", "items": {"type": "object", "properties": {"promotion_id": {"type": "string", "description": "Promotion ID"}}}}, "auto_pay_after_billing_date": {"type": "integer", "description": "Auto pay after billing date", "example": 0}, "bill_day": {"type": "integer", "description": "Bill day for lease", "example": 1}, "billed_months": {"type": "integer", "description": "Number of invoices", "example": 1}, "billing_cycle_id": {"type": "string", "description": "Lease template billing cycle id, you can either choose payment_cycle or billing_cycle_id", "example": "k2M10LI72J"}, "discount_id": {"type": "string", "description": "Discount Id", "example": "P8vx8Yfbv5"}, "edit_lease": {"type": "boolean", "description": "Edit Lease", "example": false}, "contact_id": {"type": "string", "description": "Contact Id. Optional despite being tied to the lease's tenant \u2014 omitting it creates a lease with no tenant assigned (Tenants: []).", "example": "k2M10LI72J"}, "end_date": {"type": "string", "description": "Lease End Date"}, "payment_cycle": {"type": "string", "description": "Lease payment cycle. Can choose payment_cycle or billing_cycle_id", "example": "Quarterly"}, "products": {"type": "array", "description": "Array of product IDs", "items": {"type": "string"}}, "rent": {"type": "integer", "description": "Rent of a lease.", "example": 12}, "send_invoice": {"type": "boolean", "description": "Send invoice for lease.", "example": false}, "save": {"type": "boolean", "description": "When false, returns a calculated preview of the lease/invoices without persisting anything (no unit or lease state is changed). When true, actually creates and saves the lease.", "example": false}, "type": {"type": "string", "description": "Configure type", "example": "lease"}, "tax_exempt": {"type": "boolean", "description": "Exempt lease from rental tax", "example": false}, "tax_exempt_description": {"type": "string", "description": "Reason to exempt tax", "example": "Tax is exempted because"}, "is_transfer": {"type": "integer", "description": "Transfer lease", "example": 1}, "lead_id": {"type": "string", "description": "Hashed lead id of the leads"}, "transfer_lease_id": {"type": "string", "description": "Transfer lease id", "example": "MjRy5Afm2O"}, "is_free_insurance": {"type": "boolean"}, "table_rate_coverage_amount": {"type": "number"}}}, "TransferLease": {"type": "object", "properties": {"start_date": {"type": "string", "format": "date", "description": "Move-in date for the lease. If not provided then todays date will be the start date", "example": "2024-11-08"}, "insurance_id": {"type": "string", "description": "Insurance ID"}, "promotions": {"type": "array", "items": {"type": "object", "properties": {"promotion_id": {"type": "string", "description": "Promotion ID"}}}}, "auto_pay_after_billing_date": {"type": "integer", "description": "Auto pay after billing date", "example": 0}, "bill_day": {"type": "integer", "description": "Bill day for lease", "example": 1}, "billed_months": {"type": "integer", "description": "Number of invoices", "example": 1}, "billing_cycle_id": {"type": "string", "description": "Billing cycle id, you can either choose payment_cycle or billing_cycle_id", "example": "k2M10LI72J"}, "discount_id": {"type": "string", "description": "Discount Id", "example": "P8vx8Yfbv5"}, "contact_id": {"type": "string", "description": "Contact Id", "example": "k2M10LI72J"}, "end_date": {"type": "string", "description": "Lease End Date"}, "payment_cycle": {"type": "string", "description": "Lease payment cycle. Can choose payment_cycle or billing_cycle_id", "example": "Quarterly"}, "products": {"type": "array", "description": "Array of product IDs", "items": {"type": "string"}}, "rent": {"type": "integer", "description": "Rent of a lease.", "example": 12}, "tax_exempt": {"type": "boolean", "description": "Exempt lease from rental tax", "example": false}, "tax_exempt_description": {"type": "string", "description": "Reason to exempt tax", "example": "Tax is exempted because"}, "notes": {"type": "string", "description": "Note for transfer", "example": "Transfer to friend"}, "reason": {"type": "string", "description": "Transfer Reason", "example": "space_too_big"}, "property_id": {"type": "string", "description": "Property Id", "example": "k2M10LI72J"}}}, "PaymentInvoice": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Invoice ID. Not required for pre payment"}, "number": {"type": "string", "description": "Invoice number"}, "balance": {"type": "number", "format": "decimal", "example": 0.0, "description": "Invoice balance amount"}, "date": {"type": "string", "format": "date", "description": "Invoice date"}, "period_start": {"type": "string", "description": "Invoice period start date"}, "period_end": {"type": "string", "description": "Invoice period end date"}, "lease_id": {"type": "string", "description": "Lease ID"}, "due": {"type": "string", "format": "date", "description": "Invoice due date"}, "credits_amount_used": {"type": "number", "format": "decimal", "example": 0, "description": "Amount of credits used for this invoice"}, "amount": {"type": "number", "format": "decimal", "example": 0.0, "description": "Amount you are going to pay for this invoice"}}}}, "PaymentDetails": {"type": "object", "properties": {"id": {"type": "string", "example": "", "description": "Apply existing payment to invoices."}, "property_id": {"type": "string", "description": "Related property ID"}, "contact_id": {"type": "string", "description": "Contact ID"}, "payment_method_id": {"type": "string", "description": "ID of a saved payment method;if provided no need for payment_method object"}, "type": {"type": "string", "description": "payment type", "example": "card,cash"}, "credit_type": {"type": "string", "description": "A classification that indicates the credit type of this payment", "example": "adjustment, credit, loss, payment"}, "number": {"type": "string"}, "ref_name": {"description": "Reference name", "type": "string", "nullable": true}, "source": {"type": "string", "description": "payment source"}, "amount": {"type": "number", "format": "decimal", "example": 0.0, "description": "The total amount that is about to be paid"}, "date": {"type": "string"}, "transaction_id": {"type": "string"}, "amt_remaining": {"type": "string", "description": "Remaining amount to be paid"}, "amount_tendered": {"type": "string", "format": "nullable", "description": "Aggregate amount of all tendered invoices"}}}, "ExtendedPaymentDetails": {"type": "object", "properties": {"id": {"type": "string", "example": "", "description": "Apply existing payment to invoices."}, "property_id": {"type": "string", "description": "Related property ID"}, "contact_id": {"type": "string", "description": "Contact ID"}, "payment_method_id": {"type": "string", "description": "ID of a saved payment method;if provided no need for payment_method object"}, "type": {"type": "string", "description": "payment type", "example": "card,cash"}, "credit_type": {"type": "string", "description": "A classification that indicates the credit type of this payment", "example": "adjustment, credit, loss, payment"}, "number": {"type": "string"}, "ref_name": {"description": "Reference name", "type": "string", "nullable": true}, "source": {"type": "string", "description": "payment source"}, "amount": {"type": "number", "format": "decimal", "example": 0.0, "description": "The total amount that is about to be paid"}, "date": {"type": "string"}, "transaction_id": {"type": "string"}, "amt_remaining": {"type": "string", "description": "Remaining amount to be paid"}, "amount_tendered": {"type": "string", "format": "nullable", "description": "Aggregate amount of all tendered invoices"}, "status_desc": {"type": "string", "description": "Any messages relating to the transaction as per hosted payment response from gateway"}, "status": {"type": "integer", "description": "Status of the payment (1 for successful transaction and 0 for failed transaction)"}}}, "BoxShopInvoicePayment": {"properties": {"lease_id": {"type": "string", "nullable": true}, "contact": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}}}, "payment": {"type": "object", "properties": {"type": {"type": "string"}, "ref_name": {"type": "string"}, "source": {"type": "string"}, "amount": {"type": "number"}}}, "InvoiceLines": {"type": "array", "items": {"type": "object", "properties": {"product_id": {"type": "string"}, "name": {"type": "string"}, "price": {"type": "number"}, "qty": {"type": "integer"}, "type": {"type": "string"}, "description": {"type": "string"}, "start_date": {"type": "string", "format": "date"}, "end_date": {"type": "string", "format": "date"}, "taxable": {"type": "boolean"}, "amount_type": {"type": "string"}, "cost": {"type": "number"}}}}, "use_credits": {"type": "boolean"}, "Invoices": {"type": "array", "items": {"type": "object", "properties": {"balance": {"type": "number"}, "date": {"type": "string", "format": "date"}, "period_start": {"type": "string", "format": "date"}, "period_end": {"type": "string", "format": "date"}, "due": {"type": "string", "format": "date"}, "credits_amount_used": {"type": "number"}, "amount": {"type": "number"}}}}}}, "BoxShopInvoiceHostedPayment": {"properties": {"lease_id": {"type": "string", "nullable": true}, "contact": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}}}, "payment": {"type": "object", "properties": {"ref_name": {"type": "string", "description": "Name of the tenant"}, "source": {"type": "string", "description": "Always \"hosted\""}, "amount": {"type": "number"}, "transaction_id": {"type": "string", "description": "Payment gateway transaction id"}, "type": {"type": "string", "description": "Always \"card\""}, "notes": {"type": "string", "description": "Notes if any"}}}, "paymentMethod": {"type": "object", "properties": {"type": {"type": "string", "description": "Always \"card\""}, "name_on_card": {"type": "string", "description": "card holder name"}, "card_number": {"type": "string", "description": "masked card number", "example": "5xxxxxxxxxxxx0008"}, "exp_mo": {"type": "string", "description": "Card expiration month"}, "exp_yr": {"type": "string", "description": "Card expiration year"}, "cvv2": {"type": "string", "description": "Card Verification Value"}, "save_to_account": {"type": "boolean", "description": "Always \"false\""}}}, "InvoiceLines": {"type": "array", "items": {"type": "object", "properties": {"product_id": {"type": "string"}, "name": {"type": "string"}, "price": {"type": "number"}, "qty": {"type": "integer"}, "type": {"type": "string"}, "description": {"type": "string"}, "start_date": {"type": "string", "format": "date"}, "end_date": {"type": "string", "format": "date"}, "taxable": {"type": "boolean"}, "amount_type": {"type": "string"}, "cost": {"type": "number"}}}}, "use_credits": {"type": "boolean"}, "Invoices": {"type": "array", "items": {"type": "object", "properties": {"balance": {"type": "number"}, "date": {"type": "string", "format": "date"}, "period_start": {"type": "string", "format": "date"}, "period_end": {"type": "string", "format": "date"}, "due": {"type": "string", "format": "date"}, "credits_amount_used": {"type": "number"}, "amount": {"type": "number"}}}}}}, "HostedPaymentMethod": {"type": "object", "description": "Request body for website hosted payment", "properties": {"payment": {"$ref": "#/components/schemas/HostedPaymentMethodDetails"}, "paymentMethod": {"$ref": "#/components/schemas/HostedPaymentMethodCard"}, "contact_id": {"type": "string", "description": "Contact ID"}, "property_id": {"type": "string", "description": "Property ID"}}, "required": ["payment", "paymentMethod", "contact_id", "property_id"]}, "PaymentMethod": {"type": "object", "description": "Request body for website hosted payment", "properties": {"payment": {"$ref": "#/components/schemas/PaymentMethodDetails"}, "paymentMethod": {"$ref": "#/components/schemas/PaymentMethodCard"}, "contact_id": {"type": "string", "description": "Contact ID"}, "property_id": {"type": "string", "description": "Property ID"}}, "required": ["payment", "paymentMethod", "contact_id", "property_id"]}, "CreateLeaseHostedPaymentMethod": {"type": "object", "description": "Request body for website hosted payment", "properties": {"payment": {"$ref": "#/components/schemas/HostedPaymentMethodDetails"}, "paymentMethod": {"$ref": "#/components/schemas/HostedPaymentMethodCard"}, "contact_id": {"type": "string", "description": "Contact ID"}, "property_id": {"type": "string", "description": "Property ID"}}, "required": ["payment", "paymentMethod", "contact_id", "property_id"]}, "export": {"type": "object", "properties": {"property_id": {"type": "array", "description": "Array of property IDs to export", "items": {"type": "string"}, "example": ["85B73ubBGy"]}, "book_id": {"type": "integer", "description": "Book ID for the accounting export", "example": 1}, "type": {"type": "string", "description": "Export type - summarized or detailed", "default": "detailed", "enum": ["summarized", "detailed"]}, "start_date": {"type": "string", "format": "date", "description": "Start date for the export (MM-DD-YYYY format)", "example": "01-02-2026"}, "end_date": {"type": "string", "format": "date", "description": "End date for the export (MM-DD-YYYY format)", "example": "03-02-2026"}}, "required": ["property_id", "start_date", "end_date"]}, "osrReportSummary": {"type": "object", "properties": {"num_spaces": {"type": "number", "description": "Total number of spaces"}, "reservation_count": {"type": "number", "description": "Total reservations count"}, "complimentary_count": {"type": "number", "description": "Total complimentary count"}, "lifetime_value": {"type": "number", "description": "Lifetime Value based on Move-Outs"}, "lifetime_value_agg": {"type": "number", "description": "The aggregated revenue received from tenants that have moved out as well as current tenants at a property."}, "gross_complimentary": {"type": "number", "description": "Gross complimentary revenue"}, "gross_offline": {"type": "number", "description": "Gross offline revenue"}, "disc_amount": {"type": "number", "description": "The total amount of discounts(non-expiring) that are recognized by accounting and affect the balance sheet. Non-expiring discounts occur repeatedly every month; i.e. Student, Military, Senior"}, "promo_amount": {"type": "number", "description": "The total amount of promotional discounts recognized by accounting. Promotions are marketing incentives formally administered by the property to entice new or existing tenants to rent."}, "tenants_under_sell_rate": {"type": "number", "description": "Tenants under sell rate"}, "tenants_over_sell_rate": {"type": "number", "description": "Tenants over sell rate"}, "total_area": {"type": "number"}, "occupied_units": {"type": "number", "description": "Total number of occupied spaces"}, "available_units": {"type": "number", "description": "Total number of available spaces"}, "offline_units": {"type": "number", "description": "Total number spaces that is not available to rent"}, "gross_potential": {"type": "number", "description": "The total amount of income, without any deductions, a property would bring in if all spaces were rented at economic rents"}, "gross_occupied": {"type": "number", "description": "The amount of rent that would be earned if each occupied space was rented at the sell rate/set rate"}, "actual_occupied": {"type": "number", "description": "The amount of revenue that a property can expect to earn from rent"}, "occupied_area": {"type": "number", "description": "The square footage of leased spaces"}, "available_area": {"type": "number", "description": "The total square footage of vacant area"}, "offline_area": {"type": "number", "description": "The square footage of offline spaces"}, "num_leases_mo": {"type": "number", "description": "Total number of tenants"}, "num_leases": {"type": "number", "description": "Total number of active tenants"}, "gross_available": {"type": "number", "description": "The amount of rent that would be earned if each vacant space was rented at the sell rate/set rate"}, "economic_occupancy": {"type": "number", "description": "The occupancy of a property as a measurement of actual rental revenue versus potential rental revenue over a period of time, expressed as a percentage"}, "area_per_space": {"type": "number"}, "avg_set_rate": {"type": "number", "description": "Average set rate (a rate used as a consistent, rarely-changing rate used to gauge the overall financial potential of a property)"}, "avg_sell_rate": {"type": "number", "description": "Average sell rate (a rent quoted by a property; this is not necessarily the same as the rent a tenant will pay if they enter a rental agreement)"}, "avg_rent": {"type": "number", "description": "The average rent that tenants are paying"}, "income_occupancy_pct": {"type": "number", "description": "The actual occupied rates as a percentage of gross occupied rates"}, "space_occupancy_pct": {"type": "number", "description": "The percentage of occupied spaces at the property at a given time"}, "area_occupancy_pct": {"type": "string", "description": "The percentage of occupied square footage"}, "economic_occupancy_pct": {"type": "number", "description": "The occupancy of a property as a measurement of actual rental revenue versus potential rental revenue over a period of time, expressed as a percentage"}, "physical_vacancy": {"type": "number", "description": "This is the difference between the current Sell Rate for all spaces and the current rent amount"}, "physical_vacancy_pct": {"type": "number", "description": "The difference between the current Sell Rate for all spaces and the current rent amount expressed in percentage"}, "gross_occupied_pct": {"type": "number", "description": "The amount of rent that would be earned if each occupied space was rented at the sell rate/set rate expressed in percentage"}, "gross_complimentary_pct": {"type": "number", "description": "The amount of rent that would be earned if each complimentary space was rented at the sell rate/set rate expressed in percentage"}, "gross_offline_pct": {"type": "number", "description": "Amount of rent that would be earned if each offline space was rented at the sell rate/set rate expressed in percentage"}, "actual_occupied_pct": {"type": "number", "description": "The amount of revenue that a property can expect to earn from rent expressed in percentage"}, "promotions_pct": {"type": "number"}, "discount_pct": {"type": "number"}, "space_occupancy_occupied_pct": {"type": "number", "description": "Total space occupancy expressed in percentage"}, "space_occupancy_vacant_pct": {"type": "number", "description": "Total available spaces expressed in percentage"}, "space_occupancy_offline_pct": {"type": "number", "description": "Total offline spaces expressed in percentage"}, "area_occupancy_occupied_pct": {"type": "string", "description": "Total occupied area expressed in percentage"}, "area_occupancy_vacant_pct": {"type": "string", "description": "Total available area expressed in percentage"}, "area_occupancy_offline_pct": {"type": "string", "description": "Total offline area expressed in percentage"}, "avg_area_space_occupied": {"type": "number", "description": "Average occupied area"}, "avg_area_space_vacant": {"type": "number", "description": "Average vacant area"}, "avg_area_space_offline": {"type": "number", "description": "Average offline area"}, "avg_area_space_total": {"type": "number", "description": "Average space area"}, "avg_rent_space_occupied": {"type": "number", "description": "Average rent for occupied spaces"}, "avg_rent_space_vacant": {"type": "number", "description": "Average rent for available spaces"}, "avg_rent_space_offline": {"type": "number", "description": "Average rent for offline spaces"}, "avg_rent_space": {"type": "number", "description": "Average rent for spaces"}, "avg_rent_area_total": {"type": "string", "description": "Average rent for total area"}, "avg_rent_area_occupied": {"type": "string", "description": "Average rent for occupied area"}, "avg_rent_area_available": {"type": "string", "description": "Average rent for available area"}, "avg_rent_area_offline": {"type": "string", "description": "Average rent for offline area"}, "avg_los": {"type": "number", "description": "The aggregated duration in days considering length of stay for moved out tenants and existing tenants. Values are rounded up"}, "avg_los_mo": {"type": "number", "description": "The average number of days that a tenant stayed at a property. Values are rounded up"}}}, "osrReportGroups": {"type": "object", "properties": {"num_spaces": {"type": "number", "description": "Total number of spaces"}, "tier": {"type": "string", "description": null}, "tier_type": {"type": "string", "description": "Tier type example size, area"}, "min_sqft": {"type": "string"}, "max_sqft": {"type": "string"}, "area": {"type": "string"}, "type": {"type": "string", "description": "Space group type"}, "size": {"type": "string", "description": "Space group size"}, "reservation_count": {"type": "number", "description": "Total reservations count"}, "complimentary_count": {"type": "number", "description": "Total complimentary count"}, "avg_length_of_stay": {"type": "number", "description": "The aggregated duration in days considering length of stay for moved out tenants and existing tenants. Values are rounded up"}, "avg_length_of_stay_mo": {"type": "number", "description": "The average number of days that a tenant stayed at a property. Values are rounded up"}, "lifetime_value": {"type": "number", "description": "Lifetime Value based on Move-Outs"}, "lifetime_value_agg": {"type": "number", "description": "The aggregated revenue received from tenants that have moved out as well as current tenants at a property."}, "gross_complimentary": {"type": "number", "description": "Gross complimentary revenue"}, "gross_offline": {"type": "number", "description": "Gross offline revenue"}, "disc_amount": {"type": "number", "description": "The total amount of discounts(non-expiring) that are recognized by accounting and affect the balance sheet. Non-expiring discounts occur repeatedly every month; i.e. Student, Military, Senior"}, "promo_amount": {"type": "number", "description": "The total amount of promotional discounts recognized by accounting. Promotions are marketing incentives formally administered by the property to entice new or existing tenants to rent."}, "tenants_under_sell_rate": {"type": "number", "description": "Tenants under sell rate"}, "tenants_over_sell_rate": {"type": "number", "description": "Tenants over sell rate"}, "total_area": {"type": "number"}, "occupied_units": {"type": "number", "description": "Total number of occupied spaces"}, "available_units": {"type": "number", "description": "Total number of available spaces"}, "offline_units": {"type": "number", "description": "Total number spaces that is not available to rent"}, "avg_set_rate": {"type": "number", "description": "Average set rate (a rate used as a consistent, rarely-changing rate used to gauge the overall financial potential of a property)"}, "avg_sell_rate": {"type": "number", "description": "Average sell rate (a rent quoted by a property; this is not necessarily the same as the rent a tenant will pay if they enter a rental agreement)"}, "avg_rent": {"type": "number", "description": "The average rent amount that tenants are paying"}, "gross_potential": {"type": "number", "description": "The total amount of income, without any deductions, a property would bring in if all spaces were rented at economic rents."}, "gross_occupied": {"type": "number", "description": "The amount of rent that would be earned if each occupied space was rented at the sell rate/set rate"}, "actual_occupied": {"type": "number", "description": "The amount of revenue that a property can expect to earn from rent"}, "income_occupancy": {"type": "number", "description": "The actual occupied rates as a percentage of gross occupied rates"}, "space_occupancy": {"type": "number", "description": "The occupied spaces as a percentage"}, "area_occupancy_occupied": {"type": "number", "description": "The percentage of occupied square footage at a property at a given time"}, "area_occupancy_available": {"type": "number", "description": "The percentage of available(vacant) square footage at a property at a given time"}, "area_occupancy_offline": {"type": "number", "description": "The percentage of offline square footage at a property at a given time"}, "occupied_area": {"type": "number", "description": "The square footage of leased spaces"}, "available_area": {"type": "number", "description": "The total square footage of vacant area"}, "offline_area": {"type": "number", "description": "The square footage of offline spaces"}, "num_leases_mo": {"type": "number", "description": "Total number of tenants"}, "num_leases": {"type": "number", "description": "Total number of active tenants"}, "gross_available": {"type": "number", "description": "The amount of rent that would be earned if each vacant space was rented at the sell rate/set rate"}, "breakdown": {"type": "string", "description": "Group name"}, "label": {"type": "string", "description": "Group label"}}}, "Plan": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique identifier for the plan"}, "company_id": {"type": "string", "description": "Company identifier"}, "property_id": {"type": "string", "description": "Property identifier"}, "name": {"type": "string", "description": "Name of the plan"}, "description": {"type": "string", "description": "Description of the plan"}, "reservation_settings": {"type": "object", "description": "Settings for reservations"}, "rental_settings": {"type": "object", "description": "Settings for rentals"}, "tenant_default": {"type": "integer", "format": "int32", "description": "Default setting for tenant"}, "online_default": {"type": "integer", "format": "int32", "description": "Default setting for online"}, "instore_default": {"type": "integer", "format": "int32", "description": "Default setting for instore"}, "created_by": {"type": "string", "description": "User ID who created the plan"}, "modified_by": {"type": "string", "description": "User ID who last modified the plan"}, "created_at": {"type": "string", "format": "date-time"}, "updated_at": {"type": "string", "format": "date-time"}}}, "CutOffTime": {"type": "object", "properties": {"property_id": {"type": "string", "description": "Property identifier"}, "cut_off_time": {"type": "string", "format": "time", "description": "Cut-off time in HH:mm format"}, "created_at": {"type": "string", "format": "date-time"}, "updated_at": {"type": "string", "format": "date-time"}, "created_by": {"type": "string"}, "modified_by": {"type": "string"}}}, "SpaceGroup": {"type": "object", "properties": {"property_id": {"type": "string", "description": "Property identifier"}, "space_group_id": {"type": "string", "description": "Space group identifier"}, "instore_apw_plan_id": {"type": "string", "description": "Plan ID for instore"}, "online_apw_plan_id": {"type": "string", "description": "Plan ID for online"}, "is_active": {"type": "boolean", "description": "Active status of the space group"}, "created_at": {"type": "string", "format": "date-time"}, "updated_at": {"type": "string", "format": "date-time"}, "created_by": {"type": "string"}, "modified_by": {"type": "string"}}}, "LeaseTemplate": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of template", "example": "Lease Name"}, "description": {"type": "string", "description": "Template Description", "example": "Template Description"}, "security_deposit": {"type": "boolean", "description": "Security Deposit", "example": false}, "security_deposit_type": {"type": "string", "description": "Security Deposit type, $, % or number of months"}, "deposit_amount": {"type": "integer", "description": "Security deposit amount", "example": 20}, "invoiceSendDay": {"type": "integer", "description": "Create Invoice --- days before billing day", "example": 5}, "unit_type": {"type": "string", "description": "Unit type", "example": "storage"}, "unit_type_id": {"type": "string", "example": "WEj67IYBe3"}, "is_default": {"type": "boolean", "description": "Make this default template", "example": false}, "lease_type": {"type": "string", "description": "Lease Type Month to Month Or Fixed", "example": "Month to Month"}, "bill_day": {"type": "string", "description": "Bill day Anniversary of 1st of the month", "example": "1st of the Month"}, "lease_duration": {"type": "integer", "description": "Lease duration if lease type is fixed", "example": 1}, "lease_duration_type": {"type": "string", "description": "Lease duration type if lease type is fixed, Days, Months, Years", "example": "Months"}, "email_statement": {"type": "boolean", "description": "Send invoice email after creation", "example": true}, "prorate_monthly_charges": {"type": "boolean", "description": "Prorate monthly charges on move in", "example": false}, "add_next_month": {"type": "boolean", "description": "Add next month invoice", "example": true}, "add_next_month_days": {"type": "integer", "description": "Add charges for next month after -- days", "example": 7}, "auto_pay": {"type": "boolean", "description": "Required Autopay Enrollment", "example": true}, "auto_pay_after_billing_date": {"type": "integer", "description": "Autopay will run --- days after billing date", "example": 5}, "auto_pay_max_times": {"type": "integer", "description": "Autopay will run a maximum of -- time", "example": 5}, "enable_payment_cycles": {"type": "boolean", "description": "Enable payment cycle", "example": false}, "revert_payment_cycle": {"type": "integer", "description": "Revert payment cycle after -- days", "example": 10}, "reverse_move_out": {"type": "boolean", "description": "Allow same day reversing of move-out.", "example": true}, "payment_cycle_options": {"type": "array", "description": "Payment Cycle Option", "items": {"type": "object", "properties": {"enabled": {"type": "boolean", "description": "Enable Quarterly/Annual Payment Cycle", "example": true}, "label": {"type": "string", "description": "Name of payment cycle", "example": "Quarterly"}}}}, "add_next_month_mml": {"type": "boolean", "description": "Start the Payment Cycle from next month", "example": true}, "add_next_month_mml_days": {"type": "integer", "description": "Start the cycle from the next month after this day", "example": 5}, "template_billing_cycles": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Billing Cycle Id", "example": "wNjGaFqvKL"}, "selected": {"type": "boolean", "description": "Select Billing Cycle", "example": true}}}}, "checklist": {"type": "array", "items": {"properties": {"name": {"type": "string", "description": "Name of Checklist Item", "example": "Internet Provided"}}}}, "backDaysCheck": {"type": "boolean", "description": "Allow back date", "example": false}, "allow_back_days": {"type": "integer", "description": "Allow back date for --- day(s). (Max 10 days)", "example": 5}, "prorate_rent_out": {"type": "boolean", "description": "Allow pro rate move-out", "example": "boolean"}, "prorate_days": {"type": "integer", "description": "Prorate move-out until --- day(s) after the start of service period."}}}, "RefundsReportRequest": {"type": "object", "required": ["search", "columns", "sort", "pivot_mode", "groups", "limit", "page", "offset", "properties", "roles_id", "current_date", "report_id", "time_zone"], "properties": {"search": {"type": "object", "properties": {"search": {"type": "string"}, "report_period": {"type": "object", "properties": {"days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "label": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}}}, "columns": {"type": "array", "items": {"type": "object", "required": ["key", "width", "label", "input", "options", "agg_method", "sort", "column_type", "format", "sortable", "fixed", "group", "search", "editable", "hide", "header_tool_tip", "aggregate_enable"], "properties": {"key": {"type": "string", "enum": ["refund_date", "payment_unit_numbers", "refund_to", "refund_type", "payment_method", "method_card_type", "method_acct_num", "refund_amount", "refund_trans_id"]}, "width": {"type": "integer"}, "label": {"type": "string"}, "input": {"type": "string", "enum": ["text", "timeframe", "comparison", "multi-select"]}, "options": {"type": "array", "items": {}}, "agg_method": {"type": "string"}, "sort": {"type": "integer"}, "column_type": {"type": "string"}, "format": {"type": "string"}, "sortable": {"type": "boolean"}, "fixed": {"type": "boolean"}, "group": {"type": "string"}, "search": {"type": "object", "properties": {"label": {"type": "string"}, "days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}, "editable": {"type": "boolean"}, "hide": {"type": "boolean"}, "header_tool_tip": {"type": "boolean"}, "aggregate_enable": {"type": "boolean"}}}}, "sort": {"type": "object", "properties": {"field": {"type": "string"}, "dir": {"type": "string"}}}, "pivot_mode": {"type": "object", "properties": {"type": {"type": "string"}, "column": {"type": "object"}, "row": {"type": "object"}, "pivot_field": {"type": "object"}, "agg_method": {"type": "string"}}}, "groups": {"type": "array", "items": {}}, "limit": {"type": "integer"}, "page": {"type": "integer"}, "offset": {"type": "integer"}, "properties": {"type": "array", "items": {"type": "string"}}, "property_group_id": {"type": "string"}, "roles_id": {"type": "array", "items": {"type": "string"}}, "current_date": {"type": "string"}, "report_id": {"type": "string"}, "time_zone": {"type": "string"}}}, "InvoicesReportRequest": {"type": "object", "required": ["search", "columns", "sort", "pivot_mode", "groups", "limit", "page", "offset", "properties", "roles_id", "current_date", "report_id", "time_zone"], "properties": {"search": {"type": "object", "properties": {"search": {"type": "string"}, "report_period": {"type": "object", "properties": {"days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "label": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}}}, "columns": {"type": "array", "items": {"type": "object", "required": ["key", "width", "label", "input", "options", "agg_method", "sort", "column_type", "format", "sortable", "fixed", "group", "search", "editable", "hide", "header_tool_tip", "aggregate_enable"], "properties": {"key": {"type": "string", "enum": ["property_name", "tenant_name", "unit_number", "invoice_date", "invoice_due", "invoice_number", "invoice_total_rent", "invoice_total_insurance", "invoice_total_fees", "invoice_total_merchandise", "invoice_total_utilities", "invoice_total", "invoice_discounts", "invoice_sales_tax", "invoice_credits", "invoice_payments", "invoice_balance", "invoice_writeoffs", "lease_rent", "lease_paid_through_date"]}, "width": {"type": "integer"}, "label": {"type": "string"}, "input": {"type": "string", "enum": ["text", "timeframe", "comparison", "multi-select"]}, "options": {"type": "array", "items": {}}, "agg_method": {"type": "string"}, "sort": {"type": "integer"}, "column_type": {"type": "string"}, "format": {"type": "string"}, "sortable": {"type": "boolean"}, "fixed": {"type": "boolean"}, "group": {"type": "string"}, "search": {"type": "object", "properties": {"label": {"type": "string"}, "days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}, "editable": {"type": "boolean"}, "hide": {"type": "boolean"}, "header_tool_tip": {"type": "boolean"}, "aggregate_enable": {"type": "boolean"}}}}, "sort": {"type": "object", "properties": {"field": {"type": "string"}, "dir": {"type": "string"}}}, "pivot_mode": {"type": "object", "properties": {"type": {"type": "string"}, "column": {"type": "object"}, "row": {"type": "object"}, "pivot_field": {"type": "object"}, "agg_method": {"type": "string"}}}, "groups": {"type": "array", "items": {}}, "limit": {"type": "integer"}, "page": {"type": "integer"}, "offset": {"type": "integer"}, "properties": {"type": "array", "items": {"type": "string"}}, "property_group_id": {"type": "string"}, "roles_id": {"type": "array", "items": {"type": "string"}}, "current_date": {"type": "string"}, "report_id": {"type": "string"}, "time_zone": {"type": "string"}}}, "PaymentsReportRequest": {"type": "object", "required": ["search", "columns", "sort", "pivot_mode", "groups", "limit", "page", "offset", "properties", "roles_id", "current_date", "report_id", "time_zone"], "properties": {"search": {"type": "object", "properties": {"search": {"type": "string"}, "report_period": {"type": "object", "properties": {"days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "label": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}}}, "columns": {"type": "array", "items": {"type": "object", "required": ["key", "width", "label", "input", "options", "agg_method", "sort", "column_type", "format", "sortable", "fixed", "group", "search", "editable", "hide", "header_tool_tip", "aggregate_enable"], "properties": {"key": {"type": "string", "enum": ["property_name", "tenant_name", "payment_ref_name", "payment_date", "payment_unit_numbers", "payment_amount", "payment_refunds", "payment_net", "payment_method", "method_last_4", "method_card_type", "payment_rent_paid", "payment_fees_paid", "payment_coverage_paid", "payment_merchandise_paid", "payment_tax_paid", "payment_deposit_paid", "payment_auction_paid", "payment_notes", "payment_accepted_by_name"]}, "width": {"type": "integer"}, "label": {"type": "string"}, "input": {"type": "string", "enum": ["text", "timeframe", "comparison", "multi-select"]}, "options": {"type": "array", "items": {}}, "agg_method": {"type": "string"}, "sort": {"type": "integer"}, "column_type": {"type": "string"}, "format": {"type": "string"}, "sortable": {"type": "boolean"}, "fixed": {"type": "boolean"}, "group": {"type": "string"}, "search": {"type": "object", "properties": {"label": {"type": "string"}, "days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}, "hide": {"type": "boolean"}, "header_tool_tip": {"type": "boolean"}, "aggregate_enable": {"type": "boolean"}}}}, "sort": {"type": "object", "properties": {"field": {"type": "string"}, "dir": {"type": "string"}}}, "pivot_mode": {"type": "object", "properties": {"type": {"type": "string"}, "column": {"type": "object"}, "row": {"type": "object"}, "pivot_field": {"type": "object"}, "agg_method": {"type": "string"}}}, "groups": {"type": "array", "items": {}}, "limit": {"type": "integer"}, "page": {"type": "integer"}, "offset": {"type": "integer"}, "properties": {"type": "array", "items": {"type": "string"}}, "property_group_id": {"type": "string"}, "roles_id": {"type": "array", "items": {"type": "string"}}, "current_date": {"type": "string"}, "report_id": {"type": "string"}, "time_zone": {"type": "string"}}}, "MerchandiseSalesReportRequest": {"type": "object", "required": ["search", "columns", "sort", "pivot_mode", "groups", "limit", "page", "offset", "properties", "roles_id", "current_date", "report_id", "time_zone"], "properties": {"search": {"type": "object", "properties": {"search": {"type": "string"}, "report_period": {"type": "object", "properties": {"days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "label": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}}}, "columns": {"type": "array", "items": {"type": "object", "required": ["key", "width", "label", "input", "options", "agg_method", "sort", "column_type", "format", "sortable", "fixed", "group", "search", "editable", "hide", "header_tool_tip", "aggregate_enable"], "properties": {"key": {"type": "string", "enum": ["invoice_date", "invoice_line_product", "invoice_line_product_description", "invoice_number", "tenant_name", "unit_number", "invoice_line_qty", "invoice_line_cost", "invoice_line_discount_amt", "invoice_line_total", "invoice_line_sales_tax", "invoice_line_total_sale", "invoice_payment_status", "invoice_line_amount_applied", "invoice_payment_methods", "invoice_total", "invoice_created_by"]}, "width": {"type": "integer"}, "label": {"type": "string"}, "input": {"type": "string", "enum": ["text", "timeframe", "comparison", "multi-select"]}, "options": {"type": "array", "items": {}}, "agg_method": {"type": "string"}, "sort": {"type": "integer"}, "column_type": {"type": "string"}, "format": {"type": "string"}, "sortable": {"type": "boolean"}, "fixed": {"type": "boolean"}, "group": {"type": "string"}, "search": {"type": "object", "properties": {"label": {"type": "string"}, "days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}, "editable": {"type": "boolean"}, "hide": {"type": "boolean"}, "header_tool_tip": {"type": "boolean"}, "aggregate_enable": {"type": "boolean"}}}}, "sort": {"type": "object", "properties": {"field": {"type": "string"}, "dir": {"type": "string"}}}, "pivot_mode": {"type": "object", "properties": {"type": {"type": "string"}, "column": {"type": "object"}, "row": {"type": "object"}, "pivot_field": {"type": "object"}, "agg_method": {"type": "string"}}}, "groups": {"type": "array", "items": {}}, "limit": {"type": "integer"}, "page": {"type": "integer"}, "offset": {"type": "integer"}, "properties": {"type": "array", "items": {"type": "string"}}, "property_group_id": {"type": "string"}, "roles_id": {"type": "array", "items": {"type": "string"}}, "current_date": {"type": "string"}, "report_id": {"type": "string"}, "time_zone": {"type": "string"}}}, "RentRollReportRequest": {"type": "object", "required": ["search", "columns", "sort", "groups", "limit", "page", "offset", "properties", "roles_id", "current_date", "report_id", "time_zone"], "properties": {"search": {"type": "object", "properties": {"report_period": {"type": "object", "properties": {"days": {"type": "integer"}, "label": {"type": "string"}}}}}, "columns": {"type": "array", "items": {"type": "object", "required": ["key", "width", "label", "input", "options", "agg_method", "sort", "column_type", "format", "sortable", "fixed", "group", "search", "editable", "hide", "header_tool_tip", "aggregate_enable"], "properties": {"key": {"type": "string", "enum": ["unit_number", "unit_size", "unit_category", "unit_status_historical", "tenant_name", "lease_start_date", "lease_end_date", "unit_price", "lease_rent", "lease_bill_day", "lease_next_billing_date", "lease_paid_through_date", "lease_standing", "lease_pre_access", "lease_balance", "lease_prepay_balance", "lease_rented_days"]}, "width": {"type": "integer"}, "label": {"type": "string"}, "input": {"type": "string", "enum": ["text", "timeframe", "comparison", "multi-select"]}, "options": {"type": "array", "items": {}}, "agg_method": {"type": "string"}, "sort": {"type": "integer"}, "column_type": {"type": "string"}, "format": {"type": "string"}, "sortable": {"type": "boolean"}, "fixed": {"type": "boolean"}, "group": {"type": "string"}, "search": {"oneOf": [{"type": "string"}, {"type": "object", "properties": {"label": {"type": "string"}, "days": {"type": "integer"}, "period": {"type": "string"}, "relation": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}}}, {"type": "object", "properties": {"max": {"type": "string"}, "operator": {"type": "string"}, "value": {"type": "string"}}}, {"type": "array", "items": {}}]}, "editable": {"type": "boolean"}, "hide": {"type": "boolean"}, "header_tool_tip": {"type": "boolean"}, "aggregate_enable": {"type": "boolean"}}}}, "sort": {"type": "object", "properties": {"field": {"type": "string"}, "dir": {"type": "string"}}}, "groups": {"type": "array", "items": {}}, "limit": {"type": "integer"}, "page": {"type": "integer"}, "offset": {"type": "integer"}, "properties": {"type": "array", "items": {"type": "string"}}, "roles_id": {"type": "array", "items": {"type": "string"}}, "current_date": {"type": "string"}, "report_id": {"type": "string"}, "time_zone": {"type": "string"}}}}, "parameters": {"company_id": {"description": "Company ID", "in": "path", "name": "company_id", "required": true, "schema": {"type": "string"}}, "contact_id": {"description": "Contact ID", "in": "path", "name": "contact_id", "required": true, "schema": {"type": "string"}}, "property_id": {"description": "Property ID", "in": "path", "name": "property_id", "required": true, "schema": {"type": "string"}}, "properties_id": {"description": "Hashed property id of a property", "in": "path", "name": "properties_id", "required": true, "schema": {"type": "string"}}, "context": {"in": "query", "name": "context", "schema": {"type": "string"}}, "date": {"description": "Date should be given YYYY-MM-DD format", "in": "query", "name": "date", "required": true, "schema": {"example": "2020-12-30", "type": "string"}}, "date2": {"description": "Date should be given DD/MM/YYYY format", "in": "query", "name": "date2", "required": true, "schema": {"example": "24/12/2020", "type": "string"}}, "lead_id": {"description": "Hashed lead id of the leads", "in": "path", "name": "lead_id", "required": true, "schema": {"type": "string"}}, "lease_id": {"description": "Hashed id of required lease", "in": "path", "name": "lease_id", "required": true, "schema": {"type": "string"}}, "payment_method_id": {"description": "Hashed id of required payment method", "in": "path", "name": "payment_method_id", "required": true, "schema": {"type": "string"}}, "invoice_id": {"description": "Hashed id of required invoice", "in": "path", "name": "invoice_id", "required": true, "schema": {"type": "string"}}, "hours_id": {"description": "Hashed id of required hours", "in": "path", "name": "hours_id", "required": true, "schema": {"type": "string"}}, "invoices_payment_id": {"description": "Hashed id of required invoices payment", "in": "path", "name": "invoices_payment_id", "required": true, "schema": {"type": "string"}}, "connection_id": {"description": "Hashed id of required connections", "in": "path", "name": "connection_id", "required": true, "schema": {"type": "string"}}, "invoice_payment_id": {"description": "Hashed id of required invoice payment", "in": "path", "name": "invoice_payment_id", "required": true, "schema": {"type": "string"}}, "model": {"description": "Hashed id of required model", "in": "path", "name": "model", "required": true, "schema": {"type": "string"}}, "product_id": {"description": "Hashed id of required product", "in": "path", "name": "product_id", "required": true, "schema": {"type": "string"}}, "email_id": {"description": "Hashed id of required email", "in": "path", "name": "email_id", "required": true, "schema": {"type": "string"}}, "phone_id": {"description": "Hashed id of required phone", "in": "path", "name": "phone_id", "required": true, "schema": {"type": "string"}}, "payment_id": {"description": "Hashed id of required payment", "in": "path", "name": "payment_id", "required": true, "schema": {"type": "string"}}, "plan_id": {"description": "Rate plan id", "in": "path", "name": "plan_id", "required": true, "schema": {"type": "string"}}, "space_group_id_hash": {"description": "Hashed space group id", "in": "path", "name": "space_group_id_hash", "required": true, "schema": {"type": "string"}}, "product_category_id": {"description": "Hashed id of required product category", "in": "path", "name": "product_category_id", "required": true, "schema": {"type": "string"}}, "coupon_id": {"description": "Hashed id of required coupon", "in": "path", "name": "coupon_id", "required": true, "schema": {"type": "string"}}, "promotion_id": {"description": "Hashed id of required promotion", "in": "path", "name": "promotion_id", "required": true, "schema": {"type": "string"}}, "space_mix_id": {"description": "Hashed id of required space mix/space group", "in": "path", "name": "space_mix_id", "required": true, "schema": {"type": "string"}}, "template_id": {"description": "Hashed id of required template", "in": "path", "name": "template_id", "required": true, "schema": {"type": "string"}}, "checklist_item_id": {"description": "Hashed id of required Check list", "in": "path", "name": "checklist_item_id", "required": true, "schema": {"type": "string"}}, "tenant_id": {"description": "Hashed id of required Tenant", "in": "path", "name": "tenant_id", "required": true, "schema": {"type": "string"}}, "upload_id": {"description": "Hashed id of required upload", "in": "path", "name": "upload_id", "required": true, "schema": {"type": "string"}}, "service_id": {"description": "Hashed id of service", "in": "path", "name": "service_id", "required": true, "schema": {"type": "string"}}, "document_id": {"description": "Hashed id of required document", "in": "path", "name": "document_id", "required": true, "schema": {"type": "string"}}, "filename": {"description": "Hashed id of required filename", "in": "path", "name": "filename", "required": true, "schema": {"type": "string"}}, "maintenance_type_id": {"description": "Hashed id of required maintenance type", "in": "path", "name": "maintenance_type_id", "required": true, "schema": {"type": "string"}}, "maintenance_extras_id": {"description": "Hashed id of required maintenance extras", "in": "path", "name": "maintenance_extras_id", "required": true, "schema": {"type": "string"}}, "file_key": {"description": "Hashed id of required file key", "in": "path", "name": "file_key", "required": true, "schema": {"type": "string"}}, "property_group_id": {"description": "Hashed id of required property group", "in": "path", "name": "property_group_id", "required": true, "schema": {"type": "string"}}, "unit_group_id": {"description": "Unit group id", "in": "path", "name": "unit_group_id", "required": true, "schema": {"type": "string"}}, "report_template_type": {"description": "Report name", "in": "path", "name": "report_template_type", "required": true, "schema": {"type": "string"}}, "reservation_id": {"description": "Hashed id of required reservation", "in": "path", "name": "reservation_id", "required": true, "schema": {"type": "string"}}, "apiKey_id": {"description": "Hashed id of required api key", "in": "path", "name": "apiKey_id", "required": true, "schema": {"type": "string"}}, "account_id": {"description": "Hashed id of required account", "in": "path", "name": "account_id", "required": true, "schema": {"type": "string"}}, "lease_standing_id": {"description": "Hashed id of required lease standing", "in": "path", "name": "lease_standing_id", "required": true, "schema": {"type": "string"}}, "unit_type": {"description": "Hashed id of required unit type", "in": "path", "name": "unit_type", "required": true, "schema": {"type": "string"}}, "token": {"description": "Token id", "in": "path", "name": "token", "required": true, "schema": {"type": "string"}}, "access_id": {"description": "Access id", "in": "path", "name": "access_id", "required": true, "schema": {"type": "string"}}, "service_type": {"description": "Hashed id of required service type", "in": "path", "name": "service_type", "required": true, "schema": {"type": "string"}}, "checklist_id": {"description": "Hashed id of required checklist", "in": "path", "name": "checklist_id", "required": true, "schema": {"type": "string"}}, "todo_id": {"description": "Hashed id of required todo", "in": "path", "name": "todo_id", "required": true, "schema": {"type": "string"}}, "trigger_id": {"description": "Hashed id of required trigger", "in": "path", "name": "trigger_id", "required": true, "schema": {"type": "string"}}, "id": {"description": "Hashed id of required id", "in": "path", "name": "id", "required": true, "schema": {"type": "string"}}, "utility_id": {"description": "Hashed id of required utility", "in": "path", "name": "utility_id", "required": true, "schema": {"type": "string"}}, "api_unit_id": {"description": "Hashed id of required api unit", "in": "path", "name": "api_unit_id", "required": true, "schema": {"type": "string"}}, "hold_id": {"description": "Hashed id of required hold", "in": "path", "name": "hold_id", "required": true, "schema": {"type": "string"}}, "foreign_id": {"description": "Hashed id of required foreign", "in": "path", "name": "foreign_id", "required": true, "schema": {"type": "string"}}, "interaction_id": {"description": "Hashed id of required interaction", "in": "path", "name": "interaction_id", "required": true, "schema": {"type": "string"}}, "group_id": {"description": "Hashed id of required task groups", "in": "path", "name": "group_id", "required": true, "schema": {"type": "string"}}, "rate_change_configuration_id": {"description": "Hashed id of required rate change configuration", "in": "path", "name": "rate_change_configuration_id", "required": true, "schema": {"type": "string"}}, "rate_change_id": {"description": "Hashed id of required rate change", "in": "path", "name": "rate_change_id", "required": true, "schema": {"type": "string"}}, "tax_profile_id": {"description": "Hashed id of required tax profile", "in": "path", "name": "tax_profile_id", "required": true, "schema": {"type": "string"}}, "auction_id": {"description": "Hashed id of required auction", "in": "path", "name": "auction_id", "required": true, "schema": {"type": "string"}}, "company_event_id": {"description": "Hashed id of required company event", "in": "path", "name": "company_event_id", "required": true, "schema": {"type": "string"}}, "config_id": {"description": "Hashed id of required config", "in": "path", "name": "config_id", "required": true, "schema": {"type": "string"}}, "status": {"description": "Status can be one of the following ('active','all','inactive','future')", "in": "query", "name": "status", "schema": {"type": "string"}}, "method": {"description": "its an enum, value must be string and should be one of the following ('phone','email','walk-in','note','contact form','sms')", "in": "query", "name": "method", "schema": {"type": "string"}}, "reqQueryPropertyId": {"description": "Id of the property", "in": "query", "name": "property_id", "required": true, "schema": {"type": "string"}}, "queryPropertyId": {"description": "Id of the property", "in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}}, "queryLeaseId": {"description": "Id of the lease", "in": "query", "name": "lease_id", "required": false, "schema": {"type": "string"}}, "reqQueryDateReport": {"description": "Date for which report to generated for", "in": "query", "name": "date", "required": true, "schema": {"type": "string"}}, "reqQueryFromReport": {"description": "Start date for this report", "in": "query", "name": "date", "required": true, "schema": {"type": "string"}}, "reqQueryToReport": {"description": "End date for this report", "in": "query", "name": "end_date", "required": true, "schema": {"type": "string"}}, "queryFromDate": {"description": "Start date for response", "in": "query", "name": "from_date", "required": false, "schema": {"type": "string"}}, "queryToDate": {"description": "End date for response", "in": "query", "name": "to_date", "required": false, "schema": {"type": "string"}}, "offset": {"description": "The number of items to skip before starting to collect the result set.", "in": "query", "name": "offset", "required": false, "schema": {"type": "string"}}, "limit": {"description": "The number of items to be returned.", "in": "query", "name": "limit", "required": false, "schema": {"type": "string"}}, "sortKey": {"name": "sortKey", "in": "query", "description": "A function or value determining how items should be ordered in a list or collection.", "required": false, "schema": {"type": "string", "enum": ["alphanumeric", "number", "walkThroughSort"]}}, "sortOrder": {"name": "sortOrder", "in": "query", "description": "An arrangement in which items are sorted, such as ascending (ASC) or descending (DESC).", "required": false, "schema": {"type": "string", "enum": ["ASC", "DESC"]}}, "origin": {"in": "header", "name": "origin", "schema": {"example": "http://sandbox.hummingbird.local", "type": "string"}}, "p_property_id": {"description": "Hashed id of facility", "in": "path", "name": "property_id", "required": true, "schema": {"type": "string"}}, "report_id": {"description": "Hashed id of required report", "in": "path", "name": "report_id", "required": true, "schema": {"type": "string"}}, "space_type": {"description": "Type of a space", "in": "path", "name": "space_type", "required": true, "schema": {"example": "storage, parking and residential etc", "type": "string"}}, "unit_id": {"description": "Hashed unit id of the Units", "in": "path", "name": "unit_id", "required": true, "schema": {"type": "string"}}, "company_id_1": {"description": "Hashed company id of the company", "in": "path", "name": "company_id_1", "required": true, "schema": {"type": "string"}}, "hash": {"description": "Hashed", "in": "path", "name": "hash", "required": true, "schema": {"type": "string"}}, "encrypted": {"description": "encrypted", "in": "path", "name": "encrypted", "required": true, "schema": {"type": "string"}}, "role_id": {"description": "Hashed property id of the properties", "in": "path", "name": "role_id", "required": true, "schema": {"type": "string"}}, "type": {"description": "Hashed property id of the properties", "in": "path", "name": "type", "required": true, "schema": {"type": "string"}}, "application": {"description": "Hashed property id of the properties", "in": "path", "name": "application", "required": true, "schema": {"type": "string"}}, "utility_bill_id": {"description": "Hashed property id of the properties", "in": "path", "name": "utility_bill_id", "required": true, "schema": {"type": "string"}}, "category_id": {"description": "Hashed property id of the properties", "in": "path", "name": "category_id", "required": true, "schema": {"type": "string"}}, "dashboard_id": {"description": "Hashed property id of the properties", "in": "path", "name": "dashboard_id", "required": true, "schema": {"type": "string"}}, "notification_id": {"description": "Hashed notification id of the Notifications", "in": "path", "name": "notification_id", "required": true, "schema": {"type": "string"}}, "grouping_profile_id": {"description": "Hashed grouping profile id", "in": "query", "name": "grouping_profile_id", "required": false, "schema": {"type": "string"}}, "stored_content_id": {"description": "Stored content ID", "in": "query", "name": "stored_content_id", "required": false, "schema": {"type": "string"}}, "concise": {"description": "Get concise data (Default value is false). If you use the concise parameter, the default page limit will be 200 and the maximum page limit will be 1000.", "in": "query", "name": "concise", "required": false, "schema": {"type": "boolean"}}, "space_group_id": {"description": "Hashed ID of the space grouping profile. Use in: from Get Property Space Groups (GET /properties/{property_id}/space-groups), spaceGroups[].id.", "in": "path", "name": "space_group_id", "required": true, "schema": {"type": "string"}}, "rent_change_id": {"description": "Rent Change ID", "in": "path", "name": "rent_change_id", "required": true, "schema": {"type": "string"}}, "billing_profile_id": {"description": "Hashed id of required billing profile", "in": "path", "name": "billing_profile_id", "required": true, "schema": {"type": "string"}}}, "responses": {"400": {"content": {"json": {"schema": {"properties": {"data": {"type": "object"}, "msg": {"type": "string", "description": "Error message"}, "status": {"example": 400, "type": "number"}}, "type": "object"}}}, "description": "Bad request"}, "403": {"content": {"json": {"schema": {"properties": {"error": {"example": "Access to this resource has been disallowed", "type": "string"}}}}}, "description": "Forbidden"}, "404": {"content": {"json": {"schema": {"properties": {"data": {"type": "object"}, "msg": {"type": "string", "example": "404 Not Found"}, "status": {"example": 404, "type": "number"}}, "title": "Page not found", "type": "object"}}}, "description": "Not found"}, "500": {"content": {"application/json": {"schema": {"properties": {"data": {"type": "object"}, "msg": {"type": "string"}, "status": {"example": 500, "type": "number"}}, "type": "object"}}}, "description": "Server error"}, "401": {"content": {"application/json": {"schema": {"properties": {"msg": {"type": "string"}, "status": {"example": 401, "type": "number"}}, "type": "object"}}}, "description": "Unauthorized"}, "CompanyReservations": {"content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/CreateReservationUsingLeadResp"}, {"$ref": "#/components/schemas/CreateReservationUsingContactResp"}]}}}, "description": "Success"}}}, "info": {"description": "Hummingbird provides APIs for property management solutions for independent self-storage operators.", "title": "HummingBird App", "version": "v1"}, "openapi": "3.0.0", "paths": {"/v1/companies/{company_id}/contacts/check": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "first", "schema": {"type": "string"}, "description": "First name of the contact. Matched exactly, ignoring case, together with `last`. To find a business contact by its name, send the name in `first` and send `last` empty (`last=`). Ignored when `email` or `phone` is sent. Default: none."}, {"in": "query", "name": "last", "schema": {"type": "string"}, "description": "Last name of the contact. Needs `first`: `last` alone returns 400. Default: none."}, {"in": "query", "name": "email", "schema": {"type": "string"}, "description": "Email address of the contact. Matched exactly, ignoring case. Used before `phone` and the name. Default: none."}, {"in": "query", "name": "phone", "schema": {"type": "string"}, "description": "Phone number of the contact, including the country code (for a US number, 1 followed by the 10 digits). A leading + is accepted. Used before the name. Default: none."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get existing contact", "description": "Looks up the company's contacts by email, phone number or name, so you can check whether a person already exists before you create a new contact. Each match is returned with its leases, pending leases, leads and reservations.\n\nSend `email`, or `phone`, or `first` and `last`. When more than one is sent, `email` is used, then `phone`, then the name. If none is sent, the call returns 400. No match returns an empty list.\n\n**Cost:** Medium. About 1 second and 37 KB for an email that matches 3 contacts. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"no_search_value": {"summary": "No email, phone, or first and last sent", "value": {"status": 400, "data": {}, "msg": "No data to search on", "actual_cause": "No data to search on", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get details of a contact", "description": "Get details of leases, status, reservations, old reservations, pending and leads that are associated with the contact.\n\n**Cost:** Heavy. About 0.4 seconds and 6 KB for a contact without leases; about 35 seconds and 105 KB for a contact with 13 leases. Time grows with the number of leases. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"contact": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "user_id": {"type": "string"}, "salutation": {"type": "string"}, "status": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string", "nullable": true}, "last": {"type": "string"}, "suffix": {"type": "string", "nullable": true}, "email": {"type": "string"}, "verification_token": {"type": "string"}, "email_verified": {"type": "string"}, "notes": {"type": "string"}, "gender": {"type": "string", "nullable": true}, "company": {"type": "string", "nullable": true}, "ssn": {"type": "string", "nullable": true}, "dob": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true}, "driver_license_city": {"type": "string"}, "driver_license_state": {"type": "string"}, "driver_license_exp": {"type": "string"}, "have_secondary_contact": {"type": "integer"}, "Military": {"type": "object", "properties": {"id": {"type": "string"}, "Phone": {"type": "object", "properties": {"phone": {"type": "string"}, "sms": {"type": "string"}, "type": {"type": "string"}, "country_code": {"type": "string"}}}, "CommandingOfficer": {"type": "object", "properties": {"first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}, "Phone": {"type": "object", "properties": {"phone": {"type": "string"}, "sms": {"type": "string"}, "type": {"type": "string"}, "country_code": {"type": "string"}}}}}, "active": {"type": "number"}, "service_member_email": {"type": "string"}, "branch": {"type": "string"}, "unit_name": {"type": "string"}, "identification_number": {"type": "string"}, "service_expiration": {"type": "string"}, "date_of_birth": {"type": "string"}, "rank": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}}}}}, "Business": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "phone_type": {"type": "string"}, "phone": {"type": "string"}, "country_code": {"type": "string"}, "Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}}}}}, "source": {"type": "string", "nullable": true}, "Pending": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "unit_id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "create_invoice_day": {"type": "number"}, "notes": {"type": "string"}, "terms": {"type": "string"}, "rent": {"type": "number"}, "status": {"type": "number"}, "token": {"type": "string"}, "achtoken": {"type": "string"}, "send_invoice": {"type": "number"}, "discount_id": {"type": "string"}, "security_deposit": {"type": "integer"}, "monthly": {"type": "integer"}, "lease_standing_id": {"type": "string"}, "rent_paid_through": {"type": "string"}, "code": {"type": "string"}, "moved_out": {"type": "string"}, "decline_insurance": {"type": "integer"}, "insurance_exp_month": {"type": "string"}, "insurance_exp_year": {"type": "string"}, "rent_change_exempt": {"type": "string"}, "auction_status": {"type": "string"}, "deny_payments": {"type": "integer"}, "created": {"type": "string"}, "Discounts": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "Invoice": {"type": "object", "properties": {}}, "Tenants": {"type": "array", "items": {"type": "string"}}, "Invoices": {"type": "array", "items": {"type": "string"}}, "Payments": {"type": "array", "items": {"type": "string"}}, "PaymentMethods": {"type": "array", "items": {"type": "string"}}, "Checklist": {"type": "array", "items": {"type": "string"}}, "Unit": {"type": "object", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "category_id": {"type": "string"}, "product_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "floor": {"type": "string"}, "type": {"type": "string"}, "description": {"type": "string"}, "price": {"type": "number"}, "featured": {"type": "integer"}, "available_date": {"type": "string"}, "active": {"type": "integer"}, "status": {"type": "number"}, "template_id": {"type": "string"}, "x": {"type": "string"}, "y": {"type": "string"}, "rotate": {"type": "string"}, "invert": {"type": "string"}, "left": {"type": "string"}, "top": {"type": "string"}, "hold_token": {"type": "string"}, "msg": {"type": "string"}, "state": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string", "nullable": true}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "formatted_address": {"type": "string"}}}, "Utilities": {"type": "array", "items": {"type": "string"}}, "Amenities": {"type": "object", "properties": {}}, "Category": {"type": "object", "properties": {}}, "Product": {"type": "object", "properties": {}}, "Images": {"type": "array", "items": {"type": "string"}}, "Lease": {"type": "string"}, "Leases": {"type": "array", "items": {"type": "string"}}, "Pending": {"type": "string"}, "Property": {"type": "array", "items": {"type": "string"}}, "Floorplan": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "label": {"type": "string"}, "space_mix_id": {"type": "string"}, "default_price": {"type": "number"}, "modified": {"type": "string", "nullable": true}, "next_lease_start": {"type": "string"}}}, "msg": {"type": "string"}, "MaintenanceRequests": {"type": "array", "items": {"type": "string"}}, "MaintenanceRequestCount": {"type": "string"}, "Reservation": {"type": "object", "properties": {}}, "Services": {"type": "array", "items": {"type": "string"}}, "ApplicationServices": {"type": "array", "items": {"type": "string"}}, "InsuranceServices": {"type": "array", "items": {"type": "string"}}, "ReservationServices": {"type": "array", "items": {"type": "string"}}, "move_in_costs": {"type": "string"}, "total_rent_due": {"type": "string"}, "balance": {"type": "integer"}, "open_balance": {"type": "integer"}, "OpenInvoices": {"type": "array", "items": {"type": "string"}}, "OpenPayments": {"type": "array", "items": {"type": "string"}}, "PastDue": {"type": "array", "items": {"type": "string"}}, "Ledger": {"type": "array", "items": {"type": "string"}}, "Standing": {"type": "object", "properties": {}}, "Vehicles": {"type": "object", "properties": {}}, "MoveInInvoice": {"type": "object", "properties": {}}, "Transfer": {"type": "string"}, "Lead": {"type": "object", "properties": {}}, "Property": {"type": "object", "properties": {}}, "LeaseAuction": {"type": "object", "properties": {}}, "Uploads": {"type": "array", "items": {"type": "string"}}, "Delinquency": {"type": "object", "properties": {}}, "has_open_invoice": {"type": "boolean"}, "created_by": {"type": "string"}, "auto_pay_after_billing_date": {"type": "integer"}, "current_property_date": {"type": "string"}, "sensitive_info_stored": {"type": "integer"}, "total_rent_raises_count": {"type": "integer"}, "CreatedBy": {"type": "object", "properties": {}}, "last_rent_raise": {"type": "string"}, "last_rent_raise_amount": {"type": "string"}, "future_rent_raise": {"type": "string"}, "future_rent_raise_amount": {"type": "string"}, "move_in_rent": {"type": "string"}, "statuses": {"type": "array", "items": {"type": "string"}}, "advance_rental": {"type": "integer"}}}}, "Lead": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "property_id": {"type": "string"}, "category_id": {"type": "string"}, "unit_id": {"type": "string"}, "touchpoint_id": {"type": "string"}, "note": {"type": "string"}, "length_of_stay": {"type": "string"}, "move_in_date": {"type": "string"}, "content": {"type": "string"}, "extras": {"type": "string"}, "created": {"type": "string"}, "status": {"type": "string"}, "source": {"type": "string"}, "retire_reason": {"type": "string"}, "send_to": {"type": "string"}, "opened": {"type": "string"}, "modified_by": {"type": "string"}, "created_by": {"type": "number"}, "spaceMixId": {"type": "string"}, "is_new": {"type": "boolean"}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}}}, "Lease": {"type": "object", "properties": {"status": {"type": "number"}, "rent": {"type": "number"}, "id": {"type": "string"}, "unit_id": {"type": "string"}, "Unit": {"type": "object", "properties": {"id": {"type": "string"}, "number": {"type": "string"}, "Property": {"type": "object", "properties": {"id": {"type": "string"}}}}}}}, "Company": {"type": "object", "properties": {}}, "Address": {"type": "object", "properties": {}}, "Category": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}}}, "Property": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}}}, "Touchpoint": {"type": "object", "properties": {}}, "Unit": {"type": "object", "properties": {"id": {"type": "string"}, "number": {"type": "string"}, "label": {"type": "string"}, "price": {"type": "integer"}}}, "Reservation": {"type": "object", "properties": {}}, "CreatedBy": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}}}}}, "Reservations": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "expires": {"type": "string"}, "created": {"type": "string"}, "time": {"type": "string"}, "Lease": {"type": "object", "properties": {"id": {"type": "string"}, "unit_id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "terms": {"type": "string"}, "rent": {"type": "number"}, "sensitive_info_stored": {"type": "integer"}, "auto_pay_after_billing_date": {"type": "integer"}, "notes": {"type": "string"}, "security_deposit": {"type": "string"}, "Unit": {"type": "object", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "category_id": {"type": "string"}, "number": {"type": "string"}, "price": {"type": "number"}, "state": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number"}, "lng": {"type": "number"}}}}}}}}}}, "Employment": {"type": "array", "items": {"type": "string"}}, "Vehicles": {"type": "array", "items": {"type": "string"}}, "Relationships": {"type": "array", "items": {"type": "string"}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "primary": {"type": "number"}, "verification_token": {"type": "string"}, "phone_verified": {"type": "string"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "primary": {"type": "number"}, "type": {"type": "string"}, "move_in": {"type": "string"}, "move_out": {"type": "string"}, "rent": {"type": "integer"}, "landlord": {"type": "string"}, "phone": {"type": "string"}, "Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}}}}}}, "Leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "unit_id": {"type": "string"}, "has_open_invoice": {"type": "boolean"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "notes": {"type": "string", "nullable": true}, "terms": {"type": "string"}, "rent": {"type": "integer"}, "status": {"type": "number"}, "send_invoice": {"type": "number"}, "sensitive_info_stored": {"type": "integer"}, "auto_pay_after_billing_date": {"type": "integer"}, "balance": {"type": "number"}, "open_balance": {"type": "number"}, "security_deposit": {"type": "integer", "nullable": true}, "monthly": {"type": "number", "nullable": true}, "auction_status": {"type": "string", "nullable": true}, "LeaseAuction": {"type": "object", "properties": {}}, "Unit": {"type": "object", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "category_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "type": {"type": "string"}, "state": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number"}, "lng": {"type": "number"}}}}}, "Metrics": {"type": "object", "properties": {"lifetime_payments": {"type": "number"}, "paid_through_date": {"type": "string", "nullable": true}, "prepaid_balance": {"type": "integer"}, "prepaid_balance_net": {"type": "integer", "description": "Real cash-backed prepaid balance on future invoices. Same as prepaid_balance but excludes non-cash credits such as Free Coverage Credits, credit-type payments, and adjustments."}}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"contact": {"summary": "Contact with one pending lease", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"contact": {"id": "av3xnaViP2", "company_id": "WEj67IYBe3", "user_id": null, "salutation": null, "status": "Pending", "first": "Doc", "middle": null, "last": "Test1791592483", "suffix": null, "email": "doc.test.1791592483@example.com", "verification_token": null, "email_verified": null, "notes": null, "gender": null, "company": null, "ssn": null, "dob": null, "driver_license": null, "driver_license_city": null, "driver_license_state": null, "driver_license_exp": null, "have_secondary_contact": 0, "Military": {"Phone": {}, "CommandingOfficer": {"Phone": {}}, "Address": {}}, "Business": {"Address": {}}, "source": null, "Pending": [{"id": "PvkEg8WF9j", "unit_id": "Vvaa4zUkvm", "start_date": "2026-10-10", "end_date": null, "bill_day": 10, "create_invoice_day": 1, "notes": null, "terms": null, "rent": 600, "status": 2, "token": null, "achtoken": null, "send_invoice": 0, "discount_id": null, "security_deposit": 0, "monthly": 1, "lease_standing_id": "JlBNdpTL2g", "rent_paid_through": null, "code": null, "moved_out": null, "decline_insurance": 0, "insurance_exp_month": null, "insurance_exp_year": null, "rent_change_exempt": null, "auction_status": null, "deny_payments": 0, "created": "2026-10-10 00:34:09", "Discounts": [], "Promotions": [], "Invoice": {}, "Tenants": [], "Invoices": [], "Payments": [], "PaymentMethods": [], "Checklist": [], "Unit": {"id": "Vvaa4zUkvm", "property_id": "85B73ubBGy", "category_id": "DjeayVFgjR", "product_id": "knBmmUdBVD", "address_id": "nB9YqnEHrB", "number": "339055", "floor": null, "type": "storage", "description": null, "price": 600, "featured": 0, "available_date": null, "active": 0, "status": 1, "template_id": null, "x": null, "y": null, "rotate": null, "invert": null, "left": null, "top": null, "hold_token": null, "msg": "", "state": "Pending", "Address": {"id": "nB9YqnEHrB", "address": "5281 California Ave", "address2": "Suite 320", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": null, "lat": null, "lng": null, "formatted_address": null}, "Utilities": [], "Amenities": [], "Category": {}, "Product": {}, "Images": [], "Lease": null, "Leases": [], "Pending": null, "Property": [], "Floorplan": [], "Promotions": [], "label": "10' x 10'", "space_mix_id": null, "default_price": 100, "modified": "2025-01-16 09:22:33"}, "msg": "", "MaintenanceRequests": [], "MaintenanceRequestCount": "", "Reservation": {}, "Services": [], "ApplicationServices": [], "InsuranceServices": [], "ReservationServices": [], "move_in_costs": "", "total_rent_due": "", "balance": 0, "open_balance": 0, "OpenInvoices": [], "OpenPayments": [], "PastDue": [], "Ledger": [], "Standing": {}, "Vehicles": {}, "MoveInInvoice": {}, "Transfer": null, "Lead": {}, "Property": {}, "LeaseAuction": {}, "Uploads": [], "Delinquency": {}, "has_open_invoice": false, "created_by": "420xG3aTm2", "auto_pay_after_billing_date": 2, "current_property_date": null, "sensitive_info_stored": 0, "total_rent_raises_count": 0, "CreatedBy": {}, "last_rent_raise": null, "last_rent_raise_amount": null, "future_rent_raise": null, "future_rent_raise_amount": null, "move_in_rent": null, "statuses": ["active"], "advance_rental": 1}], "Lead": {}, "Reservations": [], "Employment": [], "Vehicles": [], "Relationships": [], "Phones": [], "Addresses": [], "Leases": []}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "contact_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The contact does not belong to this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "message": ""}}}}, "404": {"description": "The contact ID is a valid ID but matches no contact.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "put": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}, {"in": "query", "name": "scope", "schema": {"type": "string", "default": "contacts"}, "description": "contacts is required to update relationships", "example": "addresses, contacts, military, general, vehicles, employment"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Update a contact", "description": "Update an existing contact associated with company.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> manage_contacts Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "suffix": {"type": "string"}, "company": {"type": "string"}, "active_military": {"type": "string"}, "have_secondary_contact": {"type": "boolean"}, "email": {"type": "string"}, "dob": {"type": "string"}, "gender": {"type": "string"}, "driver_license": {"type": "string"}, "driver_license_state": {"type": "string"}, "driver_license_city": {"type": "string"}, "driver_license_exp": {"type": "string"}, "Military": {"type": "object", "description": "Details about military", "properties": {"Phone": {"type": "object", "description": "Military unit phone details", "properties": {"type": {"type": "string", "description": "Phone type", "example": "Home, Cell"}, "country_code": {"type": "string"}, "phone": {"type": "string", "description": "Phone number"}, "sms": {"type": "boolean", "description": "Wheter SMS can be sent"}}}, "Address": {"type": "object", "description": "Military unit address details", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "CommandingOfficer": {"type": "object", "description": "Commanding officer details", "properties": {"first": {"type": "string", "description": "First name", "required": true}, "last": {"type": "string", "description": "Last name", "required": true}, "email": {"type": "string"}, "Phone": {"type": "object", "description": "Commanding officer phone details", "properties": {"type": {"type": "string", "description": "Phone number type", "examples": "Phone, Cell, Home, Work, Fax, Other"}, "country_code": {"type": "string"}, "phone": {"type": "string", "description": "Commanding officer phone number", "required": true}, "sms": {"type": "boolean"}, "primary": {"type": "number"}}}}}, "active": {"type": "boolean", "description": "Whether the tenant is in active military service"}, "branch": {"type": "string", "description": "Military branch name", "required": true}, "service_member_email": {"type": "string", "description": "Tenants military email"}, "service_expiration": {"type": "string", "description": "Term of service expiration date"}, "identification_number": {"type": "string", "description": "Military serial number", "required": true}, "rank": {"type": "string", "description": "Tenant military rank"}, "date_of_birth": {"type": "string", "description": "Service member date of birth"}, "unit_name": {"type": "string", "description": "Military unit name"}}}, "Business": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "zip": {"type": "string"}, "state": {"type": "string"}, "city": {"type": "string"}}}, "name": {"type": "string"}, "phone_type": {"type": "string"}, "phone": {"type": "string"}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "address_id": {"type": "string"}, "Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "neighborhood": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}}}}, "Relationships": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "is_emergency": {"type": "string"}, "is_cosigner": {"type": "string"}, "is_military": {"type": "string"}, "is_authorized": {"type": "boolean"}, "is_lien_holder": {"type": "string"}, "lease_id": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "string"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "address_id": {"type": "string"}, "Address": {"type": "object", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "neighborhood": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}}}}}}}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"contact_id": {"type": "string"}, "military_id": {"type": "string"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/lease/{lease_id}/access": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get grant to lease property", "description": "Get granting access for the leases property associated with the company", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The contact does not belong to this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "message": ""}}}}, "404": {"description": "The contact or lease ID is a valid ID but matches no contact or lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"contact": {"summary": "Contact not found", "value": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}, "lease": {"summary": "lease_id matches no lease", "value": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/contact-interactions": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}, {"in": "query", "name": "limit", "schema": {"type": "integer"}, "description": "Number of interactions to return. Send together with `offset`. Default: none (every interaction)."}, {"in": "query", "name": "offset", "schema": {"type": "integer"}, "description": "Number of interactions to skip. Send together with `limit`. Default: none."}, {"in": "query", "name": "method", "schema": {"type": "string"}, "description": "Returns one kind of interaction only: `email`, `sms`, `phone_call`, `phone`, `mail`, `chat`, or `note` for notes. Default: none (every kind).", "example": "email"}, {"in": "query", "name": "context", "schema": {"type": "string"}, "description": "Returns only interactions with this context. Default: none.", "example": "leadFollowUp, communicationCenter"}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "description": "Hashed ID of a property, as returned by Get all properties (GET /properties/). Returns the interactions at that property and the interactions not tied to a property. A malformed ID or one from another company returns 400. Default: none."}, {"in": "query", "name": "start_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "Start of a created-date range (YYYY-MM-DD). Must be sent together with end_date - one without the other has no effect."}, {"in": "query", "name": "end_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "End of a created-date range (YYYY-MM-DD). Must be sent together with start_date - one without the other has no effect."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get detailed interaction details", "description": "Get all the past interactions along with details associated with the contact: emails, text messages, calls, letters and notes. Pinned interactions come first, then unread ones, each group newest first. Notes follow the interactions.\n\n**Cost:** Light. About 0.8 seconds and 52 KB for a contact with 56 interactions. Not paged unless `limit` and `offset` are sent.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"Interactions": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "property_name": {"type": "string"}, "entered_by": {"type": "string", "nullable": true}, "space": {"type": "string"}, "status": {"type": "string"}, "email_timelines": {"type": "object", "properties": {"scheduled": {"type": "string"}}}, "resolved": {"type": "integer"}, "Upload": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "filename": {"type": "string"}, "file_path": {"type": "string"}, "sort": {"type": "string"}, "document_type_id": {"type": "string"}, "uploaded_by": {"type": "string"}, "uploaded_by_name": {"type": "string"}, "generated_by_name": {"type": "string"}, "type": {"type": "string"}, "upload_date": {"type": "string"}, "extension": {"type": "string"}, "encoding": {"type": "string"}, "mimetype": {"type": "string"}, "size": {"type": "string"}, "name": {"type": "string"}, "private": {"type": "boolean"}, "contact_id": {"type": "string"}, "src": {"type": "string"}, "description": {"type": "string"}, "reference_number": {"type": "string"}, "generation_status": {"type": "string"}, "foreign_id": {"type": "string"}, "status": {"type": "integer"}, "downloading": {"type": "integer"}, "fileloc": {"type": "string"}, "path": {"type": "string"}, "msg": {"type": "string"}, "Pages": {"type": "array", "items": {}}, "Revisions": {"type": "array", "items": {}}, "DocumentType": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "active": {"type": "integer"}, "created_at": {"type": "string"}, "modified_at": {"type": "string"}}}, "Leases": {"type": "array", "items": {}}, "Lease": {"type": "object", "properties": {}}, "signers": {"type": "array", "items": {}}, "cosigners": {"type": "array", "items": {}}, "admin_signers": {"type": "array", "items": {}}, "Signer": {"type": "object", "properties": {}}, "bucket_name": {"type": "string"}, "destination": {"type": "string"}, "destination_file_path": {"type": "string"}, "document": {"type": "string"}, "is_archive": {"type": "integer"}, "DocumentActions": {"type": "array", "items": {}}, "model": {"type": "string"}}}}, "pinned": {"type": "integer"}, "time": {"type": "string", "nullable": true}, "context": {"type": "string"}, "content": {"type": "string", "nullable": true}, "created": {"type": "string"}, "created_by": {"type": "string"}, "contact_id": {"type": "string"}, "primary_contact_id": {"type": "string"}, "contact_type": {"type": "string"}, "read": {"type": "integer", "nullable": true}, "description": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}, "salutation": {"type": "string"}, "rent_as_business": {"type": "boolean"}, "suffix": {"type": "string"}, "Phones": {"type": "array", "items": {}}}}, "Phone": {"type": "object", "properties": {}}, "Email": {"type": "object", "properties": {"id": {"type": "string"}, "interaction_id": {"type": "string"}, "subject": {"type": "string", "nullable": true}, "message": {"type": "string"}, "email_address": {"type": "string", "nullable": true}, "from_name": {"type": "string", "nullable": true}, "from_email": {"type": "string", "nullable": true}, "reject_reason": {"type": "string", "nullable": true}, "ip": {"type": "string"}, "delivery_receipt_refid": {"type": "string"}, "email_timer": {"type": "integer"}}}, "DeliveryMethod": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "mailhouse_id": {"type": "string"}, "gds_key": {"type": "string"}, "delivery_type": {"type": "string"}, "mail_delivered_by": {"type": "string"}}}, "Messages": {"type": "array", "items": {}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"interactions": {"summary": "One email interaction (trimmed)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"Interactions": [{"id": "Nv4woLDsrB", "property_name": "", "entered_by": "gjYkPncevz", "space": "Tenant", "status": null, "email_timelines": null, "resolved": 0, "Upload": [], "pinned": 0, "time": "2020-11-06 18:35:23", "context": null, "content": null, "created": "2020-11-06 18:35:24", "created_by": null, "contact_id": "nBmAK0IdBV", "primary_contact_id": "nBmAK0IdBV", "contact_type": null, "read": 1, "description": null, "Contact": {"id": "nBmAK0IdBV", "company_id": "WEj67IYBe3", "first": "Jo", "middle": "P.", "last": "Martin", "email": "jomartin@example.com", "salutation": null, "rent_as_business": false, "suffix": "", "Phones": []}, "Phone": {}, "Email": {"id": "PvkepLt9jV", "interaction_id": "Nv4woLDsrB", "subject": "Maintenance ", "message": null, "email_address": "jomartin@example.com", "from_name": "Sandbox - Storage Message Center", "from_email": "account@tenantinc.com", "reject_reason": null, "ip": null, "delivery_receipt_refid": null, "email_timer": 60000}, "DeliveryMethod": {"id": "3av3aTPjA1", "name": "Standard Email", "mailhouse_id": "MojDGcJ2Ya", "gds_key": "standard_email", "delivery_type": "email", "mail_delivered_by": "Hummingbird"}, "Messages": []}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The contact ID is a valid ID but matches no contact.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/uploads": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "description": "Hashed ID of a property, as returned by Get all properties (GET /properties/). When set, the response also includes uploads attached directly to the contact (document type 'file') and 'super-lease' documents, and lease uploads are limited to leases at that property. Without it, only lease uploads are returned. A malformed ID or one from another company returns 400. Default: none."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get upload for lease", "description": "Get all uploads for the leases associated with the contact for the associated company: lease documents and other uploaded files, newest first (by the first signer's signature date, or the upload date when the document is not signed).\n\n**Cost:** Heavy. About 3 to 25 seconds and 21 KB for a contact with 2 leases and 22 documents. Time grows with the number of leases. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The contact ID is a valid ID but matches no contact.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/interaction": {"post": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create interaction", "description": "? Create an interaction between logged-in user(role == admin and application) and the associated contact for the associated company.\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"attachments": {"type": "string"}, "contact_type": {"type": "string"}, "content": {"type": "string"}, "context": {"type": "string"}, "external_interaction": {"type": "boolean"}, "from": {"type": "string"}, "gds_notificationid": {"type": "string"}, "method": {"type": "string"}, "name": {"type": "string"}, "number": {"type": "string"}, "property_id": {"type": "string"}, "space": {"type": "string"}, "status": {"type": "string"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/payment-methods": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}, {"$ref": "#/components/parameters/queryPropertyId"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all saved payment methods of a contact", "description": "Get the contact's active saved payment methods. With `property_id`, only payment methods saved at that property.\n\n**Cost:** Light. About 0.3 seconds and 4 KB for a contact with 4 saved cards. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"payment_methods": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "contact_id": {"type": "string"}, "property_id": {"type": "string"}, "address_id": {"type": "string"}, "company": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "token": {"type": "string"}, "token_alt": {"type": "string"}, "cc_token": {"type": "string"}, "ach_token": {"type": "string"}, "google_token": {"type": "string"}, "name_on_card": {"type": "string"}, "exp_warning": {"type": "string"}, "auto_charge": {"type": "integer"}, "active": {"type": "integer"}, "type": {"type": "string"}, "card_end": {"type": "string"}, "routing_number": {"type": "string"}, "card_type": {"type": "string"}, "nonce": {"type": "string"}, "rent": {"type": "string"}, "utilities": {"type": "string"}, "connection_info": {"type": "object", "properties": {}}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "neighborhood": {"type": "string"}, "city": {"type": "string", "nullable": true}, "state": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "formatted_address": {"type": "string"}, "msg": {"type": "string"}}}, "User": {"type": "object", "properties": {}}, "Property": {"type": "object", "properties": {}}, "AutoPay": {"type": "string"}, "msg": {"type": "string"}, "payment_method_type_id": {"type": "string"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"card": {"summary": "Contact with a saved card (trimmed to one)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"payment_methods": [{"id": "kjgN7zCO2W", "lease_id": null, "contact_id": "av3xnaViP2", "property_id": "85B73ubBGy", "address_id": "5B7PzDMIbv", "company": null, "first": "Doc", "last": "Test1791592483", "token": "<token>", "token_alt": null, "cc_token": "", "ach_token": "", "google_token": "", "name_on_card": "Doc Test", "exp_warning": "2030-12-01", "auto_charge": 0, "active": 1, "type": "card", "card_end": "0027", "routing_number": null, "card_type": "visa", "nonce": "", "rent": null, "utilities": null, "connection_info": {}, "Address": {"id": "5B7PzDMIbv", "address": "123 Main St", "address2": null, "neighborhood": null, "city": "Irvine", "state": "CA", "zip": "92617", "country": null, "lat": null, "lng": null, "formatted_address": null, "msg": ""}, "User": {}, "Property": {}, "AutoPay": null, "msg": "", "payment_method_type_id": "3av3aTPjA1"}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The contact does not belong to this company, or property_id is not a property this app can access.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "message": ""}}}}, "404": {"description": "The contact ID is a valid ID but matches no contact.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/payments/payment-method": {"post": {"tags": ["Payments"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create new payment method", "description": "Create a payment method for the associated contact with the associated company.\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"payment": {"type": "object", "properties": {"type": {"type": "string", "example": "card"}, "source": {"type": "string", "example": "In-store"}}}, "property_id": {"type": "string", "example": "yVvaKYikjm"}, "contact_id": {"type": "string", "example": "k2MMKAT72J"}, "payment_method": {"type": "object", "properties": {"type": {"type": "string", "example": "card"}, "name_on_card": {"type": "string", "example": "test for autopay"}, "card_number": {"type": "string", "example": 4111111111111111}, "cvv2": {"type": "string", "example": 111}, "exp_mo": {"type": "string", "example": 2}, "exp_yr": {"type": "string", "example": 2026}, "save_to_account": {"type": "boolean", "example": true}, "zip": {"type": "string", "example": 1111111111}}}}, "required": ["payment", "property_id", "contact_id", "payment_method"]}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/payments/payment-method/{payment_method_id}": {"delete": {"tags": ["Payments"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/payment_method_id"}], "operationId": "deleteSavedPaymentMethod", "x-nectar-endpoint-name": "/v2/companies/company_id/payments/payment-method/payment_method_id", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Delete a saved payment method", "description": "Deletes a card saved for a contact. The card is removed from the property's payment gateway and from Hummingbird, and it is taken off any autopay and billing profile that used it. Get the `payment_method_id` from Get all saved payment methods of a contact (GET /contacts/{contact_id}/payment-methods).\n\nDeleting a card that was already deleted returns an error. Any request body is ignored.\n\n**Cost:** Light. About 0.8 seconds and under 1 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object"}, "message": {"type": "string", "example": "Your Payment method have been removed successfully"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"deleted": {"summary": "Card deleted", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {}, "message": "Your Payment method have been removed successfully"}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "payment_method_id is not a valid ID.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "payment_method_id is not a valid ID", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/payment-methods/{payment_method_id}/autopay": {"put": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}, {"$ref": "#/components/parameters/payment_method_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Update autopay status for the lease", "description": "Create an autopay for the associated payment method of an associated lease with an associated company.\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object"}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "is_multi_space": {"type": "number"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/payment-methods/autopay": {"delete": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Delete autopay", "description": "Delete an autopay for the associated payment method of an associated lease with an associated company.\n", "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}, "get": {"tags": ["Leases"], "operationId": "getLeaseAutopay", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get autopay", "description": "Returns the payment methods enrolled in autopay for a lease and the last autopay enrollment change (who made it, add or delete, and when). A lease without autopay returns an empty list and an empty activity object.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "description": "Gateway status, `success` on a 200."}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/metrics": {"get": {"tags": ["Leases"], "operationId": "getLeaseMetrics", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get lease metrics", "description": "Returns the payment metrics of one lease: lifetime payments, the date rent is paid through, the prepaid balance and whether autopay is on.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "description": "Gateway status, `success` on a 200."}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"metrics": {"type": "object", "properties": {"lifetime_payments": {"type": "number", "format": "float", "description": "Total paid on the lease over its lifetime."}, "paid_through_date": {"type": "string", "nullable": true, "format": "date", "description": "Last day covered by paid rent, or null when no rent has been paid."}, "prepaid_balance": {"type": "number", "format": "float", "description": "Payments applied to invoices for periods after today."}, "prepaid_balance_net": {"type": "number", "format": "float", "description": "Real cash-backed prepaid balance on future invoices. Same as prepaid_balance but excludes non-cash credits such as Free Coverage Credits, credit-type payments, and adjustments."}, "has_autopay": {"type": "boolean", "description": "True when at least one payment method is enrolled in autopay for the lease."}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/security-deposit": {"get": {"tags": ["Leases"], "operationId": "getLeaseSecurityDeposit", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get a tenant's security deposit", "description": "Returns the security deposit paid on a lease: one row per payment applied to a security-deposit invoice line, with the invoice, payment and line it belongs to and the amount held. A lease with no deposit paid returns an empty list.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "description": "Gateway status, `success` on a 200."}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/leases/{lease_id}/credit": {"post": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/leases/lease_id/credit", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Add credit to a lease", "description": "Add credit amount to an existing lease for the associated company.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> issue_credits Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["amount", "credit_type"], "properties": {"amount": {"type": "number", "format": "double", "description": "The credit amount to be added to the lease", "example": 55}, "credit_type": {"type": "string", "description": "The type of credit", "example": "credit", "enum": ["credit", "adjustment", "loss"]}, "notes": {"type": "string", "description": "Optional notes for the credit transaction", "example": "Credit applied for customer service"}}}, "example": {"amount": 55, "credit_type": "credit", "notes": "Credit applied for customer service"}}}}, "responses": {"200": {"description": "Credit successfully added to the lease", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"lease_id": {"type": "string", "description": "The ID of the lease that received the credit", "example": "2WklX6fwGp"}}}, "message": {"type": "string", "example": "Credit added successfully"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/close": {"put": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Close a lease", "description": "Update an existing lease to close for the associated company.\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"moved_out": {"type": "string"}, "readyToMove": {"type": "boolean"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/lead/{lead_id}": {"put": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}, {"$ref": "#/components/parameters/lead_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Update an existing lead", "description": "Update an existing lead associated with the contact for the associated company.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> manage_contacts Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"source": {"type": "string"}, "property_id": {"type": "string"}, "unit_id": {"type": "string"}, "category_id": {"type": "string"}, "move_in_date": {"type": "string"}, "note": {"type": "string"}, "spaceMixId": {"type": "string"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"lead_id": {"type": "string"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/exit-pre-access": {"put": {"summary": "Exit Pre-Access Contact", "description": "Updates a company's contact information\u2014including driver's license details, phone numbers, addresses, vehicles, and other related metadata, and processes the exit from pre-access status for the lease.", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["Addresses", "lease_id"], "properties": {"driver_license": {"type": "string", "example": "E8788105"}, "driver_license_exp": {"type": "string"}, "driver_license_country": {"type": "string"}, "driver_license_state": {"type": "string", "example": "CA"}, "driver_license_city": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "sms": {"type": "boolean", "example": true}, "phone": {"type": "string", "example": "17079896565"}, "type": {"type": "string", "example": "Cell"}, "verificationToken": {"type": "string", "nullable": true}, "phone_verified": {"type": "integer", "example": 0}}}}, "Addresses": {"type": "array", "items": {"type": "object", "required": ["Address"], "properties": {"id": {"type": "string"}, "type": {"type": "string", "example": "primary"}, "Address": {"type": "object", "required": ["address", "city", "state", "country", "zip"], "properties": {"address": {"type": "string", "example": "vhgh"}, "address2": {"type": "string", "example": "null"}, "city": {"type": "string", "example": "fdhg"}, "state": {"type": "string", "example": "tghg"}, "country": {"type": "string", "example": "fhg"}, "zip": {"type": "string", "nullable": true}}}}}}, "Relationships": {"type": "array", "items": {}}, "Vehicles": {"type": "array", "items": {}}, "Employment": {"type": "array", "items": {}}, "Military": {"type": "object"}, "rent_as_business": {"type": "boolean", "example": false}, "driver_license_confidence": {"type": "integer", "example": 0}, "driver_license_photo": {"type": "string"}, "lease_id": {"type": "string", "example": "eBoJbouxj0"}}}}}}, "content": {"application/json": {"schema": {"properties": {"Addresses": {"items": {"properties": {"Address": {"properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "neighborhood": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}, "type": "object"}, "address_id": {"type": "string"}, "id": {"type": "string"}, "type": {"type": "string"}}, "type": "object"}, "type": "array"}, "Business": {"properties": {"Address": {"properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}, "type": "object"}, "name": {"type": "string"}, "phone": {"type": "string"}, "phone_type": {"type": "string"}}, "type": "object"}, "Military": {"description": "Details about military", "properties": {"Address": {"description": "Military unit address details", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}, "type": "object"}, "CommandingOfficer": {"description": "Commanding officer details", "properties": {"Phone": {"description": "Commanding officer phone details", "properties": {"country_code": {"type": "string"}, "phone": {"description": "Commanding officer phone number", "required": true, "type": "string"}, "primary": {"type": "number"}, "sms": {"type": "boolean"}, "type": {"description": "Phone number type", "examples": "Phone, Cell, Home, Work, Fax, Other", "type": "string"}}, "type": "object"}, "email": {"type": "string"}, "first": {"description": "First name", "required": true, "type": "string"}, "last": {"description": "Last name", "required": true, "type": "string"}}, "type": "object"}, "Phone": {"description": "Military unit phone details", "properties": {"country_code": {"type": "string"}, "phone": {"description": "Phone number", "type": "string"}, "sms": {"description": "Wheter SMS can be sent", "type": "boolean"}, "type": {"description": "Phone type", "example": "Home, Cell", "type": "string"}}, "type": "object"}, "active": {"description": "Whether the tenant is in active military service", "type": "boolean"}, "branch": {"description": "Military branch name", "required": true, "type": "string"}, "date_of_birth": {"description": "Service member date of birth", "type": "string"}, "identification_number": {"description": "Military serial number", "required": true, "type": "string"}, "rank": {"description": "Tenant military rank", "type": "string"}, "service_expiration": {"description": "Term of service expiration date", "type": "string"}, "service_member_email": {"description": "Tenants military email", "type": "string"}, "unit_name": {"description": "Military unit name", "type": "string"}}, "type": "object"}, "Phones": {"items": {"properties": {"id": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "type": {"type": "string"}}, "type": "object"}, "type": "array"}, "Relationships": {"items": {"properties": {"Contact": {"properties": {"Addresses": {"items": {"properties": {"Address": {"properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "neighborhood": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}, "type": "object"}, "address_id": {"type": "string"}, "id": {"type": "string"}, "type": {"type": "string"}}, "type": "object"}, "type": "array"}, "Phones": {"items": {"properties": {"id": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "string"}, "type": {"type": "string"}}, "type": "object"}, "type": "array"}, "email": {"type": "string"}, "first": {"type": "string"}, "id": {"type": "string"}, "last": {"type": "string"}}, "type": "object"}, "id": {"type": "string"}, "is_authorized": {"type": "boolean"}, "is_cosigner": {"type": "string"}, "is_emergency": {"type": "string"}, "is_lien_holder": {"type": "string"}, "is_military": {"type": "string"}, "lease_id": {"type": "string"}, "type": {"type": "string"}}, "type": "object"}, "type": "array"}, "active_military": {"type": "string"}, "company": {"type": "string"}, "company_id": {"type": "string"}, "dob": {"type": "string"}, "driver_license": {"type": "string"}, "driver_license_city": {"type": "string"}, "driver_license_exp": {"type": "string"}, "driver_license_state": {"type": "string"}, "email": {"type": "string"}, "first": {"type": "string"}, "gender": {"type": "string"}, "have_secondary_contact": {"type": "boolean"}, "id": {"type": "string"}, "last": {"type": "string"}, "middle": {"type": "string"}, "salutation": {"type": "string"}, "suffix": {"type": "string"}}, "type": "object"}, "required": true}}, "required": true, "responses": {"200": {"content": {"application/json": {"schema": {"properties": {"data": {"properties": {"contact_id": {"type": "string"}, "military_id": {"type": "string"}}, "type": "object"}, "message": {"type": "string"}, "status": {"type": "integer"}}, "type": "object"}}}, "description": "Success"}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}, "tags": ["Contacts"], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-scope": "public", "x-nectar-visibility": "public"}}, "/v1/companies/{company_id}/contacts/{contact_id}/one-time-link": {"get": {"summary": "Generate one-time payment link for contact", "description": "Create a one-time payment link for the contact's spaces with an open balance. Each call creates a new link. The link expires at the end of the current day at the property (property local time).\n\n**Cost:** Heavy. About 0.3 to 3 seconds and 1 KB for a contact with up to 2 leases; about 25 to 30 seconds for a contact with 13 leases. Time grows with the number of leases. Not paged.", "parameters": [{"name": "company_id", "in": "path", "description": "ID of the company", "required": true, "schema": {"type": "string"}}, {"name": "contact_id", "in": "path", "description": "ID of the contact", "required": true, "schema": {"type": "string"}}, {"name": "property_id", "in": "query", "description": "Hashed ID of a property. Only the contact's leases at that property are used. Default: none (all properties the app can access).", "required": false, "schema": {"type": "string"}}, {"name": "unit_number", "in": "query", "description": "Unit number for context (optional)", "required": false, "schema": {"type": "string"}}, {"name": "communication_type", "in": "query", "description": "Send `Text` to get a short link (https://renter.link/...) that fits in a text message. Any other value returns the full link. Default: none (full link).", "required": false, "schema": {"type": "string"}}], "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"link": {"type": "string", "description": "One-time payment link, in the form `https://tenantpay.tenantinc.com/<link_id>/pay/<token>`."}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"full_link": {"summary": "Full link", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"link": "https://tenantpay.tenantinc.com/<link_id>/pay/<token>"}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "403": {"description": "The contact does not belong to this company, or property_id is not a property this app can access.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "message": ""}}}}, "404": {"description": "The contact ID is a valid ID but matches no contact.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}, "tags": ["Contacts"], "x-nectar-endpoint-name": "/v1/companies/company_id/contacts/contact_id/advance-one-time-link", "x-nectar-scope": "public", "x-nectar-visibility": "public"}}, "/v1/companies/{company_id}/contacts/{contact_id}/advance-one-time-link": {"post": {"summary": "Generate advance one-time payment link for contact", "description": "Returns an advance one-time payment link for the specified contact, including selected leases and payment context.", "tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"unit_number": {"type": "array", "description": "Array of unit numbers for context", "items": {"type": "string"}, "example": ["Test Space 1"]}, "leases": {"type": "array", "description": "Array of lease objects for which to generate the link", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Lease ID"}, "balance": {"type": "number", "format": "decimal", "description": "Current lease balance"}, "bill_day": {"type": "integer", "description": "Day of month for billing"}, "auto_charge": {"type": "boolean", "description": "Whether auto-charge is enabled"}, "deny_payments": {"type": "integer", "description": "Whether payments are denied (1 = denied)"}, "enable_payment_cycles": {"type": "integer", "description": "Whether payment cycles are enabled"}, "end_date": {"type": "string", "format": "date", "nullable": true, "description": "Lease end date"}, "start_date": {"type": "string", "format": "date", "description": "Lease start date"}, "status": {"type": "integer", "description": "Lease status"}, "pay": {"type": "boolean", "description": "Whether to include in payment"}, "payment_method_id": {"type": "string", "nullable": true, "description": "Payment method ID if set"}, "unit_id": {"type": "string", "description": "Unit ID"}, "open_balance": {"type": "number", "format": "decimal", "description": "Open balance amount"}, "security_deposit": {"type": "number", "format": "decimal", "description": "Security deposit amount"}, "tax_exempt": {"type": "integer", "description": "Tax exempt status"}, "AdvanceInvoices": {"type": "array", "description": "Array of advance invoices", "items": {"type": "object"}}, "PaymentCycleOptions": {"type": "array", "description": "Available payment cycle options", "items": {"type": "object", "properties": {"id": {"type": "string"}, "label": {"type": "string", "description": "Payment cycle label (e.g., Quarterly, Annual)"}, "period": {"type": "integer", "description": "Number of months in the payment cycle"}, "Promotion": {"type": "object", "description": "Associated promotion details"}}}}, "BillingCycleOptions": {"type": "array", "description": "Available billing cycle options", "items": {"type": "object"}}, "OpenInvoices": {"type": "array", "description": "Array of open invoices for the lease", "items": {"type": "object", "properties": {"id": {"type": "string"}, "balance": {"type": "number", "format": "decimal"}, "due": {"type": "string", "format": "date"}}}}, "Unit": {"type": "object", "description": "Unit details", "properties": {"id": {"type": "string"}, "number": {"type": "string"}, "property_id": {"type": "string"}, "type": {"type": "string"}}}, "Property": {"type": "object", "description": "Property details", "properties": {"name": {"type": "string"}, "company_id": {"type": "string"}}}}}}}, "required": ["leases"]}, "examples": {"default": {"summary": "Example Request", "value": {"unit_number": ["Test Space 1"], "leases": [{"id": "kjgrzl0SO2", "balance": 307.1, "bill_day": 1, "auto_charge": false, "deny_payments": 1, "start_date": "2025-09-16", "status": 1, "pay": true, "AdvanceInvoices": [], "PaymentCycleOptions": [{"id": "MojDQmfJBY", "label": "Quarterly", "period": 3}]}]}}}}}}, "responses": {"200": {"description": "Advance one-time payment link generated successfully.", "content": {"application/json": {"schema": {"type": "object", "required": ["status", "data"], "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "required": ["link"], "properties": {"link": {"type": "string", "description": "Obscured advance one-time payment link."}}}}}, "examples": {"success": {"summary": "Successful Response", "value": {"status": 200, "data": {"link": "https://pay.tenantinc.com/advance-one-time/obscured-token"}}}}}}}, "400": {"description": "Invalid request or missing parameters.", "content": {"application/json": {"schema": {"type": "object", "required": ["status", "error"], "properties": {"status": {"type": "integer", "example": 400}, "error": {"type": "string"}}}, "examples": {"missing": {"summary": "Missing required fields", "value": {"status": 400, "error": "Leases array is required."}}}}}}, "403": {"description": "Forbidden. User does not have access to the property.", "content": {"application/json": {"schema": {"type": "object", "required": ["status", "error"], "properties": {"status": {"type": "integer", "example": 403}, "error": {"type": "string"}}}, "examples": {"forbidden": {"summary": "Forbidden", "value": {"status": 403, "error": "Access denied to property."}}}}}}, "500": {"description": "Internal server error.", "content": {"application/json": {"schema": {"type": "object", "required": ["status", "error"], "properties": {"status": {"type": "integer", "example": 500}, "error": {"type": "string"}}}, "examples": {"server": {"summary": "Server Error", "value": {"status": 500, "error": "Internal server error."}}}}}}}, "x-nectar-endpoint-name": "/v1/companies/company_id/contacts/contact_id/advance-one-time-link", "x-nectar-scope": "public", "x-nectar-visibility": "public"}}, "/v1/companies/{company_id}/contacts/{contact_id}/access/": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get access details for a contact", "description": "Get gate access details for each rented space of the contact: the access record, the space and its property. A contact with no gate access returns an empty `access` list.\n\n**Cost:** Heavy. About 0.5 to 2 seconds and 3 KB for a contact with one space; about 34 seconds for a contact with 13 leases. Time grows with the number of leases. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"access": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "access_id": {"type": "string"}, "name": {"type": "string"}, "contact_id": {"type": "string"}, "property_id": {"type": "string"}, "pin": {"type": "string"}, "status": {"type": "integer"}, "Property": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "description": {"type": "string"}, "status": {"type": "integer"}, "name": {"type": "string"}, "access_id": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}}}}}, "Access": {"type": "object", "properties": {}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"no_access": {"summary": "Contact with no gate access", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"access": []}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The contact does not belong to this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "message": ""}}}}, "404": {"description": "The contact ID is a valid ID but matches no contact.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "post": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all access", "description": "Get all access associated with the contact\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"area_id": {"type": "string", "description": "Area identifier"}, "pin": {"type": "string", "description": "Access PIN"}, "pin_format": {"type": "string", "description": "Format of the PIN"}, "pin_max": {"type": "string", "description": "Maximum PIN length"}, "pin_min": {"type": "string", "description": "Minimum PIN length"}, "property_id": {"type": "string", "description": "Property identifier"}, "vendor_access_level_id": {"type": "string", "description": "Vendor access level identifier"}}, "required": ["area_id", "pin", "pin_format", "pin_max", "pin_min", "property_id", "vendor_access_level_id"]}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/contacts/{contact_id}/transactions": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}, {"$ref": "#/components/parameters/reqQueryPropertyId"}, {"$ref": "#/components/parameters/queryLeaseId"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get transaction details for the contact", "description": "Get the contact's ledger at one property: invoices, payments, refunds and voids, newest first, each with the running balance. With `lease_id`, only that lease's ledger is returned.\n\n**Cost:** Medium. About 0.4 to 0.6 seconds and 43 KB for 55 ledger rows; about 1 second and 600 KB for 795 rows. Size grows with the contact's history. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"transactions": {"type": "object", "properties": {"contact_id": {"type": "string"}, "leases": {"type": "array", "items": {"type": "object", "properties": {"contact_id": {"type": "string"}, "end_date": {"type": "string"}, "lease_id": {"type": "string"}, "property_id": {"type": "string"}, "start_date": {"type": "string"}, "unit_nbr": {"type": "string"}}}}, "tenant_ledger": {"type": "array", "items": {"type": "object", "properties": {"amount": {"type": "number"}, "date": {"type": "string"}, "description": {"type": "object", "properties": {"prefix": {"type": "string"}, "text": {"type": "string"}}}, "id": {"type": "string", "nullable": true}, "lease_id": {"type": "string", "nullable": true}, "number": {"type": "string"}, "row_guid": {"type": "string"}, "running_balance": {"type": "number"}, "status": {"type": "string"}, "type": {"type": "string"}, "unit_nbr": {"type": "string"}, "unit_type": {"type": "string"}, "note": {"type": "string"}, "invoice_id": {"type": "string", "nullable": true}, "payment_id": {"type": "string", "nullable": true}, "category": {"type": "string"}, "invoices": {"type": "array", "items": {"type": "object", "properties": {"invoice_id": {"type": "string"}, "invoice_nbr": {"type": "string"}, "lease_id": {"type": "string"}, "unit_nbr": {"type": "string"}, "unit_type": {"type": "string"}, "date": {"type": "string"}, "description_prefix": {"type": "string"}, "description_text": {"type": "string"}, "amount": {"type": "number"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "description": {"type": "object", "properties": {"prefix": {"type": "string"}, "text": {"type": "string"}}}}}, "nullable": true}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"ledger": {"summary": "Ledger trimmed to two rows", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"transactions": {"contact_id": "82zyAAc4vk", "leases": [{"contact_id": "82zyAAc4vk", "end_date": "2021-02-18", "lease_id": "NjGNqmCq2K", "property_id": "85B73ubBGy", "start_date": "2020-05-30", "unit_nbr": "MM10"}], "tenant_ledger": [{"row_guid": "770804c9-c8b9-11f1-bb63-0affd45002ad", "amount": 10, "date": "2021-02-02 00:00:00", "type": "invoice", "id": "6vA3R9mS6j", "number": "29991", "lease_id": "NjGNqmCq2K", "unit_nbr": "MM10", "unit_type": "storage", "description": {"text": "29991", "prefix": "Invoice # "}, "status": "Past Due", "running_balance": 1335.97, "note": "", "invoice_id": "6vA3R9mS6j", "payment_id": null, "category": "past", "invoices": null}, {"row_guid": "7708029f-c8b9-11f1-bb63-0affd45002ad", "amount": -105.31, "date": "2021-02-01 00:00:00", "type": "payment", "id": "GBlampzfZv", "number": "", "lease_id": null, "unit_nbr": "", "unit_type": "", "description": {"text": "Visa **** 1111", "prefix": "Payment : "}, "status": "", "running_balance": 1298.47, "note": "", "invoice_id": null, "payment_id": "GBlampzfZv", "category": "past", "invoices": [{"amount": 105.31, "end_date": "2021-02-28 00:00:00.000000", "lease_id": "nB94nMcrj6", "unit_nbr": "MM11", "unit_type": "storage", "invoice_id": "m2ORXqEIev", "start_date": "2021-02-01 00:00:00.000000", "description": {"text": "29217", "prefix": "Invoice # "}, "invoice_nbr": "29217"}]}]}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/contacts/{contact_id}/profile-info": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "x-nectar-endpoint-name": "/v2/companies/{company_id}/contacts/{contact_id}/profile-info", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get a pre-access tenant (contact profile)", "description": "Returns the contact's profile: personal details, phone numbers, addresses, related contacts, military and business details, and a short entry for each lease. Pre-access lease status can be identified by `is_pre_access` within each lease in `contact.Leases`.\n\n**Cost:** Medium. About 0.3 to 1 second and 3 KB for a contact with 2 leases; about 1.4 seconds and 13 KB for a contact with 13 leases. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"contact": {"type": "object", "additionalProperties": true, "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "company_id": {"type": "string", "description": "Hashed ID of the company."}, "first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}, "Addresses": {"type": "array", "items": {"type": "object", "additionalProperties": true}}, "Leases": {"type": "array", "description": "Leases associated with the contact.", "items": {"type": "object", "additionalProperties": true, "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Same value as lease_id. Use in: Get details about a lease (GET /leases/{lease_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease. Same value as id."}, "is_pre_access": {"type": "integer", "description": "1 if the lease is pre-access, otherwise 0."}, "two_step_rental_link": {"type": "string", "nullable": true, "description": "Link used to complete step two for pre-access leases; otherwise null."}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"contact": {"summary": "Contact profile (trimmed to one lease)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"contact": {"id": "nBmAK0IdBV", "company_id": "WEj67IYBe3", "first": "Jo", "last": "Martin", "email": "jomartin@example.com", "Leases": [{"id": "N5BXQWhmv3", "lease_id": "N5BXQWhmv3", "is_pre_access": 0, "two_step_rental_link": null}]}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "contact_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The contact does not belong to this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "message": ""}}}}, "404": {"description": "The contact ID is a valid ID but matches no contact.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/contacts/{contact_id}/get-contacts-details-by-contactId": {"get": {"tags": ["Contacts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "x-nectar-endpoint-name": "/v2/companies/{company_id}/contacts/{contact_id}/get-contacts-details-by-contactId", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Retrieve two-step rental link", "description": "Retrieves contact details including leases.\n\nThe Leases object includes `two_step_rental_link`, which provides the Mariposa URL used to complete step two. This value is expected to be present only for pre-access leases.\n\n**Cost:** Medium. About 0.4 seconds and 6 KB for a contact with 2 leases; about 2 seconds and 53 KB for a contact with 13 leases. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"contact": {"type": "object", "additionalProperties": true, "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "email": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "Leases": {"type": "array", "items": {"type": "object", "additionalProperties": true, "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "is_pre_access": {"type": "integer", "description": "Raw 0/1 flag, not a JSON boolean."}, "two_step_rental_link": {"type": "string", "nullable": true}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"contact": {"summary": "Contact details (trimmed to one lease)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"contact": {"id": "nBmAK0IdBV", "email": "jomartin@example.com", "first": "Jo", "last": "Martin", "Leases": [{"id": "N5BXQWhmv3", "is_pre_access": 0, "two_step_rental_link": null}]}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "contact_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leads/": {"get": {"tags": ["Leads"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "example": "85B73ubBGy", "description": "Hashed ID of a property. Only leads for this property are returned. Send the parameter more than once for several properties. Default: every property your application can access. Use in: Get a single property (GET /properties/{property_id})."}, {"in": "query", "name": "from_date", "required": false, "schema": {"type": "string", "format": "date"}, "example": "2026-10-01", "description": "Only leads created on or after this date. Format YYYY-MM-DD. Default: none."}, {"in": "query", "name": "to_date", "required": false, "schema": {"type": "string", "format": "date"}, "example": "2026-10-15", "description": "Used with from_date: only leads created before this date are returned. Format YYYY-MM-DD. Default: today's date."}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer", "default": 20}, "description": "Number of leads to return. Default: 20. Values above 100 are returned as 100. 0, a negative number or a value that is not a number returns 20."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer", "default": 0}, "description": "Number of leads to skip before the first one returned. Default: 0. A negative number or a value that is not a number is treated as 0."}], "x-nectar-endpoint-name": "/v1/companies/company_id/leads/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all leads", "operationId": "getAllLeads", "description": "Lists the company's leads, newest first. A lead is a prospective tenant's inquiry about renting space at a property, and belongs to a contact (the person). Each item has the lead's property, unit, category, status and source, and the contact's name, email, phone numbers and addresses. Active and converted leads are listed; retired and deleted leads are not.\n\nResults are paged with `limit` and `offset`. `paging.total` is the number of matching leads. To get the next page, send the same request with `offset` increased by `limit`.\n\n**Cost:** Medium. About 1 second and 21 KB for the default page of 20; about 1 to 1.2 seconds and 95 KB for the maximum page of 100.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"leads": {"type": "array", "description": "The leads, newest first.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lead. Use in: Get lead details (GET /leads/{lead_id})."}, "contact_id": {"type": "string", "description": "Hashed ID of the contact the lead belongs to. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "nullable": true, "description": "Hashed ID of the lease tied to the lead, if any. Use in: Get details about a lease (GET /leases/{lease_id})."}, "property_id": {"type": "string", "description": "Hashed ID of the property the lead is for. Use in: Get a single property (GET /properties/{property_id})."}, "category_id": {"type": "string", "nullable": true, "description": "Hashed ID of the unit category (a size and kind of space) the lead asked about. Use in: category_id of Create a new lead (POST /leads/)."}, "unit_id": {"type": "string", "nullable": true, "description": "Hashed ID of the unit the lead asked about. Use in: Get details of a unit (GET /units/{unit_id})."}, "note": {"type": "string", "nullable": true, "description": "Note on the lead."}, "content": {"type": "string", "nullable": true, "description": "Message from the prospect, for example from a website form."}, "extras": {"type": "string", "nullable": true, "description": "Extra free text saved with the lead."}, "created": {"type": "string", "description": "Date and time the lead was created, `YYYY-MM-DD HH:mm:ss`."}, "status": {"type": "string", "description": "Status of the lead, `active` or `converted`."}, "source": {"type": "string", "nullable": true, "description": "Where the lead came from, for example the name of the application that created it."}, "move_in_date": {"type": "string", "nullable": true, "description": "Date the lead wants to move in, `YYYY-MM-DD`."}, "documents_pending": {"type": "boolean", "description": "true when the lease tied to the lead has documents that are not signed yet."}, "Contact": {"type": "object", "description": "The contact (the person) the lead belongs to.", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "salutation": {"type": "string", "nullable": true, "description": "Salutation of the contact."}, "first": {"type": "string", "description": "First name."}, "middle": {"type": "string", "nullable": true, "description": "Middle name."}, "last": {"type": "string", "nullable": true, "description": "Last name."}, "suffix": {"type": "string", "nullable": true, "description": "Name suffix, for example Jr."}, "email": {"type": "string", "description": "Email address."}, "company": {"type": "string", "nullable": true, "description": "Company the contact works for."}, "dob": {"type": "string", "nullable": true, "description": "Date of birth."}, "ssn": {"type": "string", "nullable": true, "description": "Social Security Number."}, "gender": {"type": "string", "nullable": true, "description": "Gender of the contact."}, "driver_license": {"type": "string", "nullable": true, "description": "Driver's license number."}, "Phones": {"type": "array", "description": "Phone numbers of the contact.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the phone number."}, "type": {"type": "string", "description": "Kind of phone, for example `Cell`."}, "sms": {"type": "boolean", "description": "The number accepts text messages."}}}}, "Addresses": {"type": "array", "description": "Addresses of the contact.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the address entry."}, "primary": {"type": "integer", "description": "1 marks the main address."}, "type": {"type": "string", "description": "Kind of address, for example `home`."}, "move_in": {"type": "string", "nullable": true, "description": "Move-in date at this address."}, "move_out": {"type": "string", "nullable": true, "description": "Move-out date at this address."}, "rent": {"type": "number", "nullable": true, "description": "Rent paid at this address."}}}}}}}}}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of leads in this page."}, "total": {"type": "integer", "description": "Number of leads that match the request."}, "num_pages": {"type": "integer", "description": "Number of pages at this page size."}, "next": {"type": "string", "nullable": true}, "prev": {"type": "string", "nullable": true}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"leads": {"summary": "Leads at one property in a date range (limit=2)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"leads": [{"id": "Em2OY4feBJ", "contact_id": "nBmAK0IdBV", "lease_id": "3av3y3FPjA", "property_id": "85B73ubBGy", "category_id": "r82zbs42kD", "unit_id": "Vgj830U42J", "note": null, "content": "wants to test", "extras": null, "created": "2018-09-03 01:16:24", "status": "converted", "source": "Lead Source", "move_in_date": null, "documents_pending": false, "Contact": {"id": "nBmAK0IdBV", "salutation": null, "first": "Jo", "middle": "P.", "last": "Martin", "suffix": "", "email": "jomartin@example.com", "company": "Acme Industries", "dob": "1975-**-**", "ssn": "*********", "gender": "male", "driver_license": "1", "Phones": [{"id": "kjgrr9HO2W", "type": "Cell Phone", "sms": true}], "Addresses": [{"id": "wgjYW9Fevz", "primary": 1, "type": "home", "move_in": "2000-01-01", "move_out": "2001-12-31", "rent": 1500}]}}], "paging": {"count": 1, "total": 1, "num_pages": 1, "next": null, "prev": null}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "Your application cannot access the property in property_id.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "actual_cause": "", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "post": {"tags": ["Leads"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "operationId": "createLead", "x-nectar-endpoint-name": "/v1/companies/company_id/leads/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create a new lead", "description": "Creates a lead for a prospective tenant at one property. A lead belongs to a contact, which is the person. If the contact does not exist yet, it is created.\n\nIf the contact already has a lead at the same property with the same unit and category, that lead is updated and its ID is returned. No second lead is created. A lead that has no unit and no category yet is also reused, and receives the unit or category you send. On a repeat call, a `source` you leave out is replaced by the name of the calling application.\n\n**Cost:** Light. About 0.1 to 0.4 seconds and about 1 KB per call. Not paged.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> create_leads Hummingbird permission required. Contact Nectar team.</small>", "requestBody": {"description": "Every variant needs <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">property_id</code>, <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">Contact.first</code>, <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">Contact.last</code> (not needed for a business), and <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">Contact.email</code> or <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">Contact.Phones</code>. The Example dropdown shows a request for each variant.\n\n| Variant | Send | What happens |\n|---|---|---|\n| 1. New or matched contact | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">Contact</code> without <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">id</code> | Uses the contact whose email or phone matches, or creates one. Creates the lead, or updates that contact's existing lead at the property. |\n| 2. Existing contact | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">Contact.id</code> | Uses that contact. Same lead rule as variant 1. |\n| 3. Always a new contact | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">createNewContact: true</code> | Creates a new contact and a new lead, even if the email already exists. |\n| 4. Waitlist | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">lead_type: \"waitlist\"</code><br><code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">unit_id</code> or <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">selected_space_tier</code><br><code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">tracking.touchpoints</code> | Creates a Waitlist lead. With `unit_id`, fills the lead's space-interest answers from the unit. With `selected_space_tier`, builds the waitlist offer. |\n", "required": true, "content": {"application/json": {"schema": {"type": "object", "description": "Unknown fields are rejected with a 400.", "required": ["property_id", "Contact"], "properties": {"property_id": {"type": "string", "minLength": 10, "maxLength": 10, "description": "Hashed ID of the property the lead is for.", "example": "85B73ubBGy"}, "Contact": {"type": "object", "description": "The prospective tenant. Send `first` and `last` (only `first` for a business), plus an `email` or at least one entry in `Phones`.", "required": ["first", "last"], "properties": {"id": {"type": "string", "minLength": 10, "maxLength": 10, "description": "Hashed ID of an existing contact. Send it to attach the lead to that contact. The details you send, such as the email, overwrite the contact's saved details."}, "salutation": {"type": "string", "description": "Salutation of the contact."}, "first": {"type": "string", "description": "First name. For a business (`rent_as_business`), the business name.", "example": "Jane"}, "middle": {"type": "string", "description": "Middle name of the contact."}, "last": {"type": "string", "description": "Last name. Required unless `rent_as_business` is true.", "example": "Doe"}, "suffix": {"type": "string", "description": "Name suffix, for example Jr."}, "title": {"type": "string", "description": "Title of the contact."}, "company": {"type": "string", "description": "Company the contact works for."}, "email": {"type": "string", "format": "email", "description": "<span style=\"display:inline-block;padding:2px 10px;border-radius:4px;background:#fdeceb;color:#d41f1c;font-family:Courier,monospace;font-weight:normal;font-size:12px;line-height:1.5\">required if Phones is not sent</span>\n\nEmail address. Used to find an existing contact.", "example": "jane@example.com"}, "dob": {"type": "string", "format": "date", "description": "Date of birth in `YYYY-MM-DD` format. Any other format returns a 500."}, "ssn": {"type": "string", "description": "Social Security Number of the contact."}, "gender": {"type": "string", "enum": ["male", "female", "no response"], "description": "Gender of the contact."}, "driver_license": {"type": "string", "description": "Driver's license number of the contact."}, "driver_license_state": {"type": "string", "description": "State that issued the license."}, "driver_license_country": {"type": "string", "description": "Country that issued the license."}, "driver_license_city": {"type": "string", "description": "City that issued the license."}, "driver_license_exp": {"type": "string", "format": "date", "description": "License expiry date in `YYYY-MM-DD` format."}, "rent_as_business": {"type": "boolean", "description": "The lead is a business. Only `first` (the business name) is then required."}, "taxpayer_number": {"type": "string", "minLength": 9, "maxLength": 9, "description": "Tax ID. Exactly 9 characters."}, "abn_number": {"type": "string", "description": "Australian or New Zealand business number. 11 characters, or 13 for New Zealand."}, "marketing_opt_out": {"type": "boolean", "description": "The contact does not want marketing messages."}, "send_invoices_email": {"type": "boolean", "description": "Send invoices to the contact by email."}, "have_secondary_contact": {"type": "boolean", "description": "The contact has a secondary contact."}, "notes": {"type": "string", "description": "Note on the contact. Valid here, unlike at the top level of the body."}, "Phones": {"type": "array", "description": "<span style=\"display:inline-block;padding:2px 10px;border-radius:4px;background:#fdeceb;color:#d41f1c;font-family:Courier,monospace;font-weight:normal;font-size:12px;line-height:1.5\">required if email is not sent</span>\n\nPhone numbers of the contact.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the phone number."}, "type": {"type": "string", "description": "Kind of phone.", "example": "Cell"}, "phone": {"type": "string", "description": "Phone number.", "example": "5555550142"}, "sms": {"type": "boolean", "description": "The number accepts text messages."}, "primary": {"type": "integer", "minimum": 0, "maximum": 1, "description": "1 marks the main number."}, "country_code": {"type": "integer", "minimum": 1, "description": "Country calling code."}, "verificationToken": {"type": "string", "description": "One-time token used to verify the number."}, "phone_verified": {"type": "boolean", "description": "The number has been verified."}}}}, "Addresses": {"type": "array", "description": "Postal addresses of the contact. Each entry holds the address in a nested `Address` object.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the address entry."}, "type": {"type": "string", "description": "Kind of address.", "example": "primary"}, "primary": {"type": "integer", "minimum": 0, "maximum": 1, "description": "1 marks the main address."}, "landlord": {"type": "string", "description": "Previous landlord at this address."}, "reason": {"type": "string", "description": "Reason for moving."}, "rent": {"type": "number", "description": "Rent paid at this address."}, "move_in": {"type": "string", "format": "date", "description": "Move-in date at this address."}, "move_out": {"type": "string", "format": "date", "description": "Move-out date at this address."}, "Address": {"type": "object", "description": "The address itself.", "properties": {"id": {"type": "string"}, "address": {"type": "string", "example": "1 Test Way"}, "address2": {"type": "string", "example": "Unit 5"}, "city": {"type": "string", "example": "Irvine"}, "state": {"type": "string", "example": "CA"}, "neighborhood": {"type": "string"}, "country": {"type": "string", "example": "United States"}, "zip": {"type": "string", "example": "92617"}, "lat": {"type": "number", "minimum": -90, "maximum": 90}, "lng": {"type": "number", "minimum": -180, "maximum": 180}, "formatted_address": {"type": "string"}}}}}}, "Relationships": {"type": "array", "description": "Other contacts related to this contact.", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "related_contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "type": {"type": "string"}, "is_cosigner": {"type": "boolean"}, "is_emergency": {"type": "boolean"}, "is_alternate": {"type": "boolean"}, "is_military": {"type": "boolean"}, "is_authorized": {"type": "boolean"}, "is_lien_holder": {"type": "boolean"}, "is_business_representative": {"type": "boolean"}, "is_same_br_and_alc": {"type": "boolean"}, "is_move_in": {"type": "boolean"}, "is_national_account_alt": {"type": "boolean"}, "is_national_account_representative": {"type": "boolean"}}}}}}, "unit_id": {"type": "string", "minLength": 10, "maxLength": 10, "description": "Hashed ID of the unit the lead asked about. Must belong to `property_id`, otherwise the call returns a 409."}, "category_id": {"type": "string", "minLength": 10, "maxLength": 10, "description": "Hashed ID of the unit category the lead asked about."}, "move_in_date": {"type": "string", "format": "date", "description": "Date the lead wants to move in. Defaults to today.", "example": "2026-10-15"}, "length_of_stay": {"type": "string", "description": "How long the lead plans to rent. Saved on the lead."}, "source": {"type": "string", "description": "Where the lead came from. Defaults to the name of the calling application.", "example": "Website Application"}, "source_type": {"type": "string", "description": "Kind of source, for example `Direct Website`. Saved on the lead."}, "interaction_initiated": {"type": "string", "description": "How the lead reached out. Reports count `Phone` as a phone lead and `Walk In` as a walk-in lead."}, "note": {"type": "string", "maxLength": 5000, "description": "Note on the lead. Plain text, no HTML. The field is `note`, not `notes`."}, "content": {"type": "string", "maxLength": 5000, "description": "Message from the prospect, for example from a website form. Plain text, no HTML."}, "subject": {"type": "string", "description": "Subject of the message in `content`. Accepted, but it does not appear on the lead when you read it back."}, "extras": {"type": "string", "description": "Extra free text saved with the lead."}, "spaceMixId": {"type": "string", "description": "ID of the space mix (a size and type group) the lead is interested in. Worked out from `unit_id` when you send one.\n\nA base64 string of five comma-separated values: unit type ID, category ID, width, length, height.\n\nAny other format returns a 400 (`Space Mix Id is invalid`).", "example": "V0VqNjdJWUJlMyxMdnBwemVjZHY5LDEwLDEwLDg="}, "space_type": {"type": "string", "description": "Label for the kind of space. Not saved on the lead. Used only in the follow-up message sent after the lead is created."}, "createNewContact": {"type": "boolean", "description": "If true, always creates a new contact and a new lead. If omitted or false, an existing contact with the same email or phone is reused. The last name is not part of the match."}, "lead_type": {"type": "string", "description": "<span style=\"display:inline-block;padding:2px 10px;border-radius:4px;background:#fdeceb;color:#d41f1c;font-family:Courier,monospace;font-weight:normal;font-size:12px;line-height:1.5\">if waitlist with a unit_id or selected_space_tier, tracking.touchpoints is required</span>\n\nKind of lead. The API stores the label shown here.\n\n| Shown as | Value |\n|---|---|\n| Cart Abandonment | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">abandoned_rental</code> |\n| Coupon Clicks | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">coupon</code> |\n| Hot Lead - Pending Website Move-In | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">hotlead</code> |\n| Website Reservation Failure | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">reservation_failure</code> |\n| Waitlist | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">waitlist</code> |\n| Inquiry | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">inquiry</code> |\n| New Web Lead | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">new_web_lead</code> |\n| New Web Reservation | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">new_web_reservation</code> |\n| New Reservation | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">new_reservation</code> |\n| Pending Move-in | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">pending</code> |\n| New Web Lead | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">soft_reservation</code> |", "example": "waitlist"}, "flow_type": {"type": "string", "description": "Accepted. `reservation_flow` does not change the saved lead. In the code it selects which event fires after the response, and the effect is not visible in the API."}, "reservation_id": {"type": "string", "minLength": 10, "maxLength": 16, "description": "Hashed ID of a reservation. Updates the lead tied to that reservation. If no lead is tied to it, a new lead is created."}, "id": {"type": "string", "minLength": 10, "maxLength": 10, "description": "Hashed ID of an existing lead to update.\n\nThe lead is updated with the fields you send, whichever contact is in `Contact`. It keeps its original contact.\n\nA new contact is still created if the `Contact` details match no existing one."}, "tier_ids": {"type": "array", "items": {"type": "string"}, "description": "Space tiers (price groups) the lead is interested in. Each value is a `tier_id` string from the space groups endpoint.\n\nAn offer is fetched for each tier and included in the follow-up message. Offers are built after the response is returned, so the response does not show them.\n\nNot saved on the lead. An unknown value is accepted without an error."}, "selected_space_tier": {"type": "string", "description": "The single space tier the lead picked. The value is a `tier_id` string from the space groups endpoint.\n\nFor an `inquiry` lead it goes first in the offers. For a `waitlist` lead it builds the waitlist offer.\n\nAn unknown value is accepted without an error."}, "lead_questions": {"type": "object", "description": "Answers to the website questionnaire, saved on the lead. For a `waitlist` lead the API fills `space_interest` from the unit.", "properties": {"space_interest": {"type": "object", "properties": {"type": {"type": "string", "maxLength": 255}, "size": {"type": "string", "maxLength": 255, "example": "8' x 10'"}, "price": {"type": "string", "maxLength": 255, "example": "$150 - $300"}, "floor": {"type": "string", "maxLength": 255}}}}}, "rent_as_business": {"type": "boolean", "description": "Marks the lead as a business. Also send `rent_as_business` inside `Contact`, so that only `first` (the business name) is required."}, "two_step_enabled": {"type": "boolean", "description": "Accepted, but has no effect."}, "tracking": {"type": "object", "description": "<span style=\"display:inline-block;padding:2px 10px;border-radius:4px;background:#fdeceb;color:#d41f1c;font-family:Courier,monospace;font-weight:normal;font-size:12px;line-height:1.5\">required for a waitlist lead that has a unit_id or selected_space_tier</span>\n\nMarketing details about how the lead found you. For those leads, `touchpoints` must be sent, as an empty array if you have none. Otherwise the call returns a 500.", "properties": {"visitor_id": {"type": "string"}, "source": {"type": "string"}, "source_type": {"type": "string"}, "touchpoints": {"type": "array", "description": "Marketing touchpoints, saved against the contact. Required for a `waitlist` lead that has a `unit_id` or `selected_space_tier`. Send `[]` if you have none.", "items": {"type": "object", "properties": {"record_type": {"type": "string", "description": "Kind of touchpoint record."}, "platform_source": {"type": "string", "description": "Platform the visit came from.", "example": "web"}, "platform_device": {"type": "string", "description": "Device the visitor used."}, "platform_dossier": {"type": "string"}, "platform_tenant": {"type": "string"}, "referrer_request_url": {"type": "string"}, "referrer_url": {"type": "string", "description": "URL of the page that sent the visitor."}, "referrer_domain": {"type": "string"}, "referrer_device": {"type": "string"}, "referrer_source": {"type": "string", "description": "Source that referred the visitor.", "example": "google"}, "referrer_medium": {"type": "string"}, "referrer_channel": {"type": "string"}, "referrer_keyword": {"type": "string"}, "referrer_cid": {"type": "string"}, "referrer_query": {"type": "string"}, "referrer_gclid": {"type": "string"}, "referrer_fbclid": {"type": "string"}, "referrer_timestamp": {"type": "string"}, "user_ip": {"type": "string"}, "user_geo": {"type": "string"}}}}}}}}, "examples": {"new_or_matched_contact": {"summary": "New or matched contact", "description": "Reuses the contact whose email or phone matches, or creates one. The matched contact's saved details are not overwritten. Creates the lead, or updates that contact's existing lead at the property.", "value": {"property_id": "85B73ubBGy", "Contact": {"first": "Jane", "last": "Doe", "email": "jane@example.com"}}}, "existing_contact": {"summary": "Existing contact by ID", "description": "Uses the contact with this ID. `first`, `last` and an `email` or `Phones` are still required. If the contact's lead at this property has no unit yet, the unit is set on it.", "value": {"property_id": "85B73ubBGy", "unit_id": "9j5nZaSYBw", "Contact": {"id": "6vAQW6JS6v", "first": "Jane", "last": "Doe", "email": "jane@example.com"}}}, "always_new_contact": {"summary": "Always a new contact", "description": "Creates a new contact and a new lead, even if the email already exists.", "value": {"property_id": "85B73ubBGy", "createNewContact": true, "Contact": {"first": "Jane", "last": "Doe", "email": "jane@example.com"}}}, "waitlist": {"summary": "Waitlist", "description": "Creates a lead of type Waitlist for the unit, and fills the lead's space-interest answers from the unit. `tracking.touchpoints` is required when the lead has a unit or a space tier.", "value": {"property_id": "85B73ubBGy", "unit_id": "m2OoeMIe2J", "lead_type": "waitlist", "tracking": {"touchpoints": []}, "Contact": {"first": "Jane", "last": "Doe", "email": "jane@example.com"}}}}}}}, "responses": {"200": {"description": "Success. Every variant returns the same response. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"lead_id": {"type": "string", "description": "Hashed ID of the lead that was created or updated. Use it in `GET /leads/{lead_id}`.", "example": "MjRyR3fm2O"}, "contact_id": {"type": "string", "description": "Hashed ID of the contact the lead belongs to. Use it in `GET /contacts/{contact_id}`.", "example": "6vAQW6JS6v"}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"created_or_updated": {"summary": "Lead created or updated", "value": {"message": "success", "applicationData": {"appc02fcbc01b5e41818669077c87c01e7f": [{"status": 200, "data": {"lead_id": "MjRyR3fm2O", "contact_id": "6vAQW6JS6v"}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected. Validation problems are listed together in one message. Missing required fields are reported one at a time.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 400}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"unknown_field": {"summary": "Unknown field", "value": {"status": 400, "data": {}, "msg": "\"notes\" is not allowed; ", "message": ""}}, "missing_contact": {"summary": "Contact missing", "value": {"status": 400, "data": {}, "msg": "Contact info missing", "actual_cause": "Contact info missing", "message": ""}}, "missing_name": {"summary": "Name missing", "value": {"status": 400, "data": {}, "msg": "First and last name are required", "actual_cause": "First and last name are required", "message": ""}}, "missing_business_name": {"summary": "Business name missing", "value": {"status": 400, "data": {}, "msg": "Business name is required", "actual_cause": "Business name is required", "message": ""}}, "invalid_property_id": {"summary": "property_id is not 10 characters", "value": {"status": 400, "data": {}, "msg": "\"property_id\" length must be 10 characters long; ", "message": ""}}, "missing_email_or_phone": {"summary": "Email and phone missing", "value": {"status": 400, "data": {}, "msg": "Either an email address or phone number is required", "actual_cause": "Either an email address or phone number is required", "message": ""}}, "invalid_contact_values": {"summary": "Invalid contact values", "value": {"status": 400, "data": {}, "msg": "\"Contact.email\" must be a valid email; \"Contact.gender\" must be one of [male, female, no response, , null]; \"Contact.taxpayer_number\" length must be 9 characters long; \"Contact.abn_number\" does not match any of the allowed types; ", "message": ""}}, "invalid_space_mix": {"summary": "Invalid space mix ID", "value": {"status": 400, "data": {}, "msg": "Space Mix Id is invalid", "actual_cause": "Space Mix Id is invalid", "message": ""}}, "missing_property": {"summary": "Property missing", "value": {"status": 400, "data": {}, "msg": "Property reference required.", "actual_cause": "Property reference required.", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The key does not have the `create_leads` permission.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 403}, "data": {"type": "object", "nullable": true}, "msg": {"type": "string"}}}, "examples": {"missing_permission": {"summary": "Missing permission", "value": {"status": 403, "data": null, "msg": "You are not allowed to access this resource"}}}}}}, "404": {"description": "`move_in_date` falls in a closed accounting month. The message is `This move-in is not allowed for closed-month.`", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 404}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"closed_month": {"summary": "Move-in date is in a closed month", "value": {"status": 404, "data": {}, "msg": "This move-in is not allowed for closed-month.", "actual_cause": "This move-in is not allowed for closed-month.", "message": ""}}}}}}, "409": {"description": "Either `unit_id` is not at `property_id`, or the contact already has a converted lead for this unit. Nothing is saved in either case.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 409}, "data": {"type": "object", "description": "Empty for a unit that is at another property. For a converted lead it holds `message`, `unit_id`, `lead_id` and `contact_id`."}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"unit_at_another_property": {"summary": "Unit is at another property", "value": {"status": 409, "data": {}, "msg": "Unit does not blong to this property", "actual_cause": "Unit does not blong to this property", "message": ""}}, "lead_already_converted": {"summary": "Lead already converted for this unit", "value": {"status": 409, "data": {"message": "Lead status is already converted for this unit and contact", "unit_id": "6jKoERlIRj", "lead_id": "82zKM7u4jk", "contact_id": "kjgr5D1TO2"}, "message": ""}}}}}}, "500": {"description": "Unexpected error. Two known causes. `Contact.dob` is not in `YYYY-MM-DD` format (`Please enter a valid date of birth`), and a `waitlist` lead with a `unit_id` or `selected_space_tier` is sent without `tracking.touchpoints`. Send valid values to avoid both.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 500}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"invalid_date_of_birth": {"summary": "Contact.dob is not YYYY-MM-DD", "value": {"status": 500, "data": {}, "msg": "Please enter a valid date of birth", "actual_cause": null, "message": ""}}}}}}}}}, "/v1/companies/{company_id}/leads/{lead_id}": {"get": {"tags": ["Leads"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lead_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/leads/lead_id", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get lead details", "operationId": "getLeadDetails", "description": "Returns one lead with its contact (the person), property, unit and unit category. A lead is a prospective tenant's inquiry about renting space at a property. Leads of every status are returned, including retired ones.\n\n**Cost:** Light. About 0.3 seconds and 2 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"lead": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lead."}, "contact_id": {"type": "string", "description": "Hashed ID of the contact the lead belongs to. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "nullable": true, "description": "Hashed ID of the lease tied to the lead, if any. Use in: Get details about a lease (GET /leases/{lease_id})."}, "property_id": {"type": "string", "description": "Hashed ID of the property the lead is for. Use in: Get a single property (GET /properties/{property_id})."}, "category_id": {"type": "string", "nullable": true, "description": "Hashed ID of the unit category (a size and kind of space) the lead asked about. Use in: category_id of Create a new lead (POST /leads/)."}, "unit_id": {"type": "string", "nullable": true, "description": "Hashed ID of the unit the lead asked about. Use in: Get details of a unit (GET /units/{unit_id})."}, "status": {"type": "string", "description": "Status of the lead, for example `active`, `converted` or `retired`."}, "created": {"type": "string", "description": "Date and time the lead was created, `YYYY-MM-DD HH:mm:ss`."}, "note": {"type": "string", "nullable": true, "description": "Note on the lead."}, "content": {"type": "string", "nullable": true, "description": "Message from the prospect, for example from a website form."}, "Contact": {"type": "object", "description": "The contact (the person) the lead belongs to.", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "salutation": {"type": "string", "description": "Salutation of the contact."}, "first": {"type": "string", "description": "First name."}, "middle": {"type": "string", "nullable": true, "description": "Middle name."}, "last": {"type": "string", "description": "Last name."}, "suffix": {"type": "string", "nullable": true, "description": "Name suffix, for example Jr."}, "email": {"type": "string", "description": "Email address."}, "company": {"type": "string", "nullable": true, "description": "Company the contact works for."}, "dob": {"type": "string", "nullable": true, "description": "Date of birth."}, "ssn": {"type": "string", "nullable": true, "description": "Social Security Number."}, "gender": {"type": "string", "nullable": true, "description": "Gender of the contact."}, "driver_license": {"type": "string", "nullable": true, "description": "Driver's license number."}, "Phones": {"type": "array", "description": "Phone numbers of the contact.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the phone number."}, "type": {"type": "string", "description": "Kind of phone, for example `Cell`."}, "phone": {"type": "string", "description": "Phone number."}, "sms": {"type": "boolean", "description": "The number accepts text messages."}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number"}, "lng": {"type": "number"}, "zip": {"type": "string"}, "formatted_address": {"type": "string"}}}}}}, "Property": {"type": "object", "description": "The property the lead is for.", "properties": {"id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "name": {"type": "string", "description": "Name of the property."}, "number": {"type": "string", "description": "Property number set by the company."}, "description": {"type": "string", "nullable": true, "description": "Description of the property."}, "Address": {"type": "object", "description": "Address of the property.", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "zip": {"type": "string"}}}}}, "Unit": {"type": "object", "description": "The unit the lead asked about. Empty when the lead has no unit.", "properties": {"id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "number": {"type": "string", "description": "Unit number shown at the property."}, "type": {"type": "string", "description": "Kind of space, for example `storage` or `parking`."}, "price": {"type": "number", "description": "Monthly rent of the unit."}, "description": {"type": "string", "nullable": true, "description": "Description of the unit."}, "available_date": {"type": "string", "nullable": true, "description": "Date the unit becomes available, `YYYY-MM-DD`."}}}, "Category": {"type": "object", "description": "The unit category the lead asked about. Empty when the lead has no category.", "properties": {"id": {"type": "string", "description": "Hashed ID of the unit category."}, "name": {"type": "string", "description": "Name of the category."}, "description": {"type": "string", "description": "Description of the category."}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"lead": {"summary": "A converted lead with a unit and a category", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"lead": {"id": "Em2OY4feBJ", "contact_id": "nBmAK0IdBV", "lease_id": "3av3y3FPjA", "property_id": "85B73ubBGy", "category_id": "r82zbs42kD", "unit_id": "Vgj830U42J", "status": "converted", "created": "2018-09-03 01:16:24", "note": null, "content": "wants to test", "Contact": {"id": "nBmAK0IdBV", "salutation": null, "first": "Jo", "middle": "P.", "last": "Martin", "suffix": "", "email": "jomartin@example.com", "company": "Acme Industries", "dob": "1975-**-**", "ssn": "*********", "gender": "male", "driver_license": "1", "Phones": [{"id": "kjgrr9HO2W", "type": "Cell Phone", "phone": "15555555555", "sms": true}], "Addresses": []}, "Property": {"id": "85B73ubBGy", "name": "UC Irvine Storage", "number": "UCI-1", "description": "StoreAll Self Storage  is one of the largest mini storage facilities in Los Angeles. We offer affordable storage units, anywhere in the city. Our friendly and knowledgeable staff can help you find the right storage unit for you and answer any questions you may have about our storage solutions", "Address": {"address": "5281 California Ave 22", "address2": "Suite 9", "city": "Irvine", "state": "CA", "neighborhood": null, "country": "United States", "lat": 33.63552, "lng": -117.855854, "zip": "92617"}}, "Unit": {"id": "Vgj830U42J", "number": "102", "type": "storage", "price": 440, "description": "This 5x5 storage unit is the size of a small closet.\nIt fits a dresser, a small mattress set, and several small to medium-sized boxes. This space is also perfect for garden tools, seasonal d\u00e9cor and sports equipment.", "available_date": "2026-07-13"}, "Category": {"id": "r82zbs42kD", "name": "5x5 Storage Unit", "description": "5x5 Climate Controlled Unit"}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lead_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The lead ID is a valid ID but matches no lead.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Lead not found", "actual_cause": "Lead not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leads/{lead_id}/retire": {"put": {"tags": ["Leads"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lead_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/leads/lead_id/retire", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Retire a lead", "description": "Update an existing lead to retire with the associated company.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"reason": {"type": "string"}, "opt_out": {"type": "boolean"}, "notes": {"type": "string"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"lead_id": {"type": "string"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "status", "required": false, "schema": {"type": "string", "enum": ["active", "inactive", "future", "all"], "default": "active"}, "description": "Which leases to return, by lease period: active (started and not ended), inactive (ended), future (not started yet), all. Default: active. Case-sensitive. Any other value returns an empty list."}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "description": "Hashed ID of one property. Only leases on that property are returned. Default: every property the application can access. Send it once per request."}, {"in": "query", "name": "from_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "Only leases whose start date is on or after this date. Format YYYY-MM-DD. Default: none. With status=future, leases that start after today are always included."}, {"in": "query", "name": "to_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "Only leases whose start date is on or before this date. Format YYYY-MM-DD. Requires from_date. Default: today when from_date is sent."}, {"in": "query", "name": "concise", "required": false, "schema": {"type": "boolean"}, "description": "Send concise=true to get the concise item shape (see the 200 response) and larger pages. Any value, including false, switches it on. Default: not sent, full items."}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer", "default": 100}, "description": "Number of leases to return. Default: 100, or 200 with concise. Values above 100 are returned as 100; with concise, values above 10000 are returned as 10000. 0, a negative number or a value that is not a number returns 20."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer", "default": 0}, "description": "Number of leases to skip before the first one returned. Default: 0. A negative number or a value that is not a number is treated as 0."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all leases", "operationId": "getAllLeases", "description": "Lists the company's finalized leases, newest start date first. Each item has the lease's unit, dates, rent, balances, standing, open invoices, tenants and discounts. Use `status` to pick active, ended (inactive), future or all leases, and `property_id` to limit the list to one property.\n\nWith `concise`, each item is a short summary (IDs, dates, rent, paid-through date, autopay and tenant IDs) and pages can be much larger.\n\nResults are paged with `limit` and `offset`. `paging.total` is the number of leases that match the request. To get the next page, send the same request with `offset` increased by `limit`.\n\n**Cost:** Heavy. About 1 to 5 seconds and up to 300 KB for a page of 100 leases. With `concise`, about 1 second and up to 100 KB for a page of 200.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"oneOf": [{"type": "object", "title": "Full items (default)", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string", "format": "date", "description": "Lease start date."}, "end_date": {"type": "string", "nullable": true, "description": "Lease end date. Null while the lease is open."}, "bill_day": {"type": "integer", "description": "Day of the month the lease is billed."}, "notes": {"type": "string", "nullable": true}, "terms": {"type": "string", "nullable": true}, "rent": {"type": "number", "description": "Current monthly rent."}, "sb_709_max_rent": {"type": "number", "nullable": true}, "status": {"type": "integer", "description": "Lease record status. Only finalized leases (1) are returned."}, "send_invoice": {"type": "integer"}, "last_payment_date": {"type": "string", "description": "Date when the most recent payment was made for the given lease.", "nullable": true}, "security_deposit": {"type": "number"}, "monthly": {"type": "number"}, "code": {"type": "string", "nullable": true}, "balance": {"type": "number", "description": "Total balance due till yesterday"}, "open_balance": {"type": "number", "description": "Total balance due till today"}, "decline_insurance": {"type": "integer"}, "moved_out": {"type": "string", "nullable": true, "description": "Move-out date. Null while the lease is open."}, "rent_paid_through": {"type": "string", "nullable": true, "description": "Last day covered by the rent paid so far."}, "lease_standing_id": {"type": "string", "nullable": true}, "insurance_exp_month": {"type": "integer", "nullable": true}, "insurance_exp_year": {"type": "string", "nullable": true}, "move_in_rent": {"type": "number", "description": "Rent at move-in."}, "total_rent_raises": {"type": "integer", "description": "Number of rent raises since move-in."}, "last_rent_raise": {"type": "string", "nullable": true, "description": "Date of the most recent rent raise."}, "future_rent_raise": {"type": "string", "nullable": true, "description": "Date of the next scheduled rent raise."}, "future_rent_raise_amount": {"type": "number", "nullable": true, "description": "Rent after the next scheduled rent raise."}, "Standing": {"type": "object", "properties": {"name": {"type": "string"}}}, "auction_status": {"type": "string", "nullable": true}, "OpenInvoices": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the invoice. Use in: Get a invoice (GET /v2/invoices/{invoice_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease the invoice belongs to."}, "number": {"type": "string"}, "date": {"type": "string"}, "due": {"type": "string"}, "discounts": {"type": "number"}, "sub_total": {"type": "number"}, "total_tax": {"type": "number"}, "total_due": {"type": "number"}, "total_payments": {"type": "number"}, "balance": {"type": "number"}, "Payments": {"type": "array", "items": {"type": "object"}, "description": "Payments applied to the invoice."}}}, "description": "Invoices with a balance due."}, "Unit": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "price": {"type": "number"}, "label": {"type": "string"}, "number": {"type": "string"}, "type": {"type": "string", "nullable": true}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}}}, "Metrics": {"type": "object", "properties": {"lifetime_payments": {"type": "number"}, "paid_through_date": {"type": "string", "nullable": true}, "prepaid_balance": {"type": "number"}, "prepaid_balance_net": {"type": "number", "description": "Real cash-backed prepaid balance on future invoices. Same as prepaid_balance but excludes non-cash credits such as Free Coverage Credits, credit-type payments, and adjustments."}, "has_autopay": {"type": "boolean"}}}, "is_transferred": {"type": "integer", "format": "int32", "enum": [0, 1], "description": "1 when this lease was created by a space transfer, otherwise 0"}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the tenant record on this lease."}, "contact_id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string"}, "sort": {"type": "integer"}, "created_at": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "salutation": {"type": "string", "nullable": true}, "first": {"type": "string"}, "middle": {"type": "string", "nullable": true}, "last": {"type": "string"}, "suffix": {"type": "string", "nullable": true}, "email": {"type": "string"}, "company": {"type": "string", "nullable": true}, "dob": {"type": "string", "nullable": true, "description": "Date of birth, masked: only the year is returned."}, "ssn": {"type": "string", "nullable": true, "description": "Social security number, masked: returned as asterisks."}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true, "description": "Driver license number, masked except the last 4 characters."}, "source": {"type": "string", "nullable": true}, "status": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "primary": {"type": "number"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}}}}}}}}, "description": "Tenants on the lease."}, "CreatedBy": {"type": "object", "properties": {"id": {"type": "string"}, "salutation": {"type": "string", "nullable": true}, "first": {"type": "string"}, "middle": {"type": "string", "nullable": true}, "last": {"type": "string"}, "suffix": {"type": "string", "nullable": true}, "email": {"type": "string", "nullable": true}, "company": {"type": "string", "nullable": true}, "dob": {"type": "string", "nullable": true}, "ssn": {"type": "string", "nullable": true}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true}, "active_military": {"type": "integer"}, "military_branch": {"type": "string", "nullable": true}, "source": {"type": "string", "nullable": true}, "status": {"type": "string"}}, "description": "Staff user who created the lease. An empty object when not recorded."}, "Discounts": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "promotion_id": {"type": "string", "description": "Hashed ID of the promotion. Use in: Get promotion details (GET /promotions/{promotion_id})."}, "coupon_id": {"type": "string", "nullable": true}, "start": {"type": "string"}, "end": {"type": "string", "nullable": true}, "lease_id": {"type": "string"}, "company_id": {"type": "string", "nullable": true}, "value": {"type": "number"}, "type": {"type": "string"}, "pretax": {"type": "number"}, "msg": {"type": "string"}, "Promotion": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "label": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "months": {"type": "integer", "nullable": true}, "offset": {"type": "integer"}, "sort": {"type": "number"}, "pretax": {"type": "number"}, "active": {"type": "number"}, "public": {"type": "number"}, "required_months": {"type": "integer", "nullable": true}, "days_threshold": {"type": "integer"}, "consecutive_pay": {"type": "integer"}, "enable": {"type": "number"}, "active_period": {"type": "string"}, "start_date": {"type": "string", "nullable": true}, "end_date": {"type": "string", "nullable": true}, "created_by": {"type": "string"}, "created_at": {"type": "string"}, "round": {"type": "string", "nullable": true}}}, "round": {"type": "string", "nullable": true}}}, "description": "Discounts and promotions applied to the lease."}}}, "description": "The leases, newest start date first."}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of leases in this page."}, "total": {"type": "integer", "description": "Number of leases that match the request."}, "num_pages": {"type": "integer", "description": "Number of pages at this page size."}, "next": {"type": "string", "nullable": true}, "prev": {"type": "string", "nullable": true}}}}}, {"type": "object", "title": "Concise items (concise sent)", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string", "format": "date", "description": "Lease start date"}, "end_date": {"type": "string", "description": "Lease end date", "nullable": true}, "rent": {"type": "number", "description": "Rent Amount"}, "has_autopay": {"type": "integer", "description": "Autopay enabled (1-enabled, 0-disabled)"}, "paid_through_date": {"type": "string", "format": "date", "description": "The date to which the payment has been made", "nullable": true}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "last_rent_raise": {"type": "string", "description": "Previous rent raise date", "nullable": true}, "reservation_date": {"type": "string", "format": "date", "description": "Reservation date", "nullable": true}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}}}}, "is_transferred": {"type": "integer", "enum": [0, 1], "description": "1 when this lease was created by a space transfer, otherwise 0"}, "transferred_from": {"type": "string", "nullable": true, "description": "Identifier of the space the lease was transferred from, null when the lease was not created by a transfer"}, "future_rent_raise": {"type": "string", "description": "Future rent raise date", "nullable": true}, "future_rent_raise_amount": {"type": "number", "description": "Future rent raise amount", "nullable": true}}}, "description": "The leases, newest start date first."}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of leases in this page."}, "total": {"type": "integer", "description": "Number of leases that match the request."}, "num_pages": {"type": "integer", "description": "Number of pages at this page size."}, "next": {"type": "string", "nullable": true}, "prev": {"type": "string", "nullable": true}}}}}]}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"missing_from_date": {"summary": "to_date sent without from_date", "value": {"status": 400, "data": {}, "msg": "Required from date (YYYY-MM-DD)", "actual_cause": "Required from date (YYYY-MM-DD)", "message": ""}}, "invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The application cannot access the property.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"not_authorized": {"summary": "property_id is a property the application cannot access", "value": {"status": 403, "data": {}, "msg": "Not authorized", "actual_cause": "Not authorized", "message": ""}}}}}}, "404": {"description": "No property has that ID.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"property_not_found": {"summary": "property_id is a valid ID but not a property", "value": {"status": 404, "data": {}, "msg": "Property not found.", "actual_cause": "Property not found.", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}": {"delete": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Delete a lease", "description": "Delete an existing lease associated with the company.\n", "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}, "get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get details about a lease", "operationId": "getLeaseDetails", "description": "Returns one lease with its unit, tenants, balances, standing, open invoices, discounts, delinquency and rent management details. Pending leases are returned too.\n\n**Cost:** Medium. About 0.3 to 1 second and up to 10 KB per call; several seconds when the lease has many open invoices. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"lease": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string", "description": "Lease start date.", "format": "date"}, "end_date": {"type": "string", "nullable": true, "description": "Lease end date. Null while the lease is open."}, "idv_id": {"type": "string", "description": "IDV verification id"}, "bill_day": {"type": "number", "description": "Day of the month the lease is billed."}, "notes": {"type": "string", "nullable": true}, "terms": {"type": "string", "nullable": true}, "rent": {"type": "number", "description": "Current monthly rent."}, "status": {"type": "number", "description": "Lease record status: 1 for a finalized lease, 2 for a pending lease."}, "send_invoice": {"type": "number"}, "security_deposit": {"type": "number", "nullable": true}, "monthly": {"type": "number"}, "code": {"type": "string", "nullable": true}, "balance": {"type": "number"}, "open_balance": {"type": "number"}, "decline_insurance": {"type": "number"}, "moved_out": {"type": "string", "nullable": true, "description": "Move-out date. Null while the lease is open."}, "rent_paid_through": {"type": "string", "nullable": true}, "lease_standing_id": {"type": "string"}, "insurance_exp_month": {"type": "integer", "nullable": true}, "insurance_exp_year": {"type": "string", "nullable": true}, "is_multi_space": {"type": "number"}, "Standing": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "sort": {"type": "integer"}, "type": {"type": "string"}, "status": {"type": "number"}, "color": {"type": "string"}, "overlock": {"type": "integer"}, "deny_access": {"type": "integer"}}}, "auction_status": {"type": "string", "nullable": true}, "OpenInvoices": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the invoice. Use in: Get a invoice (GET /v2/invoices/{invoice_id})."}, "lease_id": {"type": "string"}, "number": {"type": "string"}, "date": {"type": "string"}, "due": {"type": "string"}, "discounts": {"type": "number"}, "sub_total": {"type": "number"}, "total_tax": {"type": "number"}, "total_due": {"type": "number"}, "total_payments": {"type": "number"}, "balance": {"type": "number"}, "Payments": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "invoice_id": {"type": "string"}, "payment_id": {"type": "string", "description": "Hashed ID of the payment. Use in: Get a payment details (GET /payments/{payment_id})."}, "amount": {"type": "number"}, "date": {"type": "string"}, "qb_id": {"type": "string"}, "created": {"type": "string"}, "modified": {"type": "string"}, "Payment": {"type": "object", "properties": {"id": {"type": "string"}, "payment_methods_id": {"type": "string", "nullable": true}, "lease_id": {"type": "string", "nullable": true}, "contact_id": {"type": "string"}, "property_id": {"type": "string"}, "amount": {"type": "number"}, "amount_tendered": {"type": "number", "nullable": true}, "transaction_id": {"type": "string", "nullable": true}, "auth_code": {"type": "string"}, "applied": {"type": "integer"}, "date": {"type": "string"}, "number": {"type": "string"}, "ref_name": {"type": "string"}, "source": {"type": "string"}, "method": {"type": "string"}, "sub_method": {"type": "string"}, "qb_id": {"type": "string"}, "notes": {"type": "string", "nullable": true}, "created": {"type": "string"}, "credit_type": {"type": "string"}, "status": {"type": "number"}, "status_desc": {"type": "string", "nullable": true}, "accepted_by": {"type": "string"}, "amt_remaining": {"type": "number"}, "message": {"type": "string"}, "effective_date": {"type": "string"}, "payment_method_type_id": {"type": "string", "nullable": true}}}}}}}}, "description": "Invoices with a balance due."}, "Unit": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "price": {"type": "number"}, "label": {"type": "string"}, "number": {"type": "string"}, "type": {"type": "string"}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}}}, "Metrics": {"type": "object", "properties": {"lifetime_payments": {"type": "number"}, "paid_through_date": {"type": "string", "nullable": true}, "paid_to_date": {"type": "string"}, "prepaid_balance": {"type": "number"}, "prepaid_balance_net": {"type": "number", "description": "Real cash-backed prepaid balance on future invoices. Same as prepaid_balance but excludes non-cash credits such as Free Coverage Credits, credit-type payments, and adjustments."}, "has_autopay": {"type": "boolean"}}}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string"}, "sort": {"type": "number"}, "created_at": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "salutation": {"type": "string", "nullable": true}, "first": {"type": "string"}, "middle": {"type": "string", "nullable": true}, "last": {"type": "string"}, "suffix": {"type": "string", "nullable": true}, "email": {"type": "string"}, "company": {"type": "string", "nullable": true}, "dob": {"type": "string", "nullable": true, "description": "Date of birth, masked: only the year is returned."}, "ssn": {"type": "string", "nullable": true, "description": "Social security number, masked: returned as asterisks."}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true, "description": "Driver license number, masked except the last 4 characters."}, "source": {"type": "string", "nullable": true}, "status": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}}}}}}}}, "description": "Tenants on the lease."}, "Discounts": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "promotion_id": {"type": "string", "description": "Hashed ID of the promotion. Use in: Get promotion details (GET /promotions/{promotion_id})."}, "coupon_id": {"type": "string"}, "start": {"type": "string"}, "end": {"type": "string", "nullable": true}, "lease_id": {"type": "string"}, "company_id": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "pretax": {"type": "number"}, "msg": {"type": "string"}, "Promotion": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "label": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "months": {"type": "number", "nullable": true}, "offset": {"type": "integer"}, "sort": {"type": "number"}, "pretax": {"type": "number"}, "active": {"type": "number"}, "public": {"type": "number"}, "required_months": {"type": "number", "nullable": true}, "days_threshold": {"type": "integer"}, "consecutive_pay": {"type": "integer"}, "enable": {"type": "number"}, "active_period": {"type": "string"}, "start_date": {"type": "string", "nullable": true}, "end_date": {"type": "string", "nullable": true}, "created_by": {"type": "string"}, "created_at": {"type": "string"}, "round": {"type": "string", "nullable": true}}}, "round": {"type": "string", "nullable": true}}}, "description": "Discounts and promotions applied to the lease."}, "rent_management": {"type": "object", "properties": {"rent_plan_id": {"type": "string"}, "rent_plan_status": {"type": "string", "enum": ["active", "exempt"]}, "rent_change_id": {"type": "string", "nullable": true}, "next_rent_change": {"type": "object", "properties": {"schedule_rent": {"type": "number"}, "rent_change": {"type": "number"}, "schedule_date": {"type": "string"}}, "nullable": true}, "last_rent_change": {"type": "object", "properties": {"rent_change": {"type": "number"}, "schedule_date": {"type": "string"}}, "nullable": true}}}, "transferred_from": {"type": "string", "nullable": true}, "days_late": {"type": "number"}, "rent_days_late": {"type": "number"}, "Delinquency": {"type": "object", "properties": {"id": {"type": "string", "nullable": true}, "lease_id": {"type": "string"}, "start_date": {"type": "string", "nullable": true}, "status": {"type": "string"}, "end_date": {"type": "integer", "nullable": true}, "created": {"type": "string", "nullable": true}, "reason": {"type": "string"}, "description": {"type": "string"}, "Lease": {"type": "object"}, "Actions": {"type": "array"}, "Timeline": {"type": "object"}, "Pauses": {"type": "array"}, "pause_days": {"type": "number"}, "Stages": {"type": "array"}, "is_property_level_paused": {"type": "boolean"}, "paid_to_date": {"type": "string", "nullable": true}, "refund_id": {"type": "string"}, "original_start_date": {"type": "string", "nullable": true}, "anchor_stage": {"type": "object"}, "delinquency_days_late": {"type": "integer"}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "No lease has that ID.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_lease": {"summary": "lease_id is a valid ID but not a lease", "value": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}, "lease_not_found": {"summary": "lease_id is a lease with status 0, for example the lease of a reservation", "value": {"status": 404, "data": {}, "msg": "Lease not found", "actual_cause": "Lease not found", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/recurring-transactions/": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer", "default": 100}, "description": "Number of transactions to return. Default: 100. Values above 10000 are returned as 10000. 0, a negative number or a value that is not a number returns 20."}, {"in": "query", "name": "status", "required": false, "schema": {"type": "string", "enum": ["active", "inactive", "future", "all"], "default": "active"}, "description": "Which leases to include, by lease period: active (started and not ended), inactive (ended), future (not started yet), all. Default: active. Any other value is treated as active."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer", "default": 0}, "description": "Number of transactions to skip before the first one returned. Default: 0. A negative number or a value that is not a number is treated as 0."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all recurring transactions", "operationId": "getRecurringTransactions", "description": "Lists the invoice lines of recurring services (rent, coverage and other recurring charges) on the company's finalized leases, with the promotions applied to each line. By default only active leases are included; use `status` for ended, future or all leases.\n\nResults are paged with `limit` and `offset`. `paging.total` is the number of transactions that match the request. To get the next page, send the same request with `offset` increased by `limit`.\n\n**Cost:** Heavy. About 2 to 3 seconds and up to 30 KB for a page of 100 transactions.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"transactions": {"type": "array", "description": "Invoice lines of recurring services, grouped by lease.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the invoice line."}, "invoice_id": {"type": "string", "description": "Hashed ID of the invoice. Use in: Get a invoice (GET /v2/invoices/{invoice_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "type": {"type": "string", "description": "Type of the recurring service: lease or insurance."}, "price": {"type": "number", "description": "Monthly price of the service."}, "amount": {"type": "number", "description": "Amount charged on this invoice line.", "nullable": true}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string", "format": "date", "description": "Start date of the invoice line"}, "end_date": {"type": "string", "format": "date", "description": "End date of the invoice line"}, "promotions": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the discount line."}, "invoice_line_id": {"type": "string", "description": "Invoice line ID"}, "promotion_id": {"type": "string", "description": "Hashed ID of the promotion. Use in: Get promotion details (GET /promotions/{promotion_id})."}, "description": {"type": "string", "description": "Description"}, "label": {"type": "string", "description": "Label"}, "amount": {"type": "number", "description": "Discount amount"}}}, "description": "Promotions applied to this invoice line."}}}}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "format": "int32", "description": "Number of transactions in this page."}, "total": {"type": "integer", "format": "int32", "description": "Number of transactions that match the request."}, "num_pages": {"type": "integer", "format": "int32", "description": "Number of pages at this page size."}, "next": {"type": "string", "description": "Link to the next page. Null on the last page.", "nullable": true}, "prev": {"type": "string", "description": "Link to the previous page. Null on the first page.", "nullable": true}}}}}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "format": "int32", "description": "Number of transactions in this page."}, "total": {"type": "integer", "format": "int32", "description": "Number of transactions that match the request."}, "num_pages": {"type": "integer", "format": "int32", "description": "Number of pages at this page size."}, "next": {"type": "string", "description": "Link to the next page. Null on the last page.", "nullable": true}, "prev": {"type": "string", "description": "Link to the previous page. Null on the first page.", "nullable": true}}, "description": "Same paging object as data.paging."}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/move-out": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer", "default": 20}, "description": "Number of leases to return. Default: 20, or 100 with concise. Values above 100 are returned as 100; with concise, values above 10000 are returned as 10000. 0, a negative number or a value that is not a number returns 20."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer", "default": 0}, "description": "Number of leases to skip before the first one returned. Default: 0. A negative number or a value that is not a number is treated as 0."}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "description": "Hashed ID of a property. Only move-outs on that property are returned. Send it more than once for several properties. Default: every property the application can access."}, {"in": "query", "name": "from_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "Only leases whose end date is on or after this date. Format YYYY-MM-DD. Without to_date or days, the window ends today. Default: none."}, {"in": "query", "name": "to_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "Only leases whose end date is on or before this date. Format YYYY-MM-DD. Requires from_date or days. Default: none."}, {"in": "query", "name": "days", "required": false, "schema": {"type": "integer"}, "description": "Length of the window in days. Alone: the last `days` days up to today. With from_date: from from_date to from_date plus `days`. With to_date: the `days` days up to to_date. Ignored when from_date and to_date are both sent. Default: none."}, {"in": "query", "name": "concise", "required": false, "schema": {"type": "boolean"}, "description": "Send concise=true to get the concise item shape (see the 200 response) and larger pages. Any value, including false, switches it on. Default: not sent, full items."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all moved out leases", "operationId": "getMovedOutLeases", "description": "Lists the company's leases that ended (moved out), latest end date first. Without date parameters it returns the leases that end today. Use from_date, to_date and days to pick a window, and property_id to limit the properties.\n\nWith `concise`, each item is a short summary (IDs, dates, rent, paid-through date, autopay and tenant IDs) and pages can be much larger.\n\nResults are paged with `limit` and `offset`. `paging.total` is the number of leases that match the request. To get the next page, send the same request with `offset` increased by `limit`.\n\n**Cost:** Heavy. About 1.5 to 3 seconds and up to 60 KB for a page of 20 leases. With `concise`, about 1 second and up to 30 KB for a page of 100.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"oneOf": [{"type": "object", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string"}, "end_date": {"type": "string", "description": "Lease end date (the move-out date)."}, "bill_day": {"type": "number"}, "notes": {"type": "string", "nullable": true}, "terms": {"type": "string", "nullable": true}, "rent": {"type": "number"}, "status": {"type": "integer"}, "send_invoice": {"type": "number"}, "last_payment_date": {"type": "string", "description": "Date when the most recent payment was made for the given lease."}, "security_deposit": {"type": "number", "nullable": true}, "monthly": {"type": "number"}, "code": {"type": "string", "nullable": true}, "balance": {"type": "number", "description": "Total balance due till yesterday"}, "open_balance": {"type": "number", "description": "Total balance due till today"}, "decline_insurance": {"type": "integer"}, "moved_out": {"type": "string", "nullable": true}, "rent_paid_through": {"type": "string", "nullable": true}, "lease_standing_id": {"type": "string"}, "insurance_exp_month": {"type": "number", "nullable": true}, "insurance_exp_year": {"type": "string", "nullable": true}, "move_in_rent": {"type": "number"}, "total_rent_raises": {"type": "number"}, "last_rent_raise": {"type": "string", "nullable": true}, "Standing": {"type": "object", "properties": {"name": {"type": "string"}}}, "auction_status": {"type": "string", "nullable": true}, "OpenInvoices": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the invoice. Use in: Get a invoice (GET /v2/invoices/{invoice_id})."}, "lease_id": {"type": "string"}, "number": {"type": "string"}, "date": {"type": "string"}, "due": {"type": "string"}, "discounts": {"type": "number"}, "sub_total": {"type": "number"}, "total_tax": {"type": "number"}, "total_due": {"type": "number"}, "total_payments": {"type": "number"}, "balance": {"type": "number"}, "Payments": {"type": "array", "items": {"type": "object"}}}}}, "Unit": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "price": {"type": "number"}, "label": {"type": "string"}, "number": {"type": "string"}, "type": {"type": "string"}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}}}, "Metrics": {"type": "object", "properties": {"lifetime_payments": {"type": "number"}, "paid_through_date": {"type": "string", "nullable": true}, "prepaid_balance": {"type": "number"}, "prepaid_balance_net": {"type": "number", "description": "Real cash-backed prepaid balance on future invoices. Same as prepaid_balance but excludes non-cash credits such as Free Coverage Credits, credit-type payments, and adjustments."}, "has_autopay": {"type": "boolean"}}}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string"}, "sort": {"type": "number"}, "created_at": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "salutation": {"type": "string", "nullable": true}, "first": {"type": "string"}, "middle": {"type": "string", "nullable": true}, "last": {"type": "string"}, "suffix": {"type": "string", "nullable": true}, "email": {"type": "string"}, "company": {"type": "string", "nullable": true}, "dob": {"type": "string", "nullable": true, "description": "Date of birth, masked: only the year is returned."}, "ssn": {"type": "string", "description": "Social security number, masked: returned as asterisks."}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true, "description": "Driver license number, masked except the last 4 characters."}, "source": {"type": "string", "nullable": true}, "status": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "primary": {"type": "number"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}}}}}}}}}, "CreatedBy": {"type": "object", "properties": {"id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "suffix": {"type": "string"}, "email": {"type": "string", "nullable": true}, "company": {"type": "string"}, "dob": {"type": "string"}, "ssn": {"type": "string"}, "gender": {"type": "string"}, "driver_license": {"type": "string"}, "active_military": {"type": "integer"}, "military_branch": {"type": "string"}, "source": {"type": "string"}, "status": {"type": "string"}}}, "Discounts": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "promotion_id": {"type": "string", "description": "Hashed ID of the promotion. Use in: Get promotion details (GET /promotions/{promotion_id})."}, "coupon_id": {"type": "string"}, "start": {"type": "string"}, "end": {"type": "string"}, "lease_id": {"type": "string"}, "company_id": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "pretax": {"type": "number"}, "msg": {"type": "string"}, "Promotion": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "label": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "months": {"type": "number", "nullable": true}, "offset": {"type": "integer"}, "sort": {"type": "number"}, "pretax": {"type": "number"}, "active": {"type": "number"}, "public": {"type": "number"}, "required_months": {"type": "number", "nullable": true}, "days_threshold": {"type": "integer"}, "consecutive_pay": {"type": "integer"}, "enable": {"type": "number"}, "active_period": {"type": "string"}, "start_date": {"type": "string", "nullable": true}, "end_date": {"type": "string", "nullable": true}, "created_by": {"type": "string"}, "created_at": {"type": "string"}, "round": {"type": "string", "nullable": true}}}, "round": {"type": "string", "nullable": true}}}}}}, "description": "The moved-out leases, latest end date first."}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of leases in this page."}, "total": {"type": "integer", "description": "Number of leases that match the request."}, "num_pages": {"type": "integer", "description": "Number of pages at this page size."}, "next": {"type": "string", "nullable": true}, "prev": {"type": "string", "nullable": true}}}}, "title": "Full items (default)"}, {"type": "object", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string", "format": "date", "description": "Lease start date"}, "end_date": {"type": "string", "description": "Lease end date (the move-out date).", "nullable": true}, "rent": {"type": "number", "description": "Rent Amount"}, "has_autopay": {"type": "number", "description": "Autopay enabled (1-enabled, 0-disabled)"}, "paid_through_date": {"type": "string", "format": "date", "description": "The date to which the payment has been made", "nullable": true}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "last_rent_raise": {"type": "string", "description": "Previous rent raise date", "nullable": true}, "reservation_date": {"type": "string", "format": "date", "description": "Reservation date", "nullable": true}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}}}}}}, "description": "The moved-out leases, latest end date first."}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of leases in this page."}, "total": {"type": "integer", "description": "Number of leases that match the request."}, "num_pages": {"type": "integer", "description": "Number of pages at this page size."}, "next": {"type": "string", "nullable": true}, "prev": {"type": "string", "nullable": true}}}}, "title": "Concise items (concise sent)"}]}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"to_date_alone": {"summary": "to_date sent without from_date or days", "value": {"status": 400, "data": {}, "msg": "At a time you can only filter either from date or days with to_date", "actual_cause": "At a time you can only filter either from date or days with to_date", "message": ""}}, "invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The application cannot access the property.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"forbidden": {"summary": "property_id is not a property the application can access", "value": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "actual_cause": "Forbidden: You do not have access to access this resource.", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/ledger": {"get": {"tags": ["Leases"], "operationId": "getLeaseLedger", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get ledger details for the lease", "description": "Returns the ledger of one lease: every invoice and every payment or credit applied to it, newest first, with the charge, the payment and the balance of each row.\n\n**Cost:** Light. About 0.3 to 0.9 seconds and up to 20 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "description": "Gateway status, `success` on a 200."}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/all-insurances": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "operationId": "getAllLeaseInsurances", "summary": "Get all insurances for a lease", "description": "Get every insurance service the lease has had, grouped into `past`, `present` and `future` by each service's start and end dates against the property's current local date.\n\n**Cost:** Light. About 0.3 seconds and up to 3 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"insurances": {"type": "object", "description": "Insurance services grouped by when they apply.", "properties": {"past": {"type": "array", "description": "Services that started and ended before the property's current date.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the insurance service (this plan's line on the lease)."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "product_id": {"type": "string", "description": "Hashed ID of the insurance product behind the service."}, "property_bill_id": {"type": "string"}, "price": {"type": "number", "description": "Monthly premium charged for the service."}, "start_date": {"type": "string", "description": "First day of coverage, YYYY-MM-DD."}, "end_date": {"type": "string", "nullable": true, "description": "Last day of coverage, YYYY-MM-DD. Null while the service is open-ended."}, "name": {"type": "string", "description": "Plan name."}, "description": {"type": "string"}, "qty": {"type": "integer"}, "recurring": {"type": "integer", "description": "1 when the premium is billed every period."}, "prorate": {"type": "integer", "description": "1 when the first period is prorated."}, "prorate_out": {"type": "integer", "description": "1 when the last period is prorated."}, "service_type": {"type": "string", "description": "Always `insurance` here."}, "taxable": {"type": "integer"}, "amount": {"type": "number"}, "complimentary_amount": {"type": "number", "description": "Part of the premium covered by the company's free coverage, 0 when none."}, "last_billed": {"type": "string", "description": "Last day the service has been billed through, YYYY-MM-DD."}, "servicePeriodStart": {"type": "string"}, "servicePeriodEnd": {"type": "string"}, "Product": {"type": "object", "description": "The insurance product behind the service.", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "price": {"type": "number"}, "type": {"type": "string"}}}}}}, "present": {"type": "array", "description": "Services covering the property's current date. Same fields as `past` items.", "items": {"type": "object"}}, "future": {"type": "array", "description": "Services that start after the property's current date. Same fields as `past` items.", "items": {"type": "object"}}}}}}, "message": {"type": "string", "example": ""}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"present_free": {"summary": "Lease with one current plan, partly paid by free coverage (trimmed)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"insurances": {"past": [], "present": [{"id": "nB94x9Eurj", "lease_id": "1jJ5QMLUk2", "product_id": "m2Oxq4UejJ", "property_bill_id": null, "price": 10, "start_date": "2026-10-03", "end_date": null, "name": "Storage Protection Plan", "description": null, "qty": 1, "recurring": 1, "prorate": 1, "prorate_out": 0, "service_type": "insurance", "taxable": 0, "amount": 0, "complimentary_amount": 5, "last_billed": "2026-11-02", "servicePeriodStart": "", "servicePeriodEnd": "", "Product": {"id": "m2Oxq4UejJ", "name": "Storage Protection Plan", "description": "$2000 coverage / $10.00 monthly", "price": null, "type": "product"}}], "future": []}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease (for example a unit, contact or property ID).", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/insurance-start-date": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "operationId": "getInsuranceStartDate", "summary": "Get the insurance start date", "description": "Get the date a new insurance plan would start on this lease, as `YYYY-MM-DD`. It is the day after the latest billed-through date (`last_billed`) of any insurance service on the lease. When the lease has never been billed for insurance it is the day after the property's current local date. Use it as the start date when adding insurance to the lease.\n\n**Cost:** Light. About 0.3 seconds and 0.2 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "string", "description": "The insurance start date, YYYY-MM-DD.", "example": "2026-11-03"}, "message": {"type": "string", "example": ""}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"billed": {"summary": "Lease whose insurance is billed through 2026-11-02", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": "2026-11-03", "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease (for example a unit, contact or property ID).", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/advance-pay": {"get": {"tags": ["Leases"], "operationId": "getAdvancePayDetails", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}, {"in": "query", "name": "billed_months", "required": false, "schema": {"type": "integer"}, "description": "Number of upcoming billing periods to preview, 1 to 12. Values above 12 are returned as 12. Default: 0, which returns no preview invoices.", "example": 1}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get advance pay details", "description": "Previews the next rent invoices of a lease, one per billing period, without creating them: each preview invoice carries its lines, taxes, discounts and totals. Nothing is saved. Use it to show a tenant what paying ahead would cost.\n\n**Cost:** Heavy. About 0.3 to 1 second and up to 150 KB per call; several seconds and a few MB when the lease has unpaid invoices. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "description": "Gateway status, `success` on a 200."}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"invoices": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "property_id": {"type": "string"}, "contact_id": {"type": "string"}, "number": {"type": "string"}, "date": {"type": "string"}, "due": {"type": "string"}, "paid": {"type": "integer"}, "qboPromise": {"type": "object", "properties": {}}, "qb_id": {"type": "string"}, "type": {"type": "string"}, "status": {"type": "number"}, "period_start": {"type": "string"}, "period_end": {"type": "string"}, "total_amt": {"type": "integer"}, "total_tax": {"type": "number"}, "total_discounts": {"type": "integer"}, "balance": {"type": "number"}, "reissued_from": {"type": "string"}, "adjusted_to": {"type": "string"}, "adjusted_from": {"type": "string"}, "msg": {"type": "string"}, "InvoiceLines": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "invoice_id": {"type": "string"}, "product_id": {"type": "string"}, "discount_id": {"type": "string"}, "lease_id": {"type": "string"}, "property_bill_id": {"type": "string"}, "qty": {"type": "number"}, "cost": {"type": "number"}, "date": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "service_id": {"type": "string"}, "description": {"type": "string", "nullable": true}, "qb_id": {"type": "string"}, "total_tax": {"type": "integer"}, "total_discounts": {"type": "integer"}, "PropertyBill": {"type": "object", "properties": {}}, "Unit": {"type": "object", "properties": {}}, "Lease": {"type": "object", "properties": {}}, "Discount": {"type": "object", "properties": {}}, "Service": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "product_id": {"type": "string"}, "property_bill_id": {"type": "string"}, "price": {"type": "number"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string", "nullable": true}, "qty": {"type": "number"}, "taxable": {"type": "integer"}, "recurring": {"type": "number"}, "prorate": {"type": "number"}, "service_type": {"type": "string"}, "status": {"type": "number"}, "created": {"type": "string"}, "prorate_out": {"type": "number"}}}, "Product": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "vendor_id": {"type": "string"}, "product_category_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string", "nullable": true}, "status": {"type": "number"}, "sku": {"type": "string"}, "price": {"type": "integer", "nullable": true}, "type": {"type": "string"}, "taxable": {"type": "integer"}, "taxrate": {"type": "string"}, "qb_income_account": {"type": "string"}, "default_type": {"type": "string"}, "qb_id": {"type": "string"}, "prorate": {"type": "integer"}, "prorate_out": {"type": "integer"}, "recurring": {"type": "integer"}, "has_inventory": {"type": "integer", "nullable": true}, "amount_type": {"type": "string"}, "category_type": {"type": "string"}, "income_account_id": {"type": "string"}, "expense_account_id": {"type": "string"}, "concession_account_id": {"type": "string"}, "liability_account_id": {"type": "string"}}}, "TaxLines": {"type": "array", "items": {"type": "string"}}, "DiscountLines": {"type": "array", "items": {"type": "string"}}, "DiscountTotals": {"type": "array", "items": {"type": "string"}}, "Credit": {"type": "object", "properties": {}}, "total": {"type": "number"}, "qboPromise": {"type": "object", "properties": {}}, "msg": {"type": "string"}, "totalTax": {"type": "number"}, "totalDiscounts": {"type": "integer"}, "subtotal": {"type": "number"}}}}, "Charges": {"type": "array", "items": {"type": "string"}}, "Lease": {"type": "object", "properties": {"id": {"type": "string"}, "unit_id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "create_invoice_day": {"type": "number"}, "notes": {"type": "string"}, "terms": {"type": "string"}, "rent": {"type": "number"}, "status": {"type": "number"}, "token": {"type": "string"}, "achtoken": {"type": "string"}, "send_invoice": {"type": "number"}, "discount_id": {"type": "string"}, "security_deposit": {"type": "integer"}, "monthly": {"type": "number"}, "lease_standing_id": {"type": "string"}, "rent_paid_through": {"type": "string"}, "code": {"type": "string"}, "moved_out": {"type": "string"}, "decline_insurance": {"type": "number"}, "insurance_exp_month": {"type": "string"}, "insurance_exp_year": {"type": "string"}, "rent_change_exempt": {"type": "string"}, "auction_status": {"type": "string", "nullable": true}, "deny_payments": {"type": "integer"}, "created": {"type": "string"}, "Discounts": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "Invoice": {"type": "object", "properties": {}}, "Tenants": {"type": "array", "items": {"type": "string"}}, "Invoices": {"type": "array", "items": {"type": "string"}}, "Payments": {"type": "array", "items": {"type": "string"}}, "PaymentMethods": {"type": "array", "items": {"type": "string"}}, "Checklist": {"type": "array", "items": {"type": "string"}}, "Unit": {"type": "object", "properties": {}}, "msg": {"type": "string"}, "MaintenanceRequests": {"type": "array", "items": {"type": "string"}}, "MaintenanceRequestCount": {"type": "string"}, "Reservation": {"type": "object", "properties": {}}, "Services": {"type": "array", "items": {"type": "string"}}, "ApplicationServices": {"type": "array", "items": {"type": "string"}}, "InsuranceServices": {"type": "array", "items": {"type": "string"}}, "ReservationServices": {"type": "array", "items": {"type": "string"}}, "move_in_costs": {"type": "string"}, "total_rent_due": {"type": "string"}, "balance": {"type": "integer"}, "open_balance": {"type": "integer"}, "OpenInvoices": {"type": "array", "items": {"type": "string"}}, "OpenPayments": {"type": "array", "items": {"type": "string"}}, "PastDue": {"type": "array", "items": {"type": "string"}}, "Ledger": {"type": "array", "items": {"type": "string"}}, "Standing": {"type": "object", "properties": {}}, "Vehicles": {"type": "object", "properties": {}}, "MoveInInvoice": {"type": "object", "properties": {}}, "Transfer": {"type": "string"}, "Lead": {"type": "object", "properties": {}}, "Property": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "description": {"type": "string", "nullable": true}, "status": {"type": "number"}, "name": {"type": "string"}, "access_id": {"type": "string", "nullable": true}, "msg": {"type": "string"}, "gds_id": {"type": "string"}, "utc_offset": {"type": "string"}, "unit_count": {"type": "string"}, "lease_count": {"type": "string"}, "unitCount": {"type": "string"}, "occupancy": {"type": "string"}, "is_day_closed": {"type": "boolean"}, "localCurrentDate": {"type": "string"}, "Assets": {"type": "array", "items": {"type": "string"}}, "Phones": {"type": "array", "items": {"type": "string"}}, "Emails": {"type": "array", "items": {"type": "string"}}, "Units": {"type": "array", "items": {"type": "string"}}, "Hours": {"type": "array", "items": {"type": "string"}}, "Access": {"type": "string"}, "Address": {"type": "object", "properties": {}}, "Images": {"type": "array", "items": {"type": "string"}}, "Application": {"type": "array", "items": {"type": "string"}}, "ApplicationConfig": {"type": "object", "properties": {}}, "Checklist": {"type": "array", "items": {"type": "string"}}, "Connections": {"type": "array", "items": {"type": "string"}}, "Triggers": {"type": "array", "items": {"type": "string"}}, "MaintenanceTypes": {"type": "array", "items": {"type": "string"}}, "MaintenanceExtras": {"type": "array", "items": {"type": "string"}}, "Insurances": {"type": "array", "items": {"type": "string"}}, "Products": {"type": "array", "items": {"type": "string"}}, "TaxRates": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "LeaseTemplates": {"type": "object", "properties": {"storage": {"type": "object", "properties": {}}, "residential": {"type": "object", "properties": {}}, "commercial": {"type": "object", "properties": {}}}}}}, "LeaseAuction": {"type": "object", "properties": {}}, "Uploads": {"type": "array", "items": {"type": "string"}}, "Delinquency": {"type": "object", "properties": {}}, "has_open_invoice": {"type": "boolean"}, "created_by": {"type": "string"}, "auto_pay_after_billing_date": {"type": "integer"}, "current_property_date": {"type": "string"}, "sensitive_info_stored": {"type": "integer"}, "total_rent_raises_count": {"type": "integer"}, "CreatedBy": {"type": "object", "properties": {}}, "last_rent_raise": {"type": "string"}, "last_rent_raise_amount": {"type": "string"}, "future_rent_raise": {"type": "string"}, "future_rent_raise_amount": {"type": "string"}, "move_in_rent": {"type": "string"}, "statuses": {"type": "array", "items": {"type": "string"}}, "advance_rental": {"type": "integer"}}}, "Property": {"type": "object", "properties": {}}, "Contact": {"type": "object", "properties": {}}, "Payments": {"type": "array", "items": {"type": "string"}}, "Unit": {"type": "object", "properties": {}}, "company_id": {"type": "string"}, "discounts": {"type": "integer"}, "total_due": {"type": "number"}, "sub_total": {"type": "number"}, "rent_total": {"type": "number"}, "utilities_total": {"type": "integer"}, "total_payments": {"type": "integer"}, "open_payments": {"type": "integer"}, "void_date": {"type": "string"}, "voided_at": {"type": "string"}, "voided_by_contact_id": {"type": "string"}, "created_by": {"type": "string"}, "apikey_id": {"type": "string"}, "effective_date": {"type": "string"}, "PaymentsToApply": {"type": "array", "items": {"type": "string"}}, "ReissuedFrom": {"type": "object", "properties": {}}, "Company": {"type": "object", "properties": {"id": {"type": "string"}, "gds_owner_id": {"type": "string"}, "name": {"type": "string"}, "firstname": {"type": "string"}, "lastname": {"type": "string"}, "email": {"type": "string"}, "phone": {"type": "string"}, "subdomain": {"type": "string"}, "logo": {"type": "string"}, "msg": {"type": "string"}, "Settings": {"type": "object", "properties": {"authnetLogin": {"type": "string"}, "twilioPhone": {"type": "string"}, "maxAdvanceReservation": {"type": "string"}, "reservationAutoExpire": {"type": "string"}, "forteLogin": {"type": "string"}, "forteKey": {"type": "string"}, "forteOrganizationId": {"type": "string"}, "forteLocationId": {"type": "string"}, "taxRate": {"type": "string"}, "qbOauthToken": {"type": "string"}, "qbOauthTokenSecret": {"type": "string"}, "qbDepositLiability": {"type": "string"}, "qbIncomeAccount": {"type": "string"}, "qbPrepaymentLiability": {"type": "string"}, "qbTaxCode": {"type": "string"}, "qbTokenRenewal": {"type": "string"}, "qbRealmId": {"type": "string"}, "invoiceChargeOffset": {"type": "string"}, "notificationEmails": {"type": "array", "items": {"type": "string"}}, "incomingCalls": {"type": "string"}, "twilioRedirect": {"type": "string"}, "twilioSMSRedirect": {"type": "string"}, "transunionUser": {"type": "string"}, "transunionPassword": {"type": "string"}, "gateAccessCompanyToken": {"type": "string"}}}, "Roles": {"type": "array", "items": {"type": "string"}}, "platform_integration_enabled": {"type": "integer"}}}, "paymentToApplyTotal": {"type": "integer"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/invoices": {"get": {"tags": ["Leases"], "operationId": "getLeaseInvoices", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer"}, "description": "Page size. Default: 50. There is no maximum."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer"}, "description": "Rows to skip. Default: 0."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all invoices for a lease", "description": "Lists the invoices of one lease, newest due date first, with the lease's unit address and number on each row and a count of all invoices on the lease.\n\n**Cost:** Light. About 0.3 to 0.5 seconds and up to 50 KB for a page of 50 invoices.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "description": "Gateway status, `success` on a 200."}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"invoices": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the invoice. Use in: Get a invoice (GET /v2/invoices/{invoice_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "contact_id": {"type": "string", "description": "Hashed ID of the contact billed. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "number": {"type": "string", "description": "Invoice number"}, "paid": {"type": "integer", "format": "int32", "description": "Amount paid"}, "date": {"type": "string", "format": "date"}, "due": {"type": "string", "format": "date", "description": "Due date of the invoice"}, "qb_id": {"type": "string", "format": "nullable"}, "to_send": {"type": "integer", "format": "int32"}, "created_at": {"type": "string", "description": "Created date of the invoice"}, "status": {"type": "integer", "format": "int32", "description": "Status of the invoice. 1 = active, 0 or lower = void."}, "type": {"type": "string", "description": "How the invoice was created: `auto` (billing run), `manual` or `admin`."}, "period_start": {"type": "string"}, "period_end": {"type": "string"}, "subtotal": {"type": "integer", "format": "int32", "description": "Total amount"}, "total_tax": {"type": "number"}, "total_discounts": {"type": "integer", "format": "int32"}, "total_payments": {"type": "number"}, "reissued_from": {"type": "string", "format": "nullable"}, "adjusted_to": {"type": "string", "format": "nullable"}, "adjusted_from": {"type": "string", "format": "nullable"}, "void_date": {"type": "string", "format": "nullable"}, "voided_at": {"type": "string", "format": "nullable"}, "voided_by_contact_id": {"type": "string", "format": "nullable"}, "created_by": {"type": "string", "nullable": true, "description": "Hashed ID of the contact who created the invoice, or null."}, "apikey_id": {"type": "string", "format": "nullable"}, "effective_date": {"type": "string", "format": "date"}, "address": {"type": "string", "description": "Street address of the unit."}, "city": {"type": "string", "description": "Name of the city"}, "state": {"type": "string", "description": "Name of the state"}, "zip": {"type": "string", "description": "ZIP code"}, "unit_number": {"type": "string", "description": "Number of the unit on the lease."}, "balance": {"type": "integer", "format": "int32", "description": "Amount still owed: subtotal plus tax minus discounts minus payments."}, "amount": {"type": "number", "description": "Invoice total before payments: subtotal plus tax minus discounts."}}}}, "pagination": {"type": "object", "properties": {"result_count": {"type": "integer", "format": "int32", "description": "Number of invoices on the lease."}, "num_pages": {"type": "string", "format": "nullable"}, "showing": {"type": "object", "properties": {"from": {"type": "integer", "format": "int32"}, "to": {"type": "integer", "format": "int32"}}, "description": "Rows on this page, as offset and offset plus rows returned."}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/insurance": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "operationId": "getLeaseInsurance", "summary": "Get insurance for a lease", "description": "Get the lease's active insurance and every insurance plan the lease could hold instead: the plans sold for the unit's space type at the property, each priced for this lease as of today. The response also says whether the company offers free coverage for this space type and, when the lease has it, the day that coverage ends.\n\n**Cost:** Medium. About 1 to 3 seconds and about 11 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string", "example": ""}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but matches no lease (for example a unit, contact or property ID).", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "put": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Add/Update insurance for a lease", "description": "Used to add or update insurance for a lease.\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"decline": {"type": "boolean", "description": "If true, declines insurance coverage for this lease", "example": false}, "contact_id": {"type": "string", "description": "Contact ID"}, "dryrun": {"type": "boolean", "description": "If true, returns estimated Service/Invoice without committing changes", "example": false}, "insurance_id": {"type": "string", "description": "Insurance plan ID to apply"}, "is_free_insurance": {"type": "boolean"}, "is_multi_space": {"type": "boolean"}, "property_id": {"type": "string"}, "coverage_amount": {"type": "integer", "description": "Coverage amount used for table-rate premium calculation."}, "serviceEnd": {"type": "string", "description": "Apply change in current billing period or next billing period.", "enum": ["current", "next"]}, "starting_date": {"type": "string", "description": "Service start date (YYYY-MM-DD)."}, "skip_payment": {"type": "boolean", "description": "Skip charging payment while still applying insurance changes."}, "use_credits": {"description": "Credits usage passed from payment flow."}, "partial_payment": {"type": "boolean"}, "leases": {"type": "array", "items": {"type": "string"}}, "auto_pay_leases": {"nullable": true, "oneOf": [{"type": "array", "items": {"type": "string"}}, {"type": "object"}]}, "payment": {"type": "object", "description": "Payment payload used when collecting payment with the insurance update.", "properties": {"id": {"type": "string", "nullable": true}, "property_id": {"type": "string"}, "contact_id": {"type": "string"}, "amount": {"type": "number"}, "payment_method_id": {"type": "string", "nullable": true}, "type": {"type": "string"}, "credit_type": {"type": "string"}, "number": {"type": "string"}, "ref_name": {"type": "string"}, "source": {"type": "string"}, "date": {"type": "string"}, "transaction_id": {"type": "string"}, "amt_remaining": {"type": "string"}, "amount_tendered": {"type": "number"}}}, "paymentMethod": {"type": "object", "nullable": true, "properties": {"device_id": {"type": "string"}}}, "Invoices": {"type": "array", "items": {"type": "object", "properties": {"amount": {"type": "number"}, "balance": {"type": "number"}, "credits_amount_used": {"type": "number"}, "date": {"type": "string"}, "due": {"type": "string"}, "id": {"type": "string"}, "lease_id": {"type": "string"}, "number": {"type": "string"}, "period_end": {"type": "string"}, "period_start": {"type": "string"}}}}}, "required": ["contact_id", "insurance_id", "property_id", "starting_date", "serviceEnd"]}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"Invoice": {"type": "object"}, "payment_id": {"type": "string", "description": "Encoded payment id when payment is created/applied."}, "is_multi_space": {"type": "integer", "description": "Indicates whether the lease was converted/handled as multi-space."}, "msg": {"type": "string", "example": "Insurance has been updated."}, "Service": {"type": "object", "properties": {"amount": {"type": "number"}, "id": {"type": "string"}, "lease_id": {"type": "string"}, "name": {"type": "string"}, "price": {"type": "number"}, "product_id": {"type": "string"}, "qty": {"type": "integer"}, "recurring": {"type": "integer"}, "service_type": {"type": "string"}, "start_date": {"type": "string"}, "taxable": {"type": "integer"}, "Periods": {"type": "string"}, "product_summary": {"type": "string"}, "Insurance": {"type": "object", "properties": {"company_id": {"type": "string"}, "coverage": {"type": "string"}, "default_type": {"type": "string"}, "description": {"type": "string"}, "gl_account_active": {"type": "integer"}, "gl_account_code": {"type": "string"}, "gl_account_name": {"type": "string"}, "id": {"type": "string"}, "income_account_id": {"type": "string"}, "insurance_type": {"type": "string"}, "name": {"type": "string"}, "premium": {"type": "number"}, "premium_type": {"type": "string"}, "premium_value": {"type": "number"}, "product_id": {"type": "string"}, "Properties": {"type": "string"}, "prorate": {"type": "integer"}, "prorate_out": {"type": "integer"}, "recurring": {"type": "integer"}, "status": {"type": "integer"}, "taxable": {"type": "integer"}, "type": {"type": "string"}, "unit_type": {"type": "string"}, "unit_type_id": {"type": "string"}}}, "Product": {"type": "object", "properties": {"company_id": {"type": "string"}, "coverage": {"type": "string"}, "default_type": {"type": "string"}, "description": {"type": "string"}, "gl_account_active": {"type": "integer"}, "gl_account_code": {"type": "string"}, "gl_account_name": {"type": "string"}, "id": {"type": "string"}, "income_account_id": {"type": "string"}, "insurance_type": {"type": "string"}, "name": {"type": "string"}, "premium": {"type": "number"}, "premium_type": {"type": "string"}, "premium_value": {"type": "number"}, "product_id": {"type": "string"}, "Properties": {"type": "string"}, "prorate": {"type": "integer"}, "prorate_out": {"type": "integer"}, "recurring": {"type": "integer"}, "status": {"type": "integer"}, "taxable": {"type": "integer"}, "type": {"type": "string"}, "unit_type": {"type": "string"}, "unit_type_id": {"type": "string"}}}, "prorate": {"type": "integer"}, "prorate_out": {"type": "integer"}}}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}, "delete": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}, {"in": "query", "name": "startDate", "required": false, "schema": {"type": "string"}, "description": "Insurance start date to target removal (YYYY-MM-DD)."}, {"in": "query", "name": "period", "required": false, "schema": {"type": "string", "enum": ["current", "next"]}, "description": "Billing period context for deletion."}, {"in": "query", "name": "exp_month", "required": false, "schema": {"type": "string"}, "description": "External policy expiration month when declining (MM)."}, {"in": "query", "name": "exp_year", "required": false, "schema": {"type": "string"}, "description": "External policy expiration year when declining (YYYY)."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Decline insurance for lease", "description": "Decline/remove insurance for lease using query params (startDate, period, exp_month, exp_year).", "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"service_id": {"type": "string"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/generate-move-in-invoice": {"post": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/leases/{lease_id}/generate-move-in-invoice", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Generate Move-In Invoice", "description": "Generate Move-In Invoice", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"billed_months": {"type": "integer", "description": "Number of months to bill", "example": 0}, "payment_cycle": {"type": "string", "description": "Payment cycle type", "example": "Monthly"}, "tax_exempt": {"type": "boolean", "description": "If true, contact is tax exempt", "example": false}, "tax_exempt_description": {"type": "string", "nullable": true, "description": "Description for tax exemption reason"}, "dryrun": {"type": "boolean", "description": "If true, only simulate invoice generation without creating actual invoice", "example": true}, "contact_id": {"type": "string", "description": "Contact ID"}, "billing_cycle_id": {"type": "string", "nullable": true, "description": "Billing cycle ID"}, "skipPayment": {"type": "boolean", "description": "If true, skip payment step"}}, "required": ["billed_months", "contact_id", "dryrun", "tax_exempt"]}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"invoices": {"type": "array", "description": "Generated or existing move-in invoices for the lease.", "items": {"type": "object"}}, "invoice_summary": {"type": "object", "description": "Aggregate totals across all returned invoices.", "properties": {"sub_total": {"type": "number"}, "total_tax": {"type": "number"}, "total_discounts": {"type": "number"}, "total_amount": {"type": "number"}, "total_payments": {"type": "number"}, "balance": {"type": "number"}}}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/leases/{lease_id}/get-esign-link": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/leases/{lease_id}/get-esign-link", "x-nectar-visibility": "public", "x-nectar-scope": "public", "operationId": "generateEsignLink", "summary": "Generate a short link for e-sign unsigned rental documents", "description": "Get a short link the tenant opens to e-sign the lease's unsigned documents. The link covers only the documents that are still unsigned. This call sends nothing to the tenant; share the link yourself. Each call returns a new link. If the lease's documents are still being generated, the call waits up to 50 seconds for them.\n\n**Cost:** Light. About 0.4 to 0.6 seconds and 1 KB per call. Not paged.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> render_document_for_esign Hummingbird permission required. Contact Nectar team.</small>", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "description": "The e-sign link details.", "properties": {"shortCode": {"type": "string", "description": "The short code for the eSign link."}, "shortUrl": {"type": "string", "description": "The shortened URL for the eSign link."}, "longUrl": {"type": "string", "description": "The long URL for the eSign link."}}}, "message": {"type": "string", "example": ""}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"link": {"summary": "Lease with five unsigned documents (link values replaced)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"shortCode": "<short code>", "shortUrl": "<short url>", "longUrl": "<long url>"}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id matches no lease, the lease is not an active or pending lease, or the lease has no documents ready to sign.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_lease": {"summary": "lease_id is a valid ID but matches no lease", "value": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}, "not_a_lease": {"summary": "The lease is neither active nor pending", "value": {"status": 404, "data": {}, "msg": "Lease not found", "actual_cause": "Lease not found", "message": ""}}, "no_documents": {"summary": "The lease's documents were not ready within 50 seconds", "value": {"status": 404, "data": {}, "msg": "No documents to e-sign, please try again later", "actual_cause": "No documents to e-sign, please try again later", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/payments/{payment_id}": {"get": {"tags": ["Payments"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/payment_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get a payment details", "description": "Returns one payment: the amount, method and status, the invoices it was applied to, its refunds, and the contact who paid. For a card or bank payment, the API asks the payment processor for the settlement status on every call (`is_settled`).\n\n**Cost:** Light. About 0.3 seconds and 5 KB for a cash payment, about 0.5 seconds and 6 KB for a card payment. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"payment": {"type": "object", "properties": {"id": {"type": "string"}, "payment_methods_id": {"type": "string", "nullable": true}, "lease_id": {"type": "string"}, "amount": {"type": "number"}, "transaction_id": {"type": "string", "nullable": true}, "auth_code": {"type": "string"}, "date": {"type": "string"}, "created": {"type": "string"}, "number": {"type": "string"}, "ref_name": {"type": "string"}, "notes": {"type": "string"}, "method": {"type": "string"}, "sub_method": {"type": "string"}, "status": {"type": "integer"}, "status_desc": {"type": "string", "nullable": true}, "accepted_by": {"type": "string"}, "amt_remaining": {"type": "number"}, "total_applied": {"type": "number"}, "payment_remaining": {"type": "number"}, "is_settled": {"type": "boolean"}, "PaymentMethod": {"type": "object", "properties": {"id": {"type": "string", "nullable": true}, "lease_id": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "name_on_card": {"type": "string"}, "address_id": {"type": "string", "nullable": true}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "auto_charge": {"type": "integer"}, "card_end": {"type": "string"}, "card_type": {"type": "string"}, "active": {"type": "number"}}}, "AppliedPayments": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "invoice_id": {"type": "string"}, "payment_id": {"type": "string"}, "date": {"type": "string"}, "amount": {"type": "number"}, "Invoice": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "number": {"type": "string"}, "date": {"type": "string"}, "due": {"type": "string"}, "total_payments": {"type": "number"}, "total_discounts": {"type": "number"}, "total_tax": {"type": "number"}, "subtotal": {"type": "number"}}}}}}, "Refunds": {"type": "array", "items": {"type": "string"}}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "status": {"type": "string"}, "user_id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "notes": {"type": "string"}, "company": {"type": "string"}, "email": {"type": "string"}, "verification_token": {"type": "string"}, "email_verified": {"type": "string"}, "suffix": {"type": "string"}, "dob": {"type": "string", "nullable": true, "description": "Date of birth. Masked: only the year is shown, for example 1990-**-**."}, "source": {"type": "string", "nullable": true}, "ssn": {"type": "string", "nullable": true, "description": "Social security number. Always fully masked with *."}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true, "description": "Driver's license number. Masked: only the last 4 characters are shown."}, "driver_license_exp": {"type": "string"}, "driver_license_state": {"type": "string"}, "driver_license_city": {"type": "string"}, "have_secondary_contact": {"type": "integer"}, "opt_out": {"type": "integer"}, "gdsOwnerId": {"type": "string"}, "user_name": {"type": "string"}, "Access": {"type": "array", "items": {"type": "string"}}, "Leases": {"type": "array", "items": {"type": "string"}}, "Addresses": {"type": "array", "items": {"type": "string"}}, "role_id": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "created_at": {"type": "string"}, "IsCellNo": {"type": "integer"}, "primary": {"type": "number"}, "verification_token": {"type": "string"}, "phone_verified": {"type": "string"}}}}, "Companies": {"type": "array", "items": {"type": "string"}}, "Applications": {"type": "array", "items": {"type": "string"}}, "Reservations": {"type": "array", "items": {"type": "string"}}, "Pending": {"type": "array", "items": {"type": "string"}}, "Vehicles": {"type": "array", "items": {"type": "string"}}, "Employment": {"type": "array", "items": {"type": "string"}}, "Relationships": {"type": "array", "items": {"type": "string"}}, "Interactions": {"type": "array", "items": {"type": "string"}}, "Permissions": {"type": "array", "items": {"type": "string"}}, "Properties": {"type": "array", "items": {"type": "string"}}, "Military": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}, "Address": {"type": "object", "properties": {}}, "CommandingOfficer": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}}}}}, "Business": {"type": "object", "properties": {}}, "Touchpoints": {"type": "array", "items": {"type": "string"}}, "Delinquencies": {"type": "array", "items": {"type": "string"}}, "Token": {"type": "object", "properties": {}}, "ActiveLead": {"type": "object", "properties": {}}, "Leads": {"type": "array", "items": {"type": "string"}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"card": {"summary": "Card payment applied to one invoice", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"payment": {"id": "Lvp1nGkId2", "payment_methods_id": "k2MM86H72J", "lease_id": null, "amount": 1, "transaction_id": "<transaction id>", "auth_code": null, "date": "2026-09-27", "created": "2026-09-28 00:28:10", "number": null, "ref_name": "KSS Test v1", "notes": null, "method": "card", "sub_method": null, "status": 1, "status_desc": "Successful.", "accepted_by": "3BEdX4rIkj", "amt_remaining": 0, "total_applied": 1, "payment_remaining": 0, "is_settled": true, "PaymentMethod": {"id": "k2MM86H72J", "lease_id": null, "first": "Jo", "last": "Martin", "name_on_card": "KSS Test v1", "address_id": "5B7PzDMIbv", "Address": {"id": "5B7PzDMIbv", "address": "123 Main St", "address2": null, "city": "Irvine", "state": "CA", "zip": "92617"}, "auto_charge": 0, "card_end": "1111", "card_type": "visa", "active": 1}, "AppliedPayments": [{"id": "lBNQWblTLj", "invoice_id": "1jJboeIkjg", "payment_id": "Lvp1nGkId2", "date": "2026-09-27", "amount": 1, "Invoice": {"id": "1jJboeIkjg", "lease_id": "8W2W0kI9jY", "number": "5510", "date": "2020-07-26", "due": "2020-07-27", "total_payments": 1, "total_discounts": 0, "total_tax": 0.09, "subtotal": 2}}], "Refunds": [], "Contact": {"id": "nBmAK0IdBV", "company_id": "WEj67IYBe3", "status": "gate lockout", "user_id": null, "salutation": null, "first": "Jo", "middle": "P.", "notes": null, "company": "Acme Industries", "email": "jomartin@example.com", "verification_token": null, "email_verified": null, "suffix": "", "dob": "1975-**-**", "source": "Walk-in", "ssn": "*********", "gender": "male", "driver_license": "1", "driver_license_exp": null, "driver_license_state": null, "driver_license_city": null, "have_secondary_contact": 0, "opt_out": 0, "last": "Martin", "gdsOwnerId": "", "user_name": "", "Access": [], "Leases": [], "Addresses": [], "role_id": null, "Phones": [{"id": "kjgrr9HO2W", "contact_id": "nBmAK0IdBV", "type": "Cell Phone", "phone": "<phone>", "sms": true, "created_at": "2018-09-03 01:16:24", "IsCellNo": 0, "primary": 1, "verification_token": null, "phone_verified": null}], "Companies": [], "Applications": [], "Reservations": [], "Pending": [], "Vehicles": [], "Employment": [], "Relationships": [], "Interactions": [], "Permissions": [], "Properties": [], "Military": {"Phone": {}, "Address": {}, "CommandingOfficer": {"Phone": {}}}, "Business": {}, "Touchpoints": [], "Delinquencies": [], "Token": {}, "ActiveLead": {}, "Leads": []}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}, "processor": {"summary": "The payment processor did not return the status of a card payment", "value": {"status": 400, "data": {}, "msg": "Cant get response", "actual_cause": "Cant get response", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The payment ID is a valid ID but matches no payment.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "The requested resource could not be found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "delete": {"tags": ["Payments"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/payment_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Delete a payment", "description": "Delete an associated payment with the associated company.", "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/promotions/": {"get": {"tags": ["Promotions"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "example": "85B73ubBGy", "description": "Hashed ID of a property. Only promotions assigned to this property are returned. Default: none (promotions of every property). Use in: Get a single property (GET /properties/{property_id})."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all promotions", "operationId": "getAllPromotions", "description": "Lists the company's promotions and discounts: price reductions, such as a free month or a percent off the rent, that can be applied to a lease. Each item has the promotion's value, timing, qualifying condition and the properties it is assigned to. Send `property_id` to get only the promotions assigned to one property.\n\n**Cost:** Medium. About 0.5 to 0.7 seconds and 70 to 160 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"promotions": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the promotion. Use in: Get promotion details (GET /promotions/{promotion_id})."}, "company_id": {"type": "string", "description": "Hashed ID of the company."}, "name": {"type": "string", "nullable": true, "description": "Name of the promotion."}, "description": {"type": "string", "nullable": true, "description": "Description of the promotion."}, "label": {"type": "string", "description": "Kind of offer.", "enum": ["discount", "promotion", "merchandise_discount"]}, "type": {"type": "string", "description": "How `value` is applied.", "enum": ["percent", "dollar", "fixed"]}, "value": {"type": "number", "description": "Amount of the promotion, read together with `type`."}, "pretax": {"type": "integer", "format": "int32"}, "sort": {"type": "integer", "format": "int32", "description": "Display order."}, "active": {"type": "integer", "format": "int32"}, "enable": {"type": "integer", "format": "int32", "description": "1 when the promotion is turned on."}, "active_period": {"type": "string", "description": "When the promotion can be applied.", "enum": ["active", "date_range", "end_on"]}, "period": {"type": "object", "description": "Duration and timing of the promotion. Replaces the former top-level months, offset, consecutive_pay and days_threshold fields.", "properties": {"duration": {"type": "integer", "format": "int32", "nullable": true, "description": "Number of billing months the promotion applies for. Formerly the top-level months field."}, "offset": {"type": "integer", "format": "int32", "description": "Billing months to wait before the promotion starts. 0 applies it from move-in, 1 from the first full billing cycle, and N delays it a further N-1 months."}, "consecutive_pay": {"type": "integer", "format": "int32", "description": "Carried over unchanged from the former top-level consecutive_pay field."}, "days_threshold": {"type": "integer", "format": "int32", "nullable": true, "description": "Carried over unchanged from the former top-level days_threshold field."}}}, "required_months": {"type": "integer", "format": "int32", "nullable": true}, "length_of_stay": {"type": "integer", "format": "int32", "nullable": true}, "conditions": {"type": "array", "maxItems": 1, "description": "Qualifying condition of the promotion, for example `new_tenants`. Empty when the promotion has none.", "items": {"type": "string", "enum": ["new_tenants", "existing_tenants", "web_only", "require_autopay", "require_coverage", "require_id_verification", "remove_on_delinquency"]}}, "eligible_tenants": {"type": "array", "nullable": true, "items": {"type": "string"}}, "promo_code": {"type": "string", "nullable": true}, "rounding": {"type": "string", "nullable": true, "enum": ["up_half", "up_full", "down_half", "down_full", "nearest_half", "nearest_full", null]}, "created_by": {"type": "string", "description": "Display name of the contact who created the promotion."}, "created_at": {"type": "string", "description": "Date and time the promotion was created."}, "Properties": {"type": "array", "description": "Properties this promotion is assigned to.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "name": {"type": "string", "description": "Name of the property."}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"promotions": {"summary": "Two promotions of a property (trimmed)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"promotions": [{"id": "79j5pMSY2w", "company_id": "WEj67IYBe3", "name": "Second Month for $10 (Existing Tenants)", "description": "Second Month for $10 for Existing Tenants", "label": "promotion", "type": "fixed", "value": 10, "pretax": 1, "sort": 0, "active": 1, "enable": 1, "active_period": "active", "period": {"duration": 1, "offset": 1, "consecutive_pay": 0, "days_threshold": 1}, "required_months": null, "length_of_stay": null, "conditions": ["existing_tenants"], "eligible_tenants": null, "promo_code": null, "rounding": "nearest_full", "created_by": "<creator name>", "created_at": "2024-12-20 18:46:18.000000", "Properties": [{"id": "85B73ubBGy", "name": "UC Irvine Storage"}]}, {"id": "Vgj8axs4BJ", "company_id": "WEj67IYBe3", "name": "test-july-2025", "description": "", "label": "promotion", "type": "percent", "value": 10, "pretax": 1, "sort": 0, "active": 1, "enable": 1, "active_period": "active", "period": {"duration": 5, "offset": 1, "consecutive_pay": 0, "days_threshold": 1}, "required_months": null, "length_of_stay": null, "conditions": [], "eligible_tenants": null, "promo_code": null, "rounding": null, "created_by": "RCBTest AdminUser", "created_at": "2025-07-22 09:31:05.000000", "Properties": [{"id": "85B73ubBGy", "name": "UC Irvine Storage"}]}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}, "post": {"tags": ["Promotions"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create a new promotion", "description": "Create a new promotion for associated company\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> manage_promotions Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string", "description": "Promotion name"}, "description": {"type": "string", "description": "Promotion description"}, "label": {"type": "string", "description": "Promotion label"}, "type": {"type": "string", "description": "Promotion type"}, "value": {"type": "string", "description": "Promotion value"}, "is_sb709_rent_cap": {"type": "integer", "description": "SB709 rent cap flag"}, "sb709_promo_disclosure": {"type": "string", "description": "SB709 promo disclosure HTML"}, "sb709_promo_rent_cap": {"type": "integer", "description": "SB709 promo rent cap"}, "period": {"type": "object", "properties": {"consecutive_pay": {"type": "boolean", "description": "Consecutive pay flag"}, "duration": {"type": "string", "description": "Promotion duration"}, "offset": {"type": "integer", "description": "Promotion offset"}}}, "properties": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Property ID"}}}, "description": "List of properties"}, "conditions": {"type": "array", "items": {"type": "string"}, "description": "Promotion conditions"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"promotion": {"type": "object", "properties": {"id": {"type": "string", "description": "Promotion ID"}, "name": {"type": "string", "description": "Promotion name"}, "description": {"type": "string", "description": "Promotion description"}, "label": {"type": "string", "description": "Promotion label"}, "type": {"type": "string", "description": "Promotion type"}, "value": {"type": "string", "description": "Promotion value"}, "is_sb709_rent_cap": {"type": "boolean", "description": "SB709 rent cap flag"}, "sb709_promo_disclosure": {"type": "string", "description": "SB709 promo disclosure HTML"}, "sb709_promo_rent_cap": {"type": "integer", "description": "SB709 promo rent cap"}, "created_by": {"type": "string", "description": "Creator user ID"}, "period": {"type": "object", "properties": {"consecutive_pay": {"type": "boolean", "description": "Consecutive pay flag"}, "duration": {"type": "integer", "description": "Promotion duration"}, "offset": {"type": "integer", "description": "Promotion offset"}}}, "properties": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Property ID"}}}, "description": "List of properties"}, "conditions": {"type": "array", "items": {"type": "string"}, "description": "Promotion conditions"}}}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/promotions/{promotion_id}": {"get": {"tags": ["Promotions"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/promotion_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get promotion details", "operationId": "getPromotionDetails", "description": "Returns one promotion or discount of the company: a price reduction, such as a free month or a percent off the rent, that can be applied to a lease.\n\n**Cost:** Light. About 0.3 seconds and 2 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "promotion_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The promotion ID is a valid ID but matches no promotion.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Promotion not found", "actual_cause": "Promotion not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/leases": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer", "default": 20}, "description": "Number of leases to return. Default: 20. Values above 500 are returned as 500. 0, a negative number or a value that is not a number returns 20."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer", "default": 0}, "description": "Number of leases to skip before the first one returned. Default: 0. A negative number or a value that is not a number is treated as 0."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all leases for the property", "operationId": "getPropertyLeases", "description": "Lists the leases on the property's units, every status, newest start date first. Each item has the lease's unit, dates, rent, billing day and status.\n\nResults are paged with `limit` and `offset`. `paging.total` is the number of leases at the property. To get the next page, send the same request with `offset` increased by `limit`.\n\n**Cost:** Heavy. About 5 to 9 seconds and 40 KB for the default page of 20; about 10 to 15 seconds and 1 to 4 MB for the maximum page of 500.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string", "format": "date"}, "end_date": {"type": "string", "nullable": true}, "bill_day": {"type": "integer"}, "notes": {"type": "string", "nullable": true}, "terms": {"type": "string", "nullable": true}, "rent": {"type": "number"}, "status": {"type": "integer"}, "send_invoice": {"type": "integer"}, "security_deposit": {"type": "number", "nullable": true}, "monthly": {"type": "number"}, "code": {"type": "string"}, "decline_insurance": {"type": "integer"}, "moved_out": {"type": "string", "nullable": true}, "lease_standing_id": {"type": "string", "nullable": true}, "insurance_exp_month": {"type": "integer", "nullable": true}, "insurance_exp_year": {"type": "string", "nullable": true}, "auction_status": {"type": "string", "nullable": true}}}, "description": "The leases, newest start date first."}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of leases in this page."}, "total": {"type": "integer", "description": "Number of leases at the property."}, "num_pages": {"type": "integer", "description": "Number of pages at this page size."}, "next": {"type": "string", "nullable": true}, "prev": {"type": "string", "nullable": true}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"leases": {"summary": "Two leases (limit=2)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"leases": [{"id": "6jKoQNlCRj", "unit_id": "MjRaL8etm2", "start_date": "2026-10-15", "end_date": null, "bill_day": 1, "notes": null, "terms": "1", "rent": 220, "status": 1, "send_invoice": 1, "security_deposit": 0, "monthly": 1, "code": null, "decline_insurance": 0, "moved_out": null, "lease_standing_id": "Qojro8feBJ", "insurance_exp_month": null, "insurance_exp_year": null, "auction_status": null}, {"id": "kjV5nmJfP2", "unit_id": "Djear45Ugj", "start_date": "2026-10-08", "end_date": "2026-10-15", "bill_day": 1, "notes": null, "terms": null, "rent": 27, "status": 1, "send_invoice": 0, "security_deposit": 1, "monthly": 1, "code": null, "decline_insurance": 0, "moved_out": "2026-10-15", "lease_standing_id": "r82zybH4vk", "insurance_exp_month": null, "insurance_exp_year": null, "auction_status": null}], "paging": {"count": 2, "total": 13899, "num_pages": 6950, "next": "<next page URL>", "prev": null}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/units/{unit_id}/lease-set-up": {"get": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}, {"in": "query", "name": "hold_token", "schema": {"type": "string"}, "description": "Hold token from Hold a unit for renting (POST /units/{unit_id}/hold). Send it when the unit is on hold. Default: none."}, {"in": "query", "name": "promotions[]", "schema": {"type": "string"}, "description": "A promotion to apply to the preview, as a JSON object string: `{\"promotion_id\":\"<promotion id>\"}`, URL-encoded. Repeat the parameter to apply more than one promotion; a promotion sent twice is applied once. The promotion must belong to this company. Get promotion IDs from Get all promotions (GET /promotions/). Default: none."}, {"in": "query", "name": "insurance_id", "schema": {"type": "string"}, "description": "Hashed ID of an insurance plan to add to the preview. Get IDs from Get all insurances for property (GET /properties/{property_id}/insurances). Default: none."}, {"in": "query", "name": "additional_months", "schema": {"type": "integer", "minimum": 0}, "description": "Number of months to bill at move-in, counting the first month. 0 and 1 both bill one month; 2 bills two months, and so on. Charges adds up all billed months. Default: 0 (one month)."}, {"in": "query", "name": "reservation_id", "schema": {"type": "string"}, "description": "Hashed ID of a reservation on this unit. Default: none."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get payment details for new lease before creating one", "operationId": "getNewLeasePaymentDetails", "description": "Previews the charges for a new lease on a unit without creating the lease: rent, security deposit, discounts from promotions, taxes and the total due at move-in. Nothing is saved, so the same request can be sent again with the same result. A unit that is leased, or that has a pending lease, returns 409.\n\n**Cost:** Light. About 0.5 to 1 second and about 12 KB for one month; about 16 KB with additional_months=12. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"details": {"type": "object", "properties": {"security_deposit": {"type": "number", "nullable": true}, "monthly": {"type": "number"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "terms": {"type": "number"}, "rent": {"type": "number"}, "auto_pay_after_billing_date": {"type": "integer"}, "Discounts": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "promotion_id": {"type": "string", "description": "Hashed ID of the promotion behind the discount. Use in: Get a promotion details (GET /promotions/{promotion_id})."}, "coupon_id": {"type": "string"}, "start": {"type": "string"}, "end": {"type": "string"}, "lease_id": {"type": "string"}, "company_id": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "pretax": {"type": "number"}, "msg": {"type": "string"}, "Promotion": {"type": "string"}, "round": {"type": "string"}}}}, "Promotions": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "description": {"type": "string"}, "value": {"type": "number"}, "type": {"type": "string"}, "months": {"type": "number", "nullable": true}, "offset": {"type": "integer"}, "pretax": {"type": "number"}, "active": {"type": "number"}}}}, "Charges": {"type": "object", "properties": {"date": {"type": "string"}, "discounts": {"type": "number"}, "sub_total": {"type": "number"}, "total_tax": {"type": "number"}, "total_due": {"type": "number"}, "balance": {"type": "number"}, "Detail": {"type": "array", "items": {"type": "object", "properties": {"product_id": {"type": "string"}, "name": {"type": "string"}, "qty": {"type": "number"}, "cost": {"type": "number"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "total_cost": {"type": "number"}}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"one_month": {"summary": "Available unit, no parameters", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"details": {"security_deposit": 0, "monthly": 1, "start_date": "2026-10-16", "end_date": null, "bill_day": 16, "terms": 1, "rent": 600, "auto_pay_after_billing_date": 2, "Discounts": [], "Promotions": [{"name": "Prorize Promo (50% off 1 month)", "description": "Test Promotion for Prorize (50% off 1 month)", "value": 50, "type": "percent", "months": 1, "offset": 0, "pretax": 1, "active": 1}, {"name": "Friends & Family", "description": "", "value": 50, "type": "percent", "months": null, "offset": 0, "pretax": 1, "active": 1}], "Charges": {"date": "2026-10-16", "discounts": 0, "sub_total": 600, "total_tax": 36, "total_due": 636, "balance": 636, "Detail": [{"product_id": "knBmmUdBVD", "name": "Rent", "qty": 1, "cost": 600, "start_date": "2026-10-16", "end_date": "2026-11-15", "total_cost": 636}]}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}, "promotion": {"summary": "With one promotion (promotions[]={\"promotion_id\":\"MojDZmhJvY\"})", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"details": {"security_deposit": 0, "monthly": 1, "start_date": "2026-10-16", "end_date": null, "bill_day": 16, "terms": 1, "rent": 600, "auto_pay_after_billing_date": 2, "Discounts": [{"id": null, "promotion_id": "MojDZmhJvY", "coupon_id": null, "start": "2026-10-16", "end": "2026-11-15", "lease_id": null, "company_id": "WEj67IYBe3", "value": 50, "type": "percent", "pretax": 1, "msg": "", "Promotion": "", "round": null}], "Promotions": [{"name": "Prorize Promo (50% off 1 month)", "description": "Test Promotion for Prorize (50% off 1 month)", "value": 50, "type": "percent", "months": 1, "offset": 0, "pretax": 1, "active": 1}, {"name": "Friends & Family", "description": "", "value": 50, "type": "percent", "months": null, "offset": 0, "pretax": 1, "active": 1}], "Charges": {"date": "2026-10-16", "discounts": 300, "sub_total": 600, "total_tax": 18, "total_due": 618, "balance": 318, "Detail": [{"product_id": "knBmmUdBVD", "name": "Rent", "qty": 1, "cost": 600, "start_date": "2026-10-16", "end_date": "2026-11-15", "total_cost": 318}]}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}, "validation": {"summary": "A query parameter has the wrong type or value", "value": {"status": 400, "data": {}, "msg": "\"additional_months\" must be an integer; ", "message": ""}}, "reservation": {"summary": "reservation_id is a valid ID but matches no reservation", "value": {"status": 400, "data": {}, "msg": "Reservation not found.", "actual_cause": "Reservation not found.", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The unit ID matches no unit, or a promotion ID matches no promotion of this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"unit": {"summary": "The unit ID is a valid ID but matches no unit", "value": {"status": 404, "data": {}, "msg": "Unit not found", "actual_cause": "Unit not found", "message": ""}}, "promotion": {"summary": "A promotion ID matches no promotion of this company", "value": {"status": 404, "data": {}, "msg": "Promotion not found", "actual_cause": "Promotion not found", "message": ""}}}}}}, "409": {"description": "The unit cannot be rented now.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"leased": {"summary": "The unit is leased", "value": {"status": 409, "data": {}, "msg": "This unit is currently leased", "actual_cause": "This unit is currently leased", "message": ""}}, "pending": {"summary": "The unit has a pending lease", "value": {"status": 409, "data": {}, "msg": "The current lease of this unit is pending", "actual_cause": "The current lease of this unit is pending", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/units/{unit_id}/documents/finalize": {"post": {"tags": ["Documents"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"$ref": "#/components/parameters/unit_id"}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/properties/{property_id}/generate_docs", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Finalize and generate signed documents for a unit", "description": "Finalizes the document signing process and returns the generated documents for the unit.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"contacts": {"type": "array", "items": {"type": "object", "properties": {"Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "type": {"type": "string"}}}}, "Business": {"type": "object"}, "Military": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "CommandingOfficer": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {"phone": {"type": "string"}, "type": {"type": "string"}}}, "email": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}}}, "Phone": {"type": "object", "properties": {"phone": {"type": "string"}, "type": {"type": "string"}}}, "active": {"type": "integer"}, "branch": {"type": "string"}, "date_of_birth": {"type": "string"}, "rank": {"type": "string"}, "service_expiration": {"type": "string"}, "service_member_email": {"type": "string"}, "unit_name": {"type": "string"}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"phone": {"type": "string"}, "sms": {"type": "boolean"}, "type": {"type": "string"}}}}, "Relationships": {"type": "array", "items": {"type": "object", "properties": {"Contact": {"type": "object", "properties": {"Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "type": {"type": "string"}}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"phone": {"type": "string"}, "sms": {"type": "boolean"}, "type": {"type": "string"}}}}, "driver_license": {"type": "string"}, "email": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}}}, "is_alternate": {"type": "integer"}, "type": {"type": "string"}}}}, "active_military": {"type": "integer"}, "driver_license": {"type": "string"}, "driver_license_exp": {"type": "string"}, "driver_license_state": {"type": "string"}, "email": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "ssn": {"type": "string"}}}}, "deliveryMethod": {"type": "object", "properties": {"notice_delivery": {"type": "string"}}}, "discount_id": {"type": "string"}, "payment_method": {"type": "object", "properties": {"account_number": {"type": "string"}, "account_type": {"type": "string"}, "address": {"type": "string"}, "auto_charge": {"type": "boolean"}, "city": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "name_on_card": {"type": "string"}, "routing_number": {"type": "string"}, "save_to_account": {"type": "boolean"}, "state": {"type": "string"}, "type": {"type": "string"}, "zip": {"type": "string"}}}, "platform": {"type": "string"}, "source": {"type": "string"}, "start_date": {"type": "string"}, "vehicle_info": {"type": "object", "properties": {"description": {"type": "string"}, "vehicle": {"type": "object", "properties": {"type": {"type": "string"}, "manufacturer": {"type": "string"}, "model": {"type": "string"}, "year": {"type": "string"}, "approximateValue": {"type": "string"}, "identificationNumber": {"type": "string"}, "licensePlateNumber": {"type": "string"}, "registrationState": {"type": "string"}, "insuranceProvider": {"type": "string"}, "insurancePolicyNumber": {"type": "string"}, "lienHolder": {"type": "string"}, "registeredOwner": {"type": "object", "properties": {"name": {"type": "object", "properties": {"first": {"type": "string"}, "last": {"type": "string"}}}, "address": {"type": "object", "properties": {"address1": {"type": "string"}, "address2": {"type": "string"}, "postalCode": {"type": "string"}, "stateCode": {"type": "string"}, "city": {"type": "string"}}}}}}}}}, "space_mix_id": {"type": "string"}, "total_payment_amount": {"type": "number"}, "bill_day": {"type": "integer"}, "payment_cycle": {"type": "string"}, "web_rate": {"type": "number"}, "costs": {"type": "array", "items": {"type": "object", "properties": {"amount": {"type": "number"}, "description": {"type": "string"}, "costType": {"type": "string"}, "end": {"type": "string"}, "start": {"type": "string"}, "tax": {"type": "number"}, "total": {"type": "number"}, "pmsRaw": {"type": "string", "nullable": true}}}}, "metadata": {"type": "object", "properties": {"ip": {"type": "string"}, "user_agent": {"type": "string"}, "location": {"type": "string"}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"documents": {"type": "array", "items": {"type": "object", "properties": {"document_type": {"type": "string"}, "filename": {"type": "string"}, "src": {"type": "string", "format": "uri"}, "version": {"type": "string"}}}}, "signed": {"type": "boolean"}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/generate_docs": {"post": {"tags": ["Documents"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/properties/{property_id}/generate_docs", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Generate Documents", "description": "Generate documents for property", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"additional_months": {"type": "integer"}, "click_wrap_enabled": {"type": "boolean"}, "contacts": {"type": "array", "items": {"type": "object", "properties": {"Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"address": {"type": "string"}, "city": {"type": "string"}, "country": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}}}, "type": {"type": "string"}}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"phone": {"type": "string"}, "sms": {"type": "boolean"}}}}, "abn_number": {"type": "string"}, "driver_license": {"type": "string"}, "email": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}}}}, "coverage_amount": {"type": "integer"}, "insurance_id": {"type": "string"}, "is_autopay_enabled": {"type": "boolean"}, "lease_id": {"type": "string"}, "own_insurance": {"type": "boolean"}, "payment_method": {"type": "object", "properties": {"address": {"type": "string"}, "Address": {"type": "string"}, "auto_charge": {"type": "boolean"}, "card_number": {"type": "string"}, "city": {"type": "string"}, "cvv2": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "name_on_card": {"type": "string"}, "save_to_account": {"type": "boolean"}, "state": {"type": "string"}, "type": {"type": "string"}, "zip": {"type": "string"}}}, "signingDetails": {"type": "object", "properties": {"metadata": {"type": "object", "properties": {"device": {"type": "string"}, "location": {"type": "string"}, "user_agent": {"type": "string"}}}}}, "space_type": {"type": "string"}, "start_date": {"type": "string", "format": "date"}, "unit_id": {"type": "string"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"data": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "src": {"type": "string"}, "type": {"type": "string"}}}}, "status": {"type": "integer"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/space-groups": {"get": {"tags": ["Space-Groups"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/properties/{property_id}/space-groups", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get Property Space Groups", "operationId": "getPropertySpaceGroups", "description": "Returns the space grouping profiles of a property. A space grouping profile sorts the property's spaces (units) into groups, for example by size or by amenities. Each profile has its ID, name, whether it is the property's default, and how many groups and spaces it has. Only active profiles are returned. To get a profile's groups with their sizes, prices and vacancy, use Get space group details (GET /properties/{property_id}/space-groups/{space_group_id}/groups).\n\n**Cost:** Medium. About 0.3 to 1.4 seconds and up to 25 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"spaceGroups": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the space grouping profile. Use in: Get space group details (GET /properties/{property_id}/space-groups/{space_group_id}/groups), Get space groups details (GET /space-groups)."}, "property_id": {"type": "string", "description": "Hashed ID of the property. Same as property_id in the path."}, "name": {"type": "string"}, "description": {"type": "string", "description": "Free text. Can be an empty string."}, "active": {"type": "integer", "description": "Always 1: only active profiles are returned."}, "created_at": {"type": "string", "description": "Format YYYY-MM-DD HH:MM:SS."}, "modified_at": {"type": "string", "description": "Format YYYY-MM-DD HH:MM:SS."}, "editable": {"type": "boolean"}, "is_default": {"type": "integer", "description": "1 for the property's default profile, otherwise 0."}, "num_spaces": {"type": "integer", "description": "Number of active spaces in the profile's groups."}, "num_groups": {"type": "integer", "description": "Number of groups in the profile."}}}, "description": "Active space grouping profiles of the property. Empty when it has none."}}}, "message": {"type": "string", "example": ""}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"spaceGroups": [{"id": "8W2WK4I92Y", "property_id": "85B73ubBGy", "name": "parking group", "description": "askdjfbsdf", "active": 1, "created_at": "2023-08-07 17:53:26", "modified_at": "2023-08-07 17:53:26", "editable": true, "is_default": 0, "num_spaces": 276, "num_groups": 30}, {"id": "deBobWuxj0", "property_id": "85B73ubBGy", "name": "QAGrouping", "description": "", "active": 1, "created_at": "2025-04-30 22:24:08", "modified_at": "2025-04-30 22:29:15", "editable": true, "is_default": 1, "num_spaces": 6676, "num_groups": 127}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The property ID is a valid ID but matches no property.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found.", "actual_cause": "Property not found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/space-groups/{space_group_id}/groups": {"get": {"tags": ["Space-Groups"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"$ref": "#/components/parameters/space_group_id"}, {"in": "query", "name": "amenities", "required": false, "description": "URL-encoded JSON array of amenity ID and value pairs. Returns only groups whose spaces have every listed amenity with that value; values are compared without regard to case. Take id and value from groups[].amenities[] or tiers[].amenities[]. Default: none (no filter).", "schema": {"type": "string", "example": "[{\"id\":\"wgjYnOHeBz\",\"value\":\"Yes\"}]"}}], "x-nectar-endpoint-name": "/v1/companies/company_id/properties/property_id/space-groups/space_group_id/groups", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get space group details", "description": "Returns the groups of one space grouping profile at a property, keyed by space type name (for example storage and parking). Each group has a name, its amenity values, and one tier with its size, the number of spaces, the price range of all spaces, the count and price range of vacant spaces, and the amenities and promotions of its spaces. Use the amenities parameter to keep only groups whose spaces have given amenity values.\n\n**Cost:** Heavy. About 0.3 to 10 seconds and up to 1.3 MB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"spaceGroupProfile": {"type": "object", "properties": {"storage": {"type": "object", "properties": {"groups": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the group, for example Drive Through Access > Climate Control. all units when the group has no name."}, "amenities": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the amenity."}, "name": {"type": "string"}, "type": {"type": "string", "nullable": true, "description": "Amenity field type, for example boolean or string."}, "value": {"type": "string", "example": "Yes"}, "sort_order": {"type": "integer"}}}, "description": "Amenity values of the group."}, "tiers": {"type": "array", "items": {"type": "object", "properties": {"tier_id": {"type": "string", "description": "ID of the tier (a 32-character hash)."}, "description": {"type": "string", "description": "The tier's size, for example 10' x 15', or its area range, for example 0 sqft to 100 sqft."}, "min_sqft": {"type": "integer", "nullable": true, "description": "Lower bound of an area tier, in square feet. Null for a size tier."}, "max_sqft": {"type": "integer", "nullable": true, "description": "Upper bound of an area tier, in square feet. Null for a size tier or an open-ended area tier."}, "units": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of spaces in the group."}, "min_price": {"type": "number", "description": "Lowest current price of the group's spaces."}, "max_price": {"type": "integer", "description": "Highest current price of the group's spaces."}}}, "vacant": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of vacant spaces in the group."}, "min_price": {"type": "number", "nullable": true, "description": "Lowest price of a vacant space. Null when none is vacant."}, "max_price": {"type": "number", "nullable": true, "description": "Highest price of a vacant space. Null when none is vacant."}}}, "amenities": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the amenity."}, "name": {"type": "string"}, "type": {"type": "string", "nullable": true, "description": "Amenity field type, for example boolean or string."}, "value": {"type": "string", "example": "Yes"}, "sort_order": {"type": "integer"}}}, "description": "Amenities of the group's spaces."}, "promo": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "type": {"type": "string"}, "label": {"type": "string"}, "value": {"type": "integer"}, "description": {"type": "string"}}}, "description": "Promotions of the group's spaces."}, "insurance": {"type": "array", "items": {"type": "object"}}}}}}}}, "num_spaces": {"type": "integer", "description": "Number of spaces in the space type's groups."}, "num_groups": {"type": "integer", "description": "Number of groups of the space type."}}, "description": "Groups of this space type. An empty object when the profile has no settings for it."}, "parking": {"type": "object", "properties": {"groups": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the group, for example Drive Through Access > Climate Control. all units when the group has no name."}, "amenities": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the amenity."}, "name": {"type": "string"}, "type": {"type": "string", "nullable": true, "description": "Amenity field type, for example boolean or string."}, "value": {"type": "string", "example": "Yes"}, "sort_order": {"type": "integer"}}}, "description": "Amenity values of the group."}, "tiers": {"type": "array", "items": {"type": "object", "properties": {"tier_id": {"type": "string", "description": "ID of the tier (a 32-character hash)."}, "description": {"type": "string", "description": "The tier's size, for example 10' x 15', or its area range, for example 0 sqft to 100 sqft."}, "width": {"type": "string", "nullable": true, "description": "Width in feet. Null for an area tier."}, "length": {"type": "string", "nullable": true, "description": "Length in feet. Null for an area tier."}, "units": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of spaces in the group."}, "min_price": {"type": "number", "description": "Lowest current price of the group's spaces."}, "max_price": {"type": "number", "description": "Highest current price of the group's spaces."}}}, "vacant": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of vacant spaces in the group."}, "min_price": {"type": "number", "nullable": true, "description": "Lowest price of a vacant space. Null when none is vacant."}, "max_price": {"type": "number", "nullable": true, "description": "Highest price of a vacant space. Null when none is vacant."}}}, "amenities": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the amenity."}, "name": {"type": "string"}, "type": {"type": "string", "nullable": true, "description": "Amenity field type, for example boolean or string."}, "value": {"type": "string", "example": "Yes"}, "sort_order": {"type": "integer"}}}, "description": "Amenities of the group's spaces."}, "promo": {"type": "array", "items": {"type": "object"}, "description": "Promotions of the group's spaces."}, "insurance": {"type": "array", "items": {"type": "object"}}}}}}}}, "num_spaces": {"type": "integer", "description": "Number of spaces in the space type's groups."}, "num_groups": {"type": "integer", "description": "Number of groups of the space type."}}, "description": "Groups of this space type. An empty object when the profile has no settings for it."}, "id": {"type": "string", "description": "Hashed ID of the space grouping profile. Same as space_group_id in the path."}}}}}, "message": {"type": "string", "example": ""}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"spaceGroupProfile": {"storage": {"groups": [{"name": "No Drive Through Access > Climate Control", "amenities": [{"id": "8W2WaMH9BY", "name": "Drive Through Access", "type": "boolean", "value": "No", "sort_order": 24}, {"id": "wgjYnOHeBz", "name": "Climate Control", "type": "boolean", "value": "Yes", "sort_order": 2}], "tiers": [{"tier_id": "8fc9b3aef7c6efd19141b5734d8a6514", "description": "10' x 10'", "min_sqft": null, "max_sqft": null, "units": {"count": 25, "min_price": 100, "max_price": 100}, "vacant": {"count": 18, "min_price": 100, "max_price": 100}, "amenities": [{"id": "k6vApmC6Bp", "name": "Gate", "type": "string", "value": "Electronic", "sort_order": 2}, {"id": "p6jyJlTKBq", "name": "Access", "type": "string", "value": "Drive-Up Access", "sort_order": 3}], "promo": [{"id": "MojDZmhJvY", "name": "Prorize Promo (50% off 1 month)", "type": "regular", "label": "promotion", "value": 50, "description": "Test Promotion for Prorize (50% off 1 month)"}], "insurance": []}]}], "num_spaces": 6676, "num_groups": 127}, "parking": {}, "id": "deBobWuxj0"}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "property_id or space_group_id is a valid ID but matches no property or space grouping profile.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"property": {"summary": "No property with this ID", "value": {"status": 404, "data": {}, "msg": "Property not found.", "actual_cause": "Property not found.", "message": ""}}, "space_group": {"summary": "No space grouping profile with this ID", "value": {"status": 404, "data": {}, "msg": "The requested resource could not be found.", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/promotion-management/space-groups/assign": {"post": {"tags": ["Space-Groups"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/properties/{property_id}/promotion-management/space-groups/assign", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Assign a promotion to space groups", "description": "Assigns a promotion (or promotion plan) to one or more space groups for the given property, per channel. Set `sync` to `true` to immediately propagate the assignment down to the individual spaces (units); when omitted or `false`, the propagation runs on the nightly promotion-management sync.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> assign_promotions Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["unit_group_hashed_ids", "promotions"], "properties": {"unit_group_hashed_ids": {"type": "array", "items": {"type": "string"}, "description": "Hashed ids of the space groups (unit groups) to assign the promotion to."}, "promotions": {"type": "array", "description": "One entry per channel (max 2). A null `data` clears the assignment for that channel.", "items": {"type": "object", "required": ["data", "channel_type"], "properties": {"data": {"type": "object", "nullable": true, "required": ["id", "type"], "properties": {"id": {"type": "string", "description": "Hashed id of the promotion or promotion plan. It must belong to your company: for `type: promotion` an active promotion, for `type: plan` a promotion plan."}, "type": {"type": "string", "enum": ["promotion", "plan"], "description": "What `data.id` refers to. `promotion`: a single fixed promotion (one discount offer) applied directly to the space group. `plan`: a promotion plan \u2014 an automated, rules-based configuration (a default promotion plus occupancy / vacancy value-tier overrides) that selects the effective promotion for each space dynamically, instead of one fixed offer."}}}, "channel_type": {"type": "string", "enum": ["online", "instore_online"], "description": "Sales channel the promotion applies to. `online`: the customer-facing online channel (website / self-service rentals). `instore_online`: the in-store channel (staff-assisted / point-of-sale); if the same request does not also include a separate `online` entry, it is applied to the online channel too."}}}}, "sync": {"type": "boolean", "description": "Optional. When true, immediately propagates the group assignment down to the individual spaces instead of waiting for the nightly sync. Defaults to false."}}}, "examples": {"assignWithImmediateSync": {"summary": "Assign a promotion to a group and sync immediately", "value": {"unit_group_hashed_ids": ["aZ4n8Q", "bY7m2P"], "promotions": [{"channel_type": "online", "data": {"id": "pr0M0t10n1", "type": "promotion"}}], "sync": true}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"status": {"type": "string", "example": "success"}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "403": {"$ref": "#/components/responses/403"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/space-mix": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all space mix available in property", "description": "Groups a property's units into space-mix rows by size and category, each with its unit count, vacancy count and price range. It uses the property's website-category grouping profile when the property has one, and groups by category otherwise.\n\n**Cost:** Medium. About 1 second and up to about 130 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"space_mix": {"type": "array", "items": {"type": "object", "properties": {"width": {"type": "string", "description": "Width of the space group/space mix"}, "width_id": {"type": "string", "description": "Hashed id of the width"}, "length": {"type": "string", "description": "Length of the space group/space mix"}, "length_id": {"type": "string", "description": "Hashed id of the length"}, "height": {"type": "string", "description": "Height of the space group/space mix"}, "height_id": {"type": "string", "description": "Hashed id of the height"}, "category": {"type": "string", "description": "Category name", "nullable": true}, "description": {"type": "string", "description": "Description of the space group/space mix", "nullable": true}, "Units": {"type": "object", "properties": {"count": {"type": "integer", "description": "Count of the total units in the space group/space mix"}, "min_price": {"type": "integer", "description": "Minimum price for the units"}, "max_price": {"type": "integer", "description": "Maximum price for the units"}}}, "Vacant": {"type": "object", "properties": {"count": {"type": "integer", "description": "Total vacant units in the space group/space mix"}, "available": {"type": "integer", "description": "Total available units in the space group/space mix"}, "min_price": {"type": "number", "description": "Minimum price for the units", "nullable": true}, "max_price": {"type": "integer", "description": "Maximum price for the units", "nullable": true}}}, "id": {"type": "string", "description": "Id of the space group/space mix"}, "category_id": {"type": "string", "description": "Hashed id of the category"}, "Attributes": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the attribute (Eg. Height, Length, Width and Unit Type)"}, "value": {"type": "string", "description": "Value of the attribute"}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"propertyspacemix": {"summary": "Trimmed real response", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"space_mix": [{"width": "47", "width_id": "wnB9xptrj6", "length": "47", "length_id": "N5BXAVfmv3", "height": "47", "height_id": "6OBZamHAjZ", "category": "parking", "description": "parking", "unit_type_id": "w420NsmBy1", "Units": {"count": 2, "min_price": 1181, "max_price": 1181}, "Vacant": {"count": 0, "available": 0, "min_price": null, "max_price": null}, "id": "018549a24938b52ee93dbccf75c5d76b", "category_id": "k2M5pLs72J", "Attributes": [{"name": "width", "value": "47"}, {"name": "length", "value": "47"}, {"name": "height", "value": "47"}, {"name": "unit_type", "value": "parking"}]}, {"width": "10", "width_id": "N6jK5LtRv9", "length": "15", "length_id": "oLvpZ8Idj9", "height": "12", "height_id": "MojDYECJBY", "category": "Retail Space", "description": "Retail Space", "unit_type_id": "WEj67IYBe3", "Units": {"count": 2, "min_price": 165, "max_price": 300}, "Vacant": {"count": 0, "available": 0, "min_price": null, "max_price": null}, "id": "0436d6741933f6ed4448b280e12cb625", "category_id": "6v1bZxSD2y", "Attributes": [{"name": "width", "value": "10"}, {"name": "length", "value": "15"}, {"name": "height", "value": "12"}, {"name": "unit_type", "value": "storage"}]}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}, "operationId": "getPropertySpaceMix"}}, "/v1/companies/{company_id}/properties/{property_id}/space-mix/{space_mix_id}/units": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"$ref": "#/components/parameters/space_mix_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all units in space mix", "description": "Lists the units in one space-mix group. `space_mix_id` is either a grouping-profile group id or a legacy space-mix bucket id; both are returned as the `id` of a space-mix row. Results are paged with `limit` and `offset`; sort with `sortKey` and `sortOrder` sent together.\n\n**Cost:** Medium. About 0.7 seconds and 12 KB for 20 units, about 2.4 seconds and 59 KB at the maximum page size of 100.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"units": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed id of the unit"}, "category_id": {"type": "string", "description": "Hashed id of the category that the unit belongs"}, "space_mix_id": {"type": "string", "description": "Space mix id/ space group id"}, "address_id": {"type": "string", "description": "Hashed id of the address"}, "template_id": {"type": "string", "format": "nullable", "description": "Hashed id of the template", "nullable": true}, "product_id": {"type": "string", "description": "Hashed id of the product"}, "number": {"type": "string", "description": "Number of the unit"}, "floor": {"type": "string", "nullable": true}, "type": {"type": "string", "description": "Type of the unit Eg. storage, parking etc."}, "description": {"type": "string", "description": "Description of the unit", "nullable": true}, "price": {"type": "number", "description": "Price of the unit"}, "set_rate": {"type": "integer", "description": "Set rate of the unit"}, "default_price": {"type": "integer", "description": "Default price of the unit"}, "featured": {"type": "integer", "description": "Is the unit is featured or not"}, "available_date": {"type": "string", "format": "date", "description": "Available date of the unit for renting", "nullable": true}, "state": {"type": "string", "description": "Current state of the unit Eg. Pending, Leased, Remove Overlock etc."}, "next_lease_start": {"type": "string"}, "Address": {"type": "object", "properties": {}}, "length": {"type": "string", "description": "Length of the unit"}, "width": {"type": "string", "description": "Width of the unit"}, "height": {"type": "string", "description": "Height of the unit"}, "x": {"type": "integer", "format": "int32", "nullable": true}, "y": {"type": "integer", "format": "int32", "nullable": true}, "rotate": {"type": "string", "nullable": true}, "left": {"type": "string", "nullable": true}, "top": {"type": "string", "nullable": true}, "Lease": {"type": "string", "nullable": true}}}}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "format": "int32", "description": "Total count in the current page"}, "total": {"type": "integer", "format": "int32", "description": "Total count"}, "num_pages": {"type": "integer", "format": "int32", "description": "Total number of pages"}, "next": {"type": "string", "description": "Number of next page"}, "prev": {"type": "string", "description": "Number of previous page", "nullable": true}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"spacemixunits": {"summary": "Trimmed real response", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"units": [{"id": "kjgYdycOvW", "unit_vacant_days": 858, "category_id": "av3x18SP2A", "space_mix_id": "d43bf7520427d099d9ffe2a70c683089", "address_id": "nB9YqzDfrB", "template_id": null, "product_id": "knBmmUdBVD", "number": "00020", "floor": null, "type": "storage", "unit_type_id": "WEj67IYBe3", "description": null, "price": 1070, "set_rate": 1000, "default_price": 1000, "featured": 0, "available_date": null, "state": "Pending", "Address": {}, "length": "10", "width": "10", "height": "10", "x": null, "y": null, "rotate": null, "left": null, "top": null, "Lease": null, "Reservation": null}], "paging": {"count": 2, "total": 3180, "num_pages": 1590, "next": "https://api.tenantinc.com/v1/companies/kQoBXpBpnx/properties/85B73ubBGy/space-mix/d43bf7520427d099d9ffe2a70c683089/units?limit=2&offset=2", "prev": null}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "Forbidden", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Not authorized to access this resource", "message": ""}}}}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}, "operationId": "getSpaceMixUnits"}}, "/v1/companies/{company_id}/properties/{property_id}/units": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"$ref": "#/components/parameters/grouping_profile_id"}, {"$ref": "#/components/parameters/concise"}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer"}, "description": "Page size. Default 20, maximum 100."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer"}, "description": "Rows to skip."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all units in a property", "description": "Lists every unit of a property. Each unit carries its address, category, amenities (grouped by category), promotions, and, for a rented unit, the current lease and its tenants. Pass `concise=true` for a lighter, grouped list without the per-unit metrics. Results are paged with `limit` and `offset`; `paging.total` is the unit count.\n\n**Cost:** Heavy. About 1.7 seconds and 70 KB for a page of 20 full units; a concise page of 200 (`concise=true`) can reach about 5 seconds and 3 MB.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"oneOf": [{"type": "object", "properties": {"units": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "category_id": {"type": "string"}, "space_mix_id": {"type": "string", "description": "Should be space mix id/space group id."}, "address_id": {"type": "string"}, "template_id": {"type": "string", "nullable": true}, "unit_group_id": {"type": "string"}, "product_id": {"type": "string"}, "number": {"type": "string"}, "floor": {"type": "string", "nullable": true}, "type": {"type": "string"}, "description": {"type": "string", "nullable": true}, "price": {"type": "number", "description": "Sell price"}, "default_price": {"type": "number"}, "featured": {"type": "number"}, "available_date": {"type": "string", "nullable": true}, "state": {"type": "string", "description": "Current state of unit"}, "next_lease_start": {"type": "string", "nullable": true}, "length": {"type": "string"}, "width": {"type": "string"}, "height": {"type": "string"}, "x": {"type": "number", "nullable": true}, "y": {"type": "number", "nullable": true}, "rotate": {"type": "number", "nullable": true}, "left": {"type": "number", "nullable": true}, "top": {"type": "number", "nullable": true}, "Lease": {"type": "object", "properties": {"id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string", "nullable": true}, "rent": {"type": "number"}, "rent_paid_through": {"type": "string"}, "status": {"type": "number"}, "last_rent_raise": {"type": "string", "nullable": true}, "last_rent_raise_amount": {"type": "string", "nullable": true}, "future_rent_raise": {"type": "string", "nullable": true}, "future_rent_raise_amount": {"type": "string", "nullable": true}, "is_transferred": {"type": "number"}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "sort": {"type": "integer"}, "type": {"type": "string"}, "created_at": {"type": "string"}, "Contact": {"type": "object", "properties": {"salutation": {"type": "string", "nullable": true}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "suffix": {"type": "string"}, "email": {"type": "string"}, "company": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}}}}}}}}}}}, "Reservation": {"type": "object", "properties": {"id": {"type": "string"}}}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string", "nullable": true}, "zip": {"type": "string"}, "country": {"type": "string", "nullable": true}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "formatted_address": {"type": "string", "nullable": true}, "district": {"type": "string", "nullable": true}, "region": {"type": "string", "nullable": true}}}, "category": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "price": {"type": "number"}, "unit_type": {"type": "string"}}}, "Amenities": {"type": "object", "properties": {"Access": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "value": {"type": "string"}, "category_type": {"type": "string"}, "category_name": {"type": "string"}}}}}}}}}}}, {"type": "object", "description": "Response data", "properties": {"units": {"type": "array", "description": "Array of spaces object with concise data", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Space ID"}, "property_id": {"type": "string", "description": "Property ID"}, "unit_group_id": {"type": "string", "description": "Space Group ID which will vary based on the given Grouping Profile. This field will be empty if grouping_profile_id is not defined in query param"}, "number": {"type": "string", "description": "Number assigned to each individual space, in order to make it identifiable from all other spaces."}, "floor": {"type": "string", "description": "Floor/Storey at which the given space is designated.", "nullable": true}, "price": {"type": "integer", "format": "int32", "description": "Active Rent/Lease amount which the tenant must pay for a space"}, "default_price": {"type": "integer", "format": "int32", "description": "Default Rent/Lease amount set to the given space"}, "state": {"type": "string", "description": "Current status of this space. E.g., Leased, Available, Pending, etc."}, "created": {"type": "string", "format": "date", "description": "Date at which this space was created"}, "length": {"type": "string", "description": "Length of the given space"}, "width": {"type": "string", "description": "Width of the given space"}, "unit_type": {"type": "string", "description": "Space type of the given space, for example storage or parking. Use this rather than unit_type_id, which is obfuscated on output and cannot be compared."}, "category_id": {"type": "string", "description": "Category ID assigned to the space"}, "Category": {"type": "object", "nullable": true, "description": "Category assigned to the space. Null when the space has no category.", "properties": {"id": {"type": "string", "description": "Category ID"}, "name": {"type": "string", "description": "Category name"}}}, "Amenities": {"type": "object", "properties": {"category_name": {"description": "Here, the category_name is a dynamic key. It will be an amenity category name like Moving Options, Space Features, Renting and Payments, Access etc,.", "type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Amenity ID which is specific to a space."}, "name": {"type": "string", "description": "Amenity Name."}, "value": {"description": "Amenity value. Eg:- 'Split doors' is a value for the amenity door and 'Second Floor' is a value for the amenity floor.", "type": "string"}, "category_type": {"type": "string"}, "category_name": {"description": "Category of the given space. (Will be same as the parent key)", "type": "string"}}}}}}}}}, "paging": {"type": "object", "description": "Paging details", "properties": {"total": {"type": "integer", "format": "int32", "description": "Total number of records"}, "count": {"type": "integer", "format": "int32", "description": "Number records returned in the current response"}, "next": {"type": "string", "description": "Link to next page"}, "prev": {"type": "string", "description": "Link to previous page", "nullable": true}}}}}]}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"propertyunits": {"summary": "Trimmed real response", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"units": [{"id": "n1jJb5ukjg", "category_id": "6v1bZxSD2y", "space_mix_id": "0436d6741933f6ed4448b280e12cb625", "address_id": "Vgj8yqH4BJ", "template_id": null, "property_id": "85B73ubBGy", "unit_group_id": "", "product_id": "knBmmUdBVD", "number": "#B87", "floor": null, "type": "storage", "unit_type_id": "WEj67IYBe3", "description": "Test", "price": 300, "set_rate": 315, "default_price": 315, "featured": 1, "available_date": "2020-08-04", "state": "To Overlock", "next_lease_start": null, "created": "2020-05-18 08:01:04", "Address": {"id": "Vgj8yqH4BJ", "address": "5281 California Ave", "address2": "Suite 320", "city": "Irvine", "state": "CA", "neighborhood": "Downtown", "zip": "92617", "country": "United States", "lat": 34.04557, "lng": -118.250926, "formatted_address": "600 S Spring St, Los Angeles, CA 90014, USA", "region": null, "district": null, "unit_number": null, "created_at": "2023-12-26 07:53:36", "modified_at": "2026-05-07 10:31:23", "suburb_id": null, "previous_address": {"lat": 34.04557, "lng": -118.250926, "zip": "92617", "city": "Irvine", "state": "CA", "region": null, "address": "5281 California Ave", "country": "United States", "address2": "Suite 320", "district": null, "suburb_id": null, "created_at": "2023-12-26 07:53:36.000000", "modified_at": "2025-09-18 12:16:50.000000", "neighborhood": "Downtown", "formatted_address": "600 S Spring St, Los Angeles, CA 90014, USA"}}, "length": "15", "width": "10", "height": "12", "x": null, "y": null, "rotate": null, "left": null, "top": null, "Lease": null, "Images": [], "Floorplan": [], "Category": {"id": "6v1bZxSD2y", "company_id": "WEj67IYBe3", "name": "Retail Space", "description": "Retail Space", "price": "$850 - $1200", "unit_type": "storage", "unit_type_id": "WEj67IYBe3"}, "Amenities": {"Additional Amenities": [{"id": "3BE4JLEckj", "name": "Band Practice Allowed", "value": "No", "category_type": "external", "category_name": "Additional Amenities"}]}, "Promotions": [], "size": "10' x 15'", "area": 150, "set_rate_per_sqft": 2.1, "sell_rate_per_sqft": 2, "variance_amount": -15, "variance_percent": -4.76, "occupancy_percentage": 69.09, "unit_vacant_days": null, "walkThroughSort": 28, "AllocatedPromotions": [], "Reservation": null}], "paging": {"count": 2, "total": 6952, "num_pages": 3476, "next": "https://api.tenantinc.com/v1/companies/kQoBXpBpnx/properties/85B73ubBGy/units?limit=2&offset=2", "prev": null}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}, "operationId": "getPropertyUnits"}}, "/v1/companies/{company_id}/properties/": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all properties", "operationId": "getAllProperties", "description": "Lists the company's properties (storage facilities) that your application can access, with each property's address, phone numbers, email addresses, unit count, lease count and occupancy.\n\n**Cost:** Light. About 0.6 seconds and 60 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"properties": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "company_id": {"type": "string"}, "address_id": {"type": "string"}, "gds_id": {"type": "string"}, "name": {"type": "string"}, "number": {"type": "string", "nullable": true}, "description": {"type": "string", "nullable": true}, "status": {"type": "integer", "nullable": true}, "unit_count": {"type": "integer", "description": "Number of units at the property. Deleted and deactivated units are not counted."}, "lease_count": {"type": "integer", "description": "Number of current leases at the property: active leases with no end date or an end date after today."}, "is_day_closed": {"type": "boolean"}, "map_published_at": {"type": "string", "nullable": true}, "occupancy": {"type": "number", "nullable": true, "description": "lease_count divided by unit_count, as a percentage rounded to 2 decimals."}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string", "nullable": true}, "city": {"type": "string"}, "state": {"type": "string", "nullable": true}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "formatted_address": {"type": "string"}, "district": {"type": "string", "nullable": true}, "region": {"type": "string", "nullable": true}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sort": {"type": "integer"}, "status": {"type": "number"}}}}, "Emails": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "type": {"type": "string"}, "email": {"type": "string"}, "sort": {"type": "integer"}, "status": {"type": "number"}}}}, "Images": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "filename": {"type": "string"}, "file_path": {"type": "string"}, "sort": {"type": "string"}, "document_type_id": {"type": "string"}, "uploaded_by": {"type": "string"}, "type": {"type": "string"}, "upload_date": {"type": "string"}, "extension": {"type": "string"}, "encoding": {"type": "string"}, "mimetype": {"type": "string"}, "size": {"type": "string"}, "name": {"type": "string"}, "private": {"type": "boolean"}, "src": {"type": "string"}, "description": {"type": "string"}, "reference_number": {"type": "string"}, "foreign_id": {"type": "string"}, "status": {"type": "number"}, "downloading": {"type": "string"}, "fileloc": {"type": "string"}, "path": {"type": "string"}, "msg": {"type": "string"}, "Pages": {"type": "array", "items": {"type": "string"}}, "Revisions": {"type": "array", "items": {"type": "string"}}, "DocumentType": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "active": {"type": "number"}}}, "Leases": {"type": "array", "items": {"type": "string"}}, "Lease": {"type": "object", "properties": {}}, "signers": {"type": "array", "items": {"type": "string"}}, "cosigners": {"type": "array", "items": {"type": "string"}}, "admin_signers": {"type": "array", "items": {"type": "string"}}, "bucket_name": {"type": "string"}, "destination": {"type": "string"}, "destination_file_path": {"type": "string"}, "document": {"type": "string"}, "model": {"type": "string"}}}}}}, "description": "The properties, sorted by property number."}, "paging": {"type": "object", "properties": {"total": {"type": "integer", "description": "Number of properties returned."}, "count": {"type": "integer", "description": "Number of properties returned (same as total: the list is not paged)."}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"properties": {"summary": "One property (trimmed; the full list has 36)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"properties": [{"id": "85B73ubBGy", "company_id": "WEj67IYBe3", "address_id": "gjYQwd6Cej", "gds_id": "facde4c286035975df186e1deb6cf1372b5", "name": "UC Irvine Storage", "number": "UCI-1", "description": "StoreAll Self Storage  is one of the largest mini storage facilities in Los Angeles. We offer affordable storage units, anywhere in the city. Our friendly and knowledgeable staff can help you find the right storage unit for you and answer any questions you may have about our storage solutions", "status": 1, "unit_count": 6952, "lease_count": 4888, "is_day_closed": false, "map_published_at": null, "occupancy": 70.31, "Address": {"id": "gjYQwd6Cej", "address": "5281 California Ave 22", "address2": "Suite 9", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": "United States", "lat": 33.63552, "lng": -117.855854, "formatted_address": null, "district": "saaaaa", "region": null}, "Phones": [{"id": "MojDGcJ2Ya", "property_id": "85B73ubBGy", "type": "Main", "phone": "12524545678", "sort": 0, "status": 1}], "Emails": [{"id": "MojDGcJ2Ya", "property_id": "85B73ubBGy", "type": "Main", "email": "info@storeall.com", "sort": 0, "status": 1}], "Images": []}], "paging": {"total": 36, "count": 36}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID in the query is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}, "post": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create new property", "description": "Create a new property for the associated company", "requestBody": {"description": "Property data to create a new property for the company", "required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string"}, "legal_name": {"type": "string", "example": "Legal"}, "number": {"type": "string"}, "Emails": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "nullable": true}, "type": {"type": "string", "example": "Main"}, "email": {"type": "string"}}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "nullable": true}, "type": {"type": "string", "example": "Main"}, "phone": {"type": "string", "example": "+17676767676"}}}}, "Address": {"type": "object", "properties": {"country": {"type": "string", "example": "United States"}, "address": {"type": "string", "example": "street"}, "address2": {"type": "string", "example": "suite"}, "city": {"type": "string", "example": "Abbeville"}, "state": {"type": "string"}, "zip": {"type": "string", "example": "1111"}, "region": {"type": "string", "example": "region"}, "district": {"type": "string", "example": "district"}, "Suburb": {"type": "object", "properties": {"id": {"type": "string", "example": "yVvaKYikjm"}, "name": {"type": "string", "example": "s16767"}}}, "lat": {"type": "string", "example": "11.11"}, "lng": {"type": "string", "example": "-11.11"}}}, "Suburbs": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "example": "4OBqLEh1j9"}, "name": {"type": "string"}}}}, "MarketRegions": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "example": "6OBZQiAjZn"}, "name": {"type": "string", "example": "m1"}}}}, "Entity": {"type": "object", "properties": {"id": {"type": "string", "example": "k3BEEIkBAr"}, "name": {"type": "string"}}}, "merchandise_delivery": {"type": "integer", "example": 1}, "google_analytics_id": {"type": "string"}, "landing_page": {"type": "string"}, "tax_number": {"type": "string"}, "year_opened": {"type": "string", "example": "2024-11-01"}, "year_closed": {"type": "string", "example": "2024-11-30"}, "occupancy_threshold": {"type": "integer", "example": 1}, "performance_category": {"type": "string", "enum": ["new_center", "expanding_center", "performance_based"], "example": "new_center"}, "operations_manager": {"type": "string", "example": "MjRzdEUmjO"}, "same_store_class": {"type": "integer", "example": 1}, "build_type": {"type": "string", "enum": ["single_storied", "multi_storied", "mixed"]}, "web_cms_id": {"type": "string"}, "general_ledger_id": {"type": "string"}, "bank_id": {"type": "string"}, "tax_code": {"type": "string"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"property_id": {"type": "string", "example": "4OBqgwI129"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/properties/property_id", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get a single property", "operationId": "getProperty", "description": "Returns one property of the company: its name, number, description, address, phone numbers, email addresses, unit count and lease count.\n\n**Cost:** Light. About 0.6 seconds and 15 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"property": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the property."}, "company_id": {"type": "string"}, "address_id": {"type": "string"}, "name": {"type": "string"}, "number": {"type": "string"}, "description": {"type": "string"}, "status": {"type": "integer"}, "unit_count": {"type": "integer", "description": "Number of units at the property. Deleted units are not counted."}, "lease_count": {"type": "integer", "description": "Number of current leases at the property: active leases with no end date or an end date after today."}, "sent_gate_code": {"type": "boolean", "default": false}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string", "nullable": true}, "city": {"type": "string"}, "state": {"type": "string", "nullable": true}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "formatted_address": {"type": "string"}, "district": {"type": "string", "nullable": true}, "region": {"type": "string", "nullable": true}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sort": {"type": "integer"}}}}, "Emails": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "type": {"type": "string"}, "email": {"type": "string"}, "sort": {"type": "integer"}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"property": {"summary": "Sandbox property", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"property": {"id": "85B73ubBGy", "company_id": "WEj67IYBe3", "address_id": "gjYQwd6Cej", "name": "UC Irvine Storage", "number": "UCI-1", "description": "StoreAll Self Storage  is one of the largest mini storage facilities in Los Angeles. We offer affordable storage units, anywhere in the city. Our friendly and knowledgeable staff can help you find the right storage unit for you and answer any questions you may have about our storage solutions", "status": 1, "unit_count": 7078, "lease_count": 4890, "sent_gate_code": false, "Address": {"id": "gjYQwd6Cej", "address": "5281 California Ave 22", "address2": "Suite 9", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": "United States", "lat": 33.63552, "lng": -117.855854, "formatted_address": null, "district": "saaaaa", "region": null}, "Phones": [{"id": "MojDGcJ2Ya", "property_id": "85B73ubBGy", "type": "Main", "phone": "12524545678", "sort": 0}], "Emails": [{"id": "MojDGcJ2Ya", "property_id": "85B73ubBGy", "type": "Main", "email": "info@storeall.com", "sort": 0}]}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The property belongs to another company or your application cannot access it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Not authorized", "actual_cause": "Not authorized", "message": ""}}}}, "404": {"description": "The property ID is a valid ID but matches no property.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found.", "actual_cause": "Property not found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "put": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Update a property details", "description": "Update associated property for the associated company\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> manage_facility_info Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"description": "Property data to update the existing property for the company", "required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "example": "4OBqgwI129"}, "number": {"type": "string", "example": "ST11"}, "name": {"type": "string", "example": "Swagger Test"}, "legal_name": {"type": "string", "example": "Legal"}, "sent_gate_code": {"type": "boolean", "example": true}, "Emails": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "example": "N5BX3VFmj3"}, "type": {"type": "string", "example": "Main"}, "email": {"type": "string", "example": "a@a.com"}}}}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "example": "n1jJLxIkvg"}, "type": {"type": "string", "example": "Main"}, "phone": {"type": "string", "example": "17676767676"}}}}, "Address": {"type": "object", "properties": {"address": {"type": "string", "example": "street"}, "address2": {"type": "string", "example": "suite"}, "city": {"type": "string", "example": "Abbeville"}, "state": {"type": "string", "example": "AL"}, "country": {"type": "string", "example": "United States"}, "zip": {"type": "string", "example": "1111"}, "region": {"type": "string", "example": "region"}, "district": {"type": "string"}, "lat": {"type": "number", "format": "float", "example": 11.11}, "lng": {"type": "number", "format": "float", "example": -11.11}, "Suburb": {"type": "object", "properties": {"id": {"type": "string", "example": "yVvaKYikjm"}, "name": {"type": "string", "example": "s16767"}}}}}, "Suburbs": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "example": "Qojr8cevJw"}, "name": {"type": "string"}}}}, "MarketRegions": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "example": "WEj67IYBe3"}, "name": {"type": "string"}}}}, "Entity": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}}}, "merchandise_delivery": {"type": "integer", "example": 1}, "google_analytics_id": {"type": "string"}, "landing_page": {"type": "string", "example": "www.p.com"}, "tax_number": {"type": "string"}, "year_opened": {"type": "string", "example": "2024-11-01"}, "year_closed": {"type": "string", "example": "2024-11-30"}, "occupancy_threshold": {"type": "integer"}, "performance_category": {"type": "string", "enum": ["new_center", "expanding_center", "performance_based"], "example": "new_center"}, "operations_manager": {"type": "string", "example": "MjRzdEUmjO"}, "same_store_class": {"type": "integer", "example": 1}, "build_type": {"type": "string", "enum": ["single_storied", "multi_storied", "mixed"], "example": "single_storied"}, "web_cms_id": {"type": "string"}, "general_ledger_id": {"type": "string"}, "bank_id": {"type": "string"}, "tax_code": {"type": "string"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"property_id": {"type": "string", "example": "4OBqgwI129"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/gateway": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"name": "type", "in": "query", "required": false, "description": "Payment type whose gateway to return. Case-insensitive, defaults to `card`; supported values are `card`, `ach` (bank) and `directdebit` (Fat Zebra), and any other value returns an empty `gateway` list.\n", "schema": {"type": "string", "default": "card", "example": "card"}}], "x-nectar-endpoint-name": "/v1/companies/company_id/properties/property_id/gateway", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get payment gateway configuration", "description": "Find out which payment gateway a property uses for a given payment type (card, ACH, or direct debit) and get the public keys needed to securely collect card or bank details in the browser.\nIf `gateway_config` is returned, load the matching gateway's SDK with its `public_key` to tokenize the details in the browser, so raw card and bank numbers never reach your servers. If it is `null`, that gateway does not support in-browser tokenization for this type, so use a hosted payment link instead.\nNo secrets are ever returned. Because the request uses your API key, call it from your server and forward only `gateway_config` to the browser; keep your API keys out of client-side code.\n", "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"gateway": {"type": "array", "description": "Processor name for the requested type, for example tenant_payments, tenant_payments_stripe, fatzebra, tsys, forte or authorizenet. Empty when none is configured. At most one entry.", "items": {"type": "string", "example": "tenant_payments"}}, "hosted_card": {"type": "boolean", "description": "Company setting \"Allow Hosted Card Payments\". Controls whether Hummingbird's own pages use hosted card fields; Tenant Payments returns a gateway_config only while it is true."}, "gateway_config": {"type": "object", "nullable": true, "description": "Browser tokenization config. Present for Stripe (card and ach), and for Tenant Payments (card) while hosted_card is true and a public key is set. Null for every other processor and type.", "properties": {"gateway": {"type": "string", "enum": ["tenant_payments_stripe", "tenant_payments"], "description": "Which SDK to load. tenant_payments_stripe means Stripe.js; tenant_payments means Global Payments globalpayments.js."}, "type": {"type": "string", "enum": ["card", "ach"]}, "public_key": {"type": "string", "description": "Public key for the gateway's browser SDK. Stripe publishable key (pk_...) or Tenant Payments public API key (pkapi_...). Can only tokenize, never charge, so it is safe to use in the browser."}, "merchant_account": {"type": "string", "nullable": true, "description": "Stripe only. The property's Stripe connected account id (acct_...); pass it as stripeAccount when initialising Stripe.js. Null for Tenant Payments."}, "currency": {"type": "string", "example": "usd"}}}}}}}, "examples": {"tenant_payments_card": {"summary": "Tenant Payments (ProPay / Global Payments), type=card", "value": {"status": 200, "data": {"gateway": ["tenant_payments"], "hosted_card": true, "gateway_config": {"gateway": "tenant_payments", "type": "card", "public_key": "pkapi_prod_xxxxxxxxxxxxxxxx", "merchant_account": null, "currency": "usd"}}}}, "tenant_payments_card_keyed": {"summary": "Tenant Payments, type=card, hosted card payments off", "value": {"status": 200, "data": {"gateway": ["tenant_payments"], "hosted_card": false, "gateway_config": null}}}, "stripe_card": {"summary": "Stripe, type=card", "value": {"status": 200, "data": {"gateway": ["tenant_payments_stripe"], "hosted_card": false, "gateway_config": {"gateway": "tenant_payments_stripe", "type": "card", "public_key": "pk_live_xxxxxxxxxxxxxxxx", "merchant_account": "acct_xxxxxxxxxxxxxxxx", "currency": "usd"}}}}, "stripe_ach": {"summary": "Stripe, type=ach", "value": {"status": 200, "data": {"gateway": ["tenant_payments_stripe"], "hosted_card": false, "gateway_config": {"gateway": "tenant_payments_stripe", "type": "ach", "public_key": "pk_live_xxxxxxxxxxxxxxxx", "merchant_account": "acct_xxxxxxxxxxxxxxxx", "currency": "usd"}}}}, "other_gateway": {"summary": "Fat Zebra, TSYS, Forte or Authorize.net", "value": {"status": 200, "data": {"gateway": ["fatzebra"], "hosted_card": true, "gateway_config": null}}}, "not_configured": {"summary": "No gateway for the requested type", "value": {"status": 200, "data": {"gateway": [], "hosted_card": false, "gateway_config": null}}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"$ref": "#/components/responses/403"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/tax-rates": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get tax rates", "operationId": "getTaxRates", "description": "Lists the tax rates set up for the property.\n\n**Cost:** Light. About 0.3 seconds and 2 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The property belongs to another company or your application cannot access it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Not authorized", "actual_cause": "Not authorized", "message": ""}}}}, "404": {"description": "The property ID is a valid ID but matches no property.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found.", "actual_cause": "Property not found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "post": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create tax rate", "description": "Create tax rate for associated property with the associated company.\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"tax_rates": {"type": "array", "items": {"type": "object", "properties": {"tax_profile_id": {"type": "string"}, "tax_rate": {"type": "number"}, "type": {"type": "string"}}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"data": {"type": "object", "properties": {"tax_rates": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}}}}}}, "status": {"type": "integer"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/rate-management": {"get": {"tags": ["Rate-Management"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/properties/property_id/rate-management", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get property rate management configuration", "operationId": "getPropertyRateManagementConfiguration", "description": "Returns the rate management setup of a property: whether it is on, the space grouping profile it uses, the rate engine that sets the rates (Hummingbird or a connected pricing service) and how rates are rounded. A property that has never been set up returns the default setup: `active` is false and `rate_engine` is `hummingbird`.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"active": {"type": "boolean", "description": "Whether rate management is on for the property."}, "round_to": {"type": "string", "nullable": true, "enum": [null, "nearest_full", "nearest_half", "up_full", "up_half", "down_full", "down_half"], "description": "How rates are rounded, to a whole dollar (`full`) or a half dollar (`half`), to the nearest one, always up or always down. null when no rounding is set."}, "space_group_profile": {"type": "object", "description": "The space grouping profile used for rate management.", "properties": {"id": {"type": "string", "nullable": true, "description": "Hashed ID of the space grouping profile. null when none is set. Use in: space_group_id of Get space group details (GET /properties/{property_id}/space-groups/{space_group_id}/groups)."}, "name": {"type": "string", "nullable": true, "description": "Name of the space grouping profile. null when none is set."}}}, "rate_engine": {"type": "string", "enum": ["hummingbird", "prorize", "veritec", "price_monster", "now_metrics", "streamline", "storageops"], "description": "The system that sets the property's rates. `hummingbird` when Hummingbird sets them."}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"active": true, "round_to": "nearest_half", "space_group_profile": {"id": "bPvk9Gi9jV", "name": "Streamline Group"}, "rate_engine": "veritec"}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The property ID is a valid ID but matches no property of the company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found", "actual_cause": "Property not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "put": {"tags": ["Rate-Management"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/properties/property_id/rate-management", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create/update property rate management configuration", "description": "Create/update rate management configurations for a property.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> manage_rate_management Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"active": {"type": "boolean"}, "round_to": {"type": "string", "enum": [null, "nearest_full", "nearest_half", "up_full", "up_half", "down_full", "down_half"], "description": "Describes the strategy to round values"}, "space_group_profile": {"type": "object", "properties": {"id": {"type": "string"}}}, "rate_engine": {"type": "string", "enum": ["prorize", "hummingbird", "veritec"]}}}}}}, "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "number", "description": "HTTP Status code", "example": 200}, "message": {"type": "string"}, "data": {"type": "object", "description": "New rate plan details", "properties": {"status": {"type": "string", "example": "success"}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/properties/{property_id}/insurances": {"parameters": [{"in": "path", "name": "company_id", "required": true, "schema": {"type": "string"}}, {"in": "path", "name": "property_id", "required": true, "schema": {"type": "string"}}, {"in": "query", "name": "unit_type_id", "schema": {"type": "string"}, "description": "unit type id of a space"}], "get": {"parameters": [{"in": "query", "name": "unit_type_id", "required": false, "schema": {"type": "string"}, "example": "WEj67IYBe3", "description": "<span style=\"display:inline-block;padding:2px 10px;border-radius:4px;background:#fdeceb;color:#d41f1c;font-family:Courier,monospace;font-weight:normal;font-size:12px;line-height:1.5\">required if unit_type_ids is not sent</span>\n\nID of the space type (for example storage or parking) to list insurances for. Ignored when unit_type_ids is sent. Default: none. Use in: Retrieve Company Space Management and Space Type Details (GET /v2/space-management/space-types)."}, {"in": "query", "name": "unit_type_ids", "required": false, "schema": {"type": "string"}, "example": "[WEj67IYBe3,w420NsmBy1]", "description": "<span style=\"display:inline-block;padding:2px 10px;border-radius:4px;background:#fdeceb;color:#d41f1c;font-family:Courier,monospace;font-weight:normal;font-size:12px;line-height:1.5\">required if unit_type_id is not sent</span>\n\nSeveral space type IDs, comma-separated inside square brackets. The brackets are optional. Default: none. Use in: Retrieve Company Space Management and Space Type Details (GET /v2/space-management/space-types)."}], "tags": ["Properties"], "x-nectar-endpoint-name": "/v2/companies/company_id/properties/property_id/insurances", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all insurances for a property", "operationId": "getPropertyInsurances", "description": "Returns the insurance plans (tenant protection) offered at one property for one or more space types, with their coverage, premium, deductible and accounting settings. Send unit_type_id or unit_type_ids.\n\n**Cost:** Light. About 0.3 to 1 second and 20 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"insurances": {"type": "array", "description": "insurance plans", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "id of an insurance"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "coverage": {"type": "string"}, "premium_value": {"type": "number"}, "premium_type": {"type": "string", "description": "Currency symbol, e.g. \"$\""}, "premium": {"type": "string"}, "msg": {"type": "string"}, "deductible": {"type": "number", "nullable": true}, "prorate": {"type": "integer"}, "prorate_out": {"type": "integer"}, "recurring": {"type": "integer"}, "taxable": {"type": "integer"}, "unit_type": {"type": "string"}, "unit_type_id": {"type": "string"}, "income_account_id": {"type": "string", "nullable": true}, "gl_account_code": {"type": "string", "nullable": true}, "gl_account_name": {"type": "string", "nullable": true}, "gl_account_active": {"type": "integer", "nullable": true}, "insurance_type": {"type": "string", "description": "'library' or 'table_rate'"}, "default_type": {"type": "string"}, "type": {"type": "string", "description": "'product'"}, "product_id": {"type": "string"}, "status": {"type": "integer"}, "Product": {"type": "object"}, "Properties": {"type": "array", "description": "List of associated property IDs", "items": {"type": "object", "properties": {"id": {"type": "string"}}}}, "Vendor": {"type": "object", "description": "vendor details", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "phone": {"type": "string"}, "email": {"type": "string"}}}, "TableRateTiers": {"type": "array", "items": {"type": "object", "properties": {"premium_rate": {"type": "integer"}, "coverage_unit": {"type": "integer"}, "coverage_limit_start": {"type": "integer"}, "coverage_limit": {"type": "integer"}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"storage": {"summary": "unit_type_id = storage (trimmed to one insurance)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"insurances": [{"id": "N5BXMPTmv3", "company_id": "WEj67IYBe3", "name": "Niharika test", "description": "Bader Insurance Company", "coverage": "4000", "premium_value": 12, "premium_type": "$", "premium": "", "msg": "", "deductible": 500, "prorate": 1, "prorate_out": 0, "recurring": 1, "taxable": 0, "unit_type": "storage", "unit_type_id": "WEj67IYBe3", "income_account_id": "XNv4plurve", "gl_account_code": null, "gl_account_name": "Insurance Sales", "gl_account_active": 1, "insurance_type": "library", "default_type": "insurance", "type": "product", "product_id": "420NENimBy", "status": 1, "Product": {}, "Properties": [], "Vendor": {}}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id or unit_type_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "An ID is a valid ID but matches no record.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"property": {"summary": "property_id matches no property", "value": {"status": 404, "data": {}, "msg": "Property not found.", "actual_cause": "Property not found.", "message": ""}}, "unit_type": {"summary": "unit_type_id matches no space type", "value": {"status": 404, "data": {}, "msg": "Unit type not found", "actual_cause": "Unit type not found", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/settings/reservation": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get reservation settings for a property", "operationId": "getPropertyReservationSettings", "description": "Returns the property's reservation settings. If the property has no reservation settings of its own, the company's settings are returned.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"maxAdvanceReservation": {"type": "string", "description": "How many days ahead a reservation can be made, as a whole number in a string, for example \"9\"."}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"settings": {"summary": "Sandbox property", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"maxAdvanceReservation": "9"}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}, "post": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create reservation settings for a property", "description": "Create or update reservation settings for a property", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"maxAdvanceReservation": {"type": "number", "example": 10, "description": "It is only possible to make reservations within these days in advance"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/unit_groups/{unit_group_id}/rate-changes": {"post": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"$ref": "#/components/parameters/unit_group_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Change sell price for all spaces in a unit group", "description": "Change sell price for all spaces in a unit group", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"price": {"type": "number", "description": "Space sell price"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/units/rate-changes": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"in": "query", "name": "from_date", "schema": {"type": "string", "example": "2022-12-25", "description": "This will return every rate change that has been applied since the given date."}}, {"in": "query", "name": "to_date", "schema": {"type": "string", "example": "2023-01-15", "description": "This will return every rate change that has been applied before the given date."}}], "x-nectar-endpoint-name": "/v1/companies/company_id/properties/property_id/units/rate-changes", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all rate changes", "description": "Lists each unit's rate-change history for a property: for every unit that has rate changes, the price and the start and end dates of each change. Narrow the window with `from_date` and `to_date` (YYYY-MM-DD). Results are paged with `limit` and `offset`.\n\n**Cost:** Medium. About 0.6 seconds and 140 KB for a page of 20 units, about 0.9 seconds and 640 KB at the maximum page size of 100.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"unit_rate_changes": {"type": "array", "items": {"type": "object", "properties": {"unit_id": {"type": "string"}, "rate_changes": {"type": "array", "items": {"type": "object", "properties": {"price": {"type": "number"}, "start_date": {"type": "string"}, "end_date": {"type": "string", "nullable": true}}}}}}}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "format": "int32", "description": "Total count in the current page"}, "total": {"type": "integer", "format": "int32", "description": "Total count on all pages"}, "num_pages": {"type": "integer", "format": "int32", "description": "Total number of pages"}, "next": {"type": "string", "description": "Number of the next page"}, "prev": {"type": "string", "format": "nullable", "description": "Number of the previous page", "nullable": true}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"unitratechanges": {"summary": "Trimmed real response", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"unit_rate_changes": [{"unit_id": "JlBN9nULjg", "rate_changes": [{"price": 100, "start_date": "18-05-2020", "end_date": "30-09-2020"}, {"price": 10, "start_date": "30-09-2020", "end_date": "19-05-2021"}]}], "paging": {"count": 2, "total": 6952, "num_pages": 3476, "next": "https://api.tenantinc.com/v1/companies/kQoBXpBpnx/properties/85B73ubBGy/units/rate-changes?limit=2&offset=2", "prev": null}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}, "operationId": "getUnitRateChanges"}}, "/v1/companies/{company_id}/properties/{property_id}/units/available": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"$ref": "#/components/parameters/limit"}, {"$ref": "#/components/parameters/offset"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all available units in a property", "description": "Lists the units that can be rented now at a property. Results are paged with `limit` and `offset`; sort with `sortKey` and `sortOrder` sent together.\n\n**Cost:** Medium. About 0.6 seconds and 24 KB for 20 units, about 1.6 seconds and 117 KB at the maximum page size of 100.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"units": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "category_id": {"type": "string"}, "space_mix_id": {"type": "string", "description": "Should be space mix id/space group id"}, "address_id": {"type": "string"}, "template_id": {"type": "string", "nullable": true}, "product_id": {"type": "string"}, "number": {"type": "string"}, "floor": {"type": "string", "nullable": true}, "type": {"type": "string", "description": "space type", "example": "storage,parking"}, "description": {"type": "string", "nullable": true}, "price": {"type": "number", "description": "sell rate of unit"}, "default_price": {"type": "number", "description": "set rate of unit"}, "featured": {"type": "number"}, "available_date": {"type": "string", "nullable": true}, "state": {"type": "string"}, "next_lease_start": {"type": "string", "format": "nullable"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string", "nullable": true}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number"}, "lng": {"type": "number"}, "formatted_address": {"type": "string", "nullable": true}, "district": {"type": "string"}, "region": {"type": "string", "nullable": true}}}, "length": {"type": "string"}, "width": {"type": "string"}, "height": {"type": "string"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"availableunits": {"summary": "Trimmed real response", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"units": [{"id": "1jJ5E0xck2", "unit_vacant_days": 83, "category_id": "k2MgV5T7BJ", "space_mix_id": "d43bf7520427d099d9ffe2a70c683089", "address_id": "gjYQwd6Cej", "template_id": null, "product_id": "knBmmUdBVD", "number": "MAC293", "floor": null, "type": "storage", "unit_type_id": "WEj67IYBe3", "description": null, "price": 1000, "set_rate": 1000, "default_price": 1000, "featured": 0, "available_date": null, "state": "Available", "Address": {"id": "gjYQwd6Cej", "address": "5281 California Ave 22", "address2": "Suite 9", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": "United States", "lat": 33.63552, "lng": -117.855854, "formatted_address": null, "region": null, "district": "saaaaa", "unit_number": null, "created_at": "2026-03-23 20:42:56", "modified_at": "2026-05-07 10:31:23", "suburb_id": null, "previous_address": {"lat": 33.63552, "lng": -117.855854, "zip": "92617", "city": "Irvine", "state": "CA", "region": null, "address": "5281 California Ave 22", "country": "United States", "address2": "Suite 9", "district": "saaaaa", "suburb_id": null, "created_at": "2026-03-23 20:42:56.000000", "modified_at": "2026-03-23 20:42:56.000000", "neighborhood": null, "formatted_address": null}}, "length": "10", "width": "10", "height": "10"}], "paging": {"total": 1768, "count": 2, "next": "https://api.tenantinc.com/v1/companies/kqobxpbpnx/properties/85B73ubBGy/units/available?limit=2&offset=2", "prev": "https://api.tenantinc.com/v1/companies/kqobxpbpnx/properties/85B73ubBGy/units/available?limit=2&offset=0"}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "Not found", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Property not found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}, "operationId": "getAvailableUnits"}}, "/v1/companies/{company_id}/rate-management/rate-changes": {"post": {"tags": ["Rate-Management"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create rent change", "description": "Create rent for selected leases.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"property_id": {"type": "string", "description": "Property ID"}, "name": {"type": "string", "description": "Rent change name."}, "type": {"type": "string", "description": "Rent change type.", "example": "automatic, manual, [Integration types]"}, "change_amt": {"type": "string", "description": "Rent change amount."}, "change_direction": {"type": "string", "description": "They are of two types Increase and decrease, Increase type denotes the increment of the rent amount from the current amount whereas the decrease denotes the decrement of rent amount from the current rent amount.", "example": "Increase, decrease."}, "change_type": {"type": "string", "description": "They are of three types, fixed, dollar and percent. If it is fixed then the rent change amount will be saved as the new rent amount, here the change direction won't be taken into consideration. In the case of dollar, the rent will be increased or decreased based on the rent change direction. If it is percent, the rent will be increased or decreased based on the rent change direction in terms of percentage.", "example": "fixed, dollar, percent"}, "leases": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Lease ID."}}}}, "target_date": {"type": "string", "format": "date", "description": "Rent change target date"}, "trigger": {"type": "string", "description": "Trigger rent change after start of lease or after last rent change.", "example": "start_of_lease, last_rent_change"}, "rounding": {"type": "string", "example": "up_half, up_full, down_half, down_full, nearest_half, nearest_full"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"document_id": {"type": "string"}, "rate_change_id": {"type": "string"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}, "get": {"tags": ["Rate-Management"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get rate changes", "operationId": "getRateChanges", "description": "Returns the open rate changes of the properties your application can access: rent increases or decreases scheduled for existing tenants that have not been completed, skipped or deleted, earliest target date first.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB when no rate changes match.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/merchandise": {"get": {"tags": ["Merchandise"], "x-nectar-endpoint-name": "/v2/companies/company_id/merchandise", "x-nectar-visibility": "public", "x-nectar-scope": "public", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "source", "in": "query", "required": false, "schema": {"type": "string"}, "description": "Filter merchandise based on the source. Only recognized value is box_shop; any other value is ignored (not validated/rejected).", "example": "box_shop"}, {"name": "search", "in": "query", "required": false, "schema": {"type": "string"}, "description": "Return only merchandise whose name contains this text (case-insensitive), for example `Tape`. Default: none (all merchandise)."}], "summary": "Get all merchandise of company", "description": "Get all merchandise of the company, with the properties each item is sold at and its inventory summary. `total_summary` always covers all merchandise of the company: `search` and `source` do not change it.\n\n**Cost:** Heavy. About 1.5 seconds and 215 KB for 111 items; about 4.5 seconds and 940 KB for 721 items. Time and size grow with the number of items. Not paged.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> view_merchandise Hummingbird permission required. Contact Nectar team.</small>\n", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"merchandise": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique identifier for the merchandise"}, "company_id": {"type": "string", "description": "ID of the company the merchandise belongs to"}, "name": {"type": "string", "description": "Name of the merchandise"}, "description": {"type": "string", "description": "Description of the merchandise", "nullable": true}, "box_shop": {"type": "boolean", "description": "Indicates if the merchandise is also a boxshop item"}, "taxable": {"type": "integer", "description": "Indicates if the merchandise is taxable (1 for true, 0 for false)"}, "prorate": {"type": "integer", "description": "Indicates if the merchandise is prorated"}, "weight": {"type": "number", "format": "float", "description": "Weight of the merchandise", "nullable": true}, "weight_unit": {"type": "string", "description": "Unit of weight measurement"}, "default_cost": {"type": "number", "format": "float", "description": "Default cost of the merchandise"}, "price": {"type": "number", "format": "float", "description": "Price of the merchandise", "nullable": true}, "sku": {"type": "string", "description": "Stock Keeping Unit of the merchandise"}, "quantity_per_package": {"type": "integer", "description": "Number of items per package", "nullable": true}, "inventory_threshold": {"type": "integer", "description": "Threshold value for inventory alerts", "nullable": true}, "summary_inventory": {"type": "object", "nullable": true, "properties": {"id": {"type": "string", "nullable": true}, "modified_at": {"type": "string", "nullable": true, "description": "Timestamp the inventory summary was last recalculated"}, "total_remaining_inventory": {"type": "integer", "nullable": true}, "total_average_weighted_cost": {"type": "number", "format": "float", "nullable": true}, "total_default_cost": {"type": "number", "format": "float", "nullable": true}, "modified_by_first": {"type": "string", "nullable": true}, "modified_by_last": {"type": "string", "nullable": true}}}, "created_by": {"type": "string", "description": "ID of the user who created the merchandise", "nullable": true}, "created_by_first": {"type": "string", "description": "First name of the user who created the merchandise", "nullable": true}, "created_by_last": {"type": "string", "description": "Last name of the user who created the merchandise", "nullable": true}, "status": {"type": "integer", "description": "Status of the merchandise (1 for active, 0 for inactive)"}, "Properties": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique identifier for the property"}, "property_name": {"type": "string", "description": "Name of the associated property"}, "inventory": {"type": "integer", "nullable": true, "description": "Inventory level for the property. Only present when the request used source=box_shop."}}}}, "Images": {"type": "array", "items": {"type": "string", "description": "List of image URLs associated with the merchandise"}}, "gl_account_code": {"type": "string", "description": "GL account code related to the merchandise", "nullable": true}, "gl_account_name": {"type": "string", "description": "GL account name related to the merchandise", "nullable": true}, "gl_account_active": {"type": "integer", "nullable": true, "description": "Whether the GL account is active (1) or not (0)"}, "recurring": {"type": "integer", "description": "Indicates if the merchandise is recurring (1 for true, 0 for false)"}, "default_type": {"type": "string", "description": "Always 'product'"}, "type": {"type": "string", "description": "Always 'product'"}, "product_id": {"type": "string", "description": "ID of the underlying product record"}, "product_category_id": {"type": "string", "nullable": true}, "prorate_out": {"type": "integer", "description": "Whether the merchandise is prorated on move-out"}, "negative_inventory": {"type": "integer", "nullable": true, "description": "Whether negative inventory is allowed (1) or not (0)"}, "buy_back": {"type": "boolean", "description": "Whether this item can be bought back from tenants"}, "is_return": {"type": "boolean", "description": "Whether this item can be returned"}, "decimal_qty_allowed": {"type": "boolean", "description": "Whether fractional quantities are allowed"}, "length": {"type": "string", "nullable": true, "description": "Physical length of the item, as a string (for example \"10\")"}, "width": {"type": "string", "nullable": true, "description": "Physical width of the item, as a string (for example \"10\")"}, "height": {"type": "string", "nullable": true, "description": "Physical height of the item, as a string (for example \"10\")"}, "volume": {"type": "string", "nullable": true, "description": "Physical volume of the item, as a string (for example \"10\")"}, "thickness": {"type": "string", "nullable": true, "description": "Physical thickness of the item, as a string (for example \"10\")"}, "wall_strength": {"type": "string", "nullable": true, "description": "Wall strength rating of the item, as a string (for example \"10\")"}, "manufacturing_country": {"type": "string", "nullable": true, "description": "Country of manufacture"}, "percent_recycled": {"type": "string", "nullable": true, "description": "Percentage of recycled material, as a string (for example \"10\")"}, "material": {"type": "string", "nullable": true, "description": "Material the item is made of"}, "return_threshold_type": {"type": "string", "description": "How the return threshold is measured, e.g. 'percent'"}, "return_threshold_value": {"type": "integer", "description": "Return threshold value, interpreted per return_threshold_type"}, "modified_by": {"type": "string", "nullable": true, "description": "ID of the user who last modified the merchandise"}, "modified_by_first": {"type": "string", "nullable": true, "description": "First name of the user who last modified the merchandise"}, "modified_by_last": {"type": "string", "nullable": true, "description": "Last name of the user who last modified the merchandise"}, "income_account_id": {"type": "string", "nullable": true, "description": "ID of the income GL account"}, "msg": {"type": "string", "description": "Reserved for status messages; empty in normal responses"}, "Product": {"type": "object", "description": "Always an empty object; not populated by this endpoint"}, "Vendor": {"type": "object", "description": "Vendor details when a vendor is linked to the underlying product; empty object if none"}}}}, "total_summary": {"type": "object", "properties": {"total_remaining_inventory": {"type": "integer", "description": "Total remaining inventory for the company", "nullable": true}, "total_cost": {"type": "number", "format": "float", "description": "Total cost of merchandise in inventory", "nullable": true}}, "description": "Inventory totals for all merchandise of the company. Both values are null when the company has no inventory."}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"sandbox": {"summary": "Sandbox company (trimmed to one item and one property)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"merchandise": [{"id": "WEj67IYBe3", "company_id": "WEj67IYBe3", "name": "Green Eco Friendly Tape", "description": "Variable rate for quantityx. ", "taxable": 0, "prorate": 0, "prorate_out": 0, "default_type": "product", "type": "product", "product_id": "MjRd9ehmvO", "buy_back": false, "is_return": true, "weight_unit": "lbs", "weight": 1, "length": null, "width": null, "volume": null, "thickness": null, "wall_strength": null, "decimal_qty_allowed": false, "manufacturing_country": null, "percent_recycled": null, "material": null, "height": null, "default_cost": 0.02, "quantity_per_package": 1, "negative_inventory": 1, "inventory_threshold": 0, "summary_inventory": {"id": "GeBnd7S62A", "modified_at": "2025-12-11 15:23:23", "total_remaining_inventory": 127, "total_average_weighted_cost": 254, "total_default_cost": 254, "modified_by_first": "<first name>", "modified_by_last": "<last name>"}, "created_by": null, "created_by_first": null, "created_by_last": null, "modified_by": "VvaKgrYHkj", "modified_by_first": "<first name>", "modified_by_last": "<last name>", "status": 1, "box_shop": false, "product_category_id": null, "return_threshold_type": "percent", "return_threshold_value": 100, "msg": "", "Product": {}, "Properties": [{"id": "7kjVG0cPB5", "property_name": "Hamza Property"}], "Images": [], "gl_account_code": "4535-000-000", "gl_account_name": "Merchandise Sales", "gl_account_active": 1, "recurring": 0, "Vendor": {}, "income_account_id": "yVvaNXTk2m", "price": 100, "sku": "ECO-11"}], "total_summary": {"total_remaining_inventory": 3208, "total_cost": 27766.46}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/rent-management/rent-changes": {"get": {"tags": ["Rent-Management"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer", "default": 20}, "description": "Number of rent changes to return. Default: 20. Values above 100 are returned as 100. 0, a negative number or a value that is not a number returns 20."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer", "default": 0}, "description": "Number of rent changes to skip before the first one returned. Default: 0. A negative number or a value that is not a number is treated as 0."}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "array", "items": {"type": "string"}}, "description": "Hashed ID of a property. Only rent changes of this property are returned. Send the parameter more than once for several properties. Default: every property your application can access. Use in: Get a single property (GET /properties/{property_id}).", "example": ["85B73ubBGy"]}, {"in": "query", "name": "month", "required": false, "schema": {"type": "string"}, "description": "Only rent changes that take effect in this calendar month. Format YYYY-MM. When month is sent, start_date and end_date are ignored. Default: none.", "example": "2026-10"}, {"in": "query", "name": "start_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "Only rent changes that take effect on or after this date. Format YYYY-MM-DD. Default: none.", "example": "2026-10-01"}, {"in": "query", "name": "end_date", "required": false, "schema": {"type": "string", "format": "date"}, "description": "Only rent changes that take effect on or before this date. Format YYYY-MM-DD. Default: none.", "example": "2026-10-31"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get rent change report", "operationId": "getRentChangeReport", "description": "Returns the rent changes of the properties your application can access, with the tenant, the space and the old and new rent of each. It is the same list as the Review Rent Change Recommendations queue in Hummingbird. Filter by property and by effective date (month, or start_date and end_date). Results are ordered by effective date, oldest first, and paged with limit and offset; paging.total is the number of matching rent changes.\n\n**Cost:** Heavy. About 1 to 2 seconds and 35 KB for the default page of 20; about 2 to 5 seconds and 170 KB for the maximum page of 100.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"rent_changes": {"type": "array", "description": "Rent changes, oldest effective date first.", "items": {"type": "object", "properties": {"property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "property_name": {"type": "string", "description": "Property name."}, "property_number": {"type": "string", "description": "Property code/number (e.g. S1002)."}, "property_address": {"type": "string", "description": "Property street address."}, "property_address2": {"type": "string", "nullable": true, "description": "Property address line 2."}, "property_city": {"type": "string", "description": "Property city."}, "property_state": {"type": "string", "nullable": true, "description": "Property state/province."}, "property_zip": {"type": "string", "description": "Property ZIP/postal code."}, "property_country": {"type": "string", "description": "Property country."}, "tenant_id": {"type": "string", "description": "Hashed ID of the primary tenant's contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "tenant_name": {"type": "string", "description": "Tenant/customer full name."}, "tenant_email": {"type": "string", "nullable": true, "description": "Tenant/customer email address."}, "tenant_address": {"type": "string", "nullable": true, "description": "Tenant street address."}, "tenant_address2": {"type": "string", "nullable": true, "description": "Tenant address line 2."}, "tenant_city": {"type": "string", "nullable": true, "description": "Tenant city."}, "tenant_state": {"type": "string", "nullable": true, "description": "Tenant state/province."}, "tenant_zip": {"type": "string", "nullable": true, "description": "Tenant ZIP/postal code."}, "tenant_country": {"type": "string", "nullable": true, "description": "Tenant country."}, "tenant_space_count": {"type": "string", "description": "Number of spaces the tenant currently rents, for example \"2\"."}, "unit_id": {"type": "string", "description": "Hashed ID of the space. Use in: Get details of a unit (GET /units/{unit_id})."}, "unit_number": {"type": "string", "description": "Space number."}, "unit_size": {"type": "string", "description": "Space size label (e.g. 12' x 16')."}, "unit_type": {"type": "string", "description": "Space type (e.g. storage, parking)."}, "tenant_space_group_occupancy": {"type": "number", "description": "Occupancy ratio of the space group the unit belongs to (0.785 = 78.5%)."}, "rentchange_notification_date": {"type": "string", "format": "date", "description": "Date the rent-change notice is scheduled to be sent."}, "rentchange_type": {"type": "string", "description": "How the change was generated: Manual, Automated, or a pricing service (Prorize, Veritec, Price Monster, Now Metrics, Streamline, StorageOps)."}, "tenant_selected_rent_plan": {"type": "string", "description": "Name of the rent plan applied to the lease. `-` when none is applied."}, "lease_rent_plan_status": {"type": "string", "nullable": true, "description": "Rent management status of the lease (e.g. active, exempt)."}, "lease_months_of_stay": {"type": "number", "description": "Length of stay in months (as of today)."}, "tenant_last_rent_change_days": {"type": "number", "nullable": true, "description": "Days since the tenant's last rent change."}, "tenant_invoice_send_days": {"type": "number", "description": "Days before the billing cycle that the invoice is sent."}, "tenant_days_left_to_rent_change": {"type": "number", "nullable": true, "description": "Days remaining until the next scheduled rent change (null if none scheduled)."}, "rentchange_created_by": {"type": "string", "nullable": true, "description": "Who/what created the rent change."}, "rentchange_last_updated_by": {"type": "string", "nullable": true, "description": "Who last modified the rent change."}, "rentchange_current_rent_variance": {"type": "number", "nullable": true, "description": "Difference ($) between new rent and the tenant's current rent."}, "rentchange_new_rent_variance": {"type": "number", "nullable": true, "description": "Difference ($) between new rent and the as-of-date rent."}, "lease_last_rent_change_date": {"type": "string", "format": "date", "nullable": true, "description": "Date of the lease's most recent rent change."}, "rentchange_current_rent_variance_percent": {"type": "number", "description": "Percentage variance of current rent."}, "rentchange_new_rent_variance_percent": {"type": "number", "description": "Percentage variance of new rent."}, "rentchange_approved_by": {"type": "string", "nullable": true, "description": "Who approved the rent change."}, "rentchange_skipped_or_cancelled_by": {"type": "string", "nullable": true, "description": "Who skipped or cancelled the rent change."}, "rentchange_notification_status": {"type": "string", "description": "Notice status, in lowercase, for example pending, generated, sent, delivered, opened, bounced, error or resolved."}, "unit_price": {"type": "number", "description": "Sell Rate \u2014 the space's current sell/street rate (as of the report end date)."}, "rentchange_old_rent": {"type": "number", "nullable": true, "description": "Rent ($) in effect the day before the effective date (prior rent)."}, "rentchange_new_rent": {"type": "number", "nullable": true, "description": "New rent ($) amount taking effect."}, "rentchange_rent_variance": {"type": "number", "nullable": true, "description": "New rent minus old rent ($)."}, "rentchange_rent_variance_percent": {"type": "number", "description": "(New rent - old rent) / old rent (ratio)."}, "rentchange_recent_note": {"type": "string", "description": "Most recent note on the rent change."}, "rentchange_effective_date": {"type": "string", "format": "date", "description": "Date the new rent takes effect."}, "rentchange_status": {"type": "string", "description": "Rent change status (Scheduled, Approved, Skipped, Cancelled, Deployed)."}, "rentchange_status_modification_date": {"type": "string", "format": "date", "description": "Date the status was last modified."}, "rentchange_notification_sent": {"type": "string", "format": "date", "nullable": true, "description": "Date the notice was actually sent (null if not sent)."}}}}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of rent changes on this page."}, "total": {"type": "integer", "description": "Number of rent changes that match the filters."}, "num_pages": {"type": "integer", "description": "Number of pages at this limit."}, "next": {"type": "string", "nullable": true, "description": "Link to the next page. null on the last page."}, "prev": {"type": "string", "nullable": true, "description": "Link to the previous page. null on the first page."}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"rent_changes": [{"property_id": "85B73ubBGy", "property_name": "UC Irvine Storage", "property_number": "UCI-1", "property_address": "5281 California Ave 22", "property_address2": "Suite 9", "property_city": "Irvine", "property_state": "CA", "property_zip": "92617", "property_country": "United States", "tenant_id": "3BEdKbJckj", "tenant_name": "<tenant name>", "tenant_email": "<tenant email>", "tenant_address": "<street address>", "tenant_address2": "<address line 2>", "tenant_city": "<city>", "tenant_state": "CA", "tenant_zip": "<zip>", "tenant_country": "United States", "tenant_space_count": "2", "unit_id": "420nQJSmBy", "unit_number": "Y8Y", "unit_size": "10' x 10'", "unit_type": "storage", "tenant_space_group_occupancy": 0.8263, "rentchange_notification_date": "2023-11-01", "rentchange_type": "Veritec", "tenant_selected_rent_plan": "-", "lease_rent_plan_status": null, "lease_months_of_stay": 11.29, "tenant_last_rent_change_days": null, "tenant_invoice_send_days": 0, "tenant_days_left_to_rent_change": null, "rentchange_created_by": null, "rentchange_last_updated_by": null, "rentchange_current_rent_variance": null, "rentchange_new_rent_variance": null, "lease_last_rent_change_date": "2023-12-01", "rentchange_current_rent_variance_percent": 0, "rentchange_new_rent_variance_percent": 0, "rentchange_approved_by": null, "rentchange_skipped_or_cancelled_by": null, "rentchange_notification_status": "generated", "unit_price": 81, "rentchange_old_rent": 100, "rentchange_new_rent": 102, "rentchange_rent_variance": 2, "rentchange_rent_variance_percent": 0.02, "rentchange_recent_note": "", "rentchange_effective_date": "2023-12-01", "rentchange_status": "Deployed", "rentchange_status_modification_date": "2023-09-28", "rentchange_notification_sent": "2023-09-28"}], "paging": {"count": 1, "total": 1154, "num_pages": 1154, "next": "<next page URL>", "prev": null}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_month": {"summary": "month is not in the format YYYY-MM", "value": {"status": 400, "data": {}, "msg": "Invalid month. Expected format YYYY-MM", "actual_cause": "Invalid month. Expected format YYYY-MM", "message": ""}}, "invalid_start_date": {"summary": "start_date is not a date in the format YYYY-MM-DD", "value": {"status": 400, "data": {}, "msg": "Invalid start_date. Expected format YYYY-MM-DD", "actual_cause": "Invalid start_date. Expected format YYYY-MM-DD", "message": ""}}, "invalid_end_date": {"summary": "end_date is not a date in the format YYYY-MM-DD", "value": {"status": 400, "data": {}, "msg": "Invalid end_date. Expected format YYYY-MM-DD", "actual_cause": "Invalid end_date. Expected format YYYY-MM-DD", "message": ""}}, "invalid_range": {"summary": "end_date is before start_date", "value": {"status": 400, "data": {}, "msg": "Invalid date range: end_date is before start_date", "actual_cause": "Invalid date range: end_date is before start_date", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "A property_id is not one of the properties your application can access.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "Forbidden: You do not have access to access this resource.", "actual_cause": "", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/reports/types/{report_type}": {"post": {"tags": ["Reports"], "summary": "Get company reports by type", "description": "Generate various types of reports for the company based on the report type (refunds, invoices, payments, merchandise_sales, rent_roll).", "x-nectar-endpoint-name": "/v2/companies/company_id/reports/types/report_type", "x-nectar-visibility": "public", "x-nectar-scope": "public", "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "report_type", "in": "path", "required": true, "schema": {"type": "string", "enum": ["refunds", "invoices", "payments", "merchandise_sales", "rent_roll"]}, "description": "The type of report to generate"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/RefundsReportRequest"}, {"$ref": "#/components/schemas/InvoicesReportRequest"}, {"$ref": "#/components/schemas/PaymentsReportRequest"}, {"$ref": "#/components/schemas/MerchandiseSalesReportRequest"}, {"$ref": "#/components/schemas/RentRollReportRequest"}]}, "examples": {"refunds": {"summary": "Refunds Report Example", "value": {"search": {"search": "", "report_period": {"days": 0, "period": "", "relation": "", "label": "This Month", "start_date": "", "end_date": ""}}, "columns": [{"key": "refund_date", "width": 130, "label": "Refund Date", "input": "timeframe", "options": [], "agg_method": "Count", "sort": 0, "column_type": "date", "format": "", "sortable": true, "fixed": false, "group": "refunds", "search": {"label": "", "days": 0, "period": "", "relation": "", "start_date": "", "end_date": ""}, "editable": false, "hide": false, "header_tool_tip": false, "aggregate_enable": false}], "sort": {"field": "refund_date", "dir": "DESC"}, "pivot_mode": {"type": "", "column": {}, "row": {}, "pivot_field": {}, "agg_method": ""}, "groups": [], "limit": 50, "page": 1, "offset": 0, "properties": ["ojDD6c0GRj"], "property_group_id": "", "roles_id": ["k2M0nIPkbv"], "current_date": "2025-11-14", "report_id": "BmAkAs4P5B", "time_zone": "Asia/Calcutta"}}, "invoices": {"summary": "Invoices Report Example", "value": {"search": {"search": "", "report_period": {"days": 0, "period": "", "relation": "", "label": "This Month", "start_date": "", "end_date": ""}}, "columns": [{"key": "property_name", "width": 225, "label": "Property Name", "input": "text", "options": [], "agg_method": "Count", "sort": 0, "column_type": "string", "format": "", "sortable": true, "fixed": false, "group": "facility", "search": "", "editable": false, "hide": false, "header_tool_tip": false, "aggregate_enable": false}], "sort": {"field": "invoice_number * 1 asc", "dir": "ASC"}, "pivot_mode": {"type": "", "column": {}, "row": {}, "pivot_field": {}, "agg_method": ""}, "groups": [], "limit": 50, "page": 1, "offset": 0, "properties": ["ojDD6c0GRj"], "property_group_id": "", "roles_id": ["k2M0nIPkbv"], "current_date": "2025-12-01", "report_id": "jro90h9KxB", "time_zone": "Asia/Calcutta"}}, "payments": {"summary": "Payments Report Example", "value": {"search": {"search": "", "report_period": {"days": 0, "period": "", "relation": "", "label": "Today", "start_date": "", "end_date": ""}}, "columns": [{"key": "payment_date", "width": 130, "label": "Payment Date", "input": "timeframe", "options": [], "agg_method": "Count", "sort": 2, "column_type": "date", "format": "", "sortable": true, "fixed": false, "group": "payments", "search": {"label": "", "days": 0, "period": "", "relation": "", "start_date": "", "end_date": ""}, "editable": false, "hide": false, "header_tool_tip": false, "aggregate_enable": false}], "sort": {"field": "payment_date asc", "dir": "ASC"}, "pivot_mode": {"type": "", "column": {}, "row": {}, "pivot_field": {}, "agg_method": ""}, "groups": [], "limit": 50, "page": 1, "offset": 0, "properties": ["ojDD6c0GRj"], "property_group_id": "", "roles_id": ["k2M0nIPkbv"], "current_date": "2025-11-14", "report_id": "2zyQPInlov", "time_zone": "Asia/Calcutta"}}, "merchandise_sales": {"summary": "Merchandise Sales Report Example", "value": {"search": {"search": "", "report_period": {"days": 0, "period": "", "relation": "", "label": "Year To Date", "start_date": "", "end_date": ""}}, "columns": [{"key": "invoice_date", "width": 150, "label": "Inv. Date", "input": "timeframe", "options": [], "agg_method": "Count", "sort": 3, "column_type": "date", "format": "", "sortable": true, "fixed": false, "group": "billing", "search": {"label": "", "days": 0, "period": "", "relation": "", "start_date": "", "end_date": ""}, "editable": false, "hide": false, "header_tool_tip": false, "aggregate_enable": false}], "sort": {"field": "invoice_number", "dir": "ASC"}, "pivot_mode": {"type": "", "column": {}, "row": {}, "pivot_field": {}, "agg_method": ""}, "groups": [], "limit": 50, "page": 1, "offset": 0, "properties": ["ojDD6c0GRj"], "property_group_id": "", "roles_id": ["k2M0nIPkbv"], "current_date": "2025-12-01", "report_id": "jea4KtPLGj", "time_zone": "Asia/Calcutta"}}, "rent_roll": {"summary": "Rent Roll Report Example", "value": {"search": {"report_period": {"days": 0, "label": "This Month"}}, "columns": [{"key": "unit_number", "width": 137, "label": "Space Number", "input": "text", "options": [], "agg_method": "Count", "sort": 0, "column_type": "string", "format": "", "sortable": true, "fixed": false, "group": "space", "search": "", "editable": false, "hide": false, "header_tool_tip": false, "aggregate_enable": false}], "sort": {"field": "unit_number", "dir": "ASC"}, "groups": [], "limit": 50, "page": 1, "offset": 0, "properties": ["85B73ubBGy"], "roles_id": ["79j53xhYvw"], "current_date": "2026-04-15", "report_id": "LvppGPfdv9", "time_zone": "Asia/Calcutta"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reports/management-summary": {"get": {"tags": ["Reports"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "property_id", "in": "query", "required": true, "schema": {"type": "string"}, "description": "ID of the property to report on. Use in: Get a single property (GET /properties/{property_id}).", "example": "85B73ubBGy"}, {"name": "date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "The day the report is for. Daily figures are for this day; month-to-date and year-to-date figures run up to it. Format YYYY-MM-DD.", "example": "2026-10-19"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get management summary", "operationId": "getManagementSummary", "description": "Returns the management summary for one property on `date`: units, deposits, discounts and write-offs, delinquency, occupancy, revenue, liabilities, rent changes and reservations.\n\n**Cost:** Heavy. About 30 to 100 seconds and 16 KB for one property. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"report": {"type": "object", "description": "Most figures come as `daily` (the day of `date`), `mtd` (month to date) and `ytd` (year to date).", "properties": {"totalUnits": {"type": "object", "properties": {"count": {"type": "number"}, "sqft": {"type": "number"}, "base_rent": {"type": "number"}}}, "payment_deposits": {"type": "object", "properties": {"cash": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "check": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "ach": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "card": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "subtotal": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "reversals": {"type": "object", "properties": {}}, "total": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}}}, "allowances": {"type": "object", "properties": {"discounts": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "write_offs": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}}}, "deliquencies": {"type": "object", "properties": {"deliquent_10": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_30": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_60": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_90": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_120": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_180": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_360": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_gt_360": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "total": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}, "deliquent_gt_30": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}, "percent_units": {"type": "number"}}}}}, "net_revenue": {"type": "object", "properties": {"revenue_mtd": {"type": "number"}, "previous_mtd": {"type": "number"}, "revenue_ytd": {"type": "number"}, "previous_ytd": {"type": "number"}}}, "auto_pay": {"type": "object", "properties": {"total": {"type": "number"}, "percentage": {"type": "number"}}}, "insurance": {"type": "object", "properties": {"total": {"type": "number"}, "percentage": {"type": "number"}}}, "overlock": {"type": "object", "properties": {"total": {"type": "number"}, "percentage": {"type": "number"}}}, "rentUnchanged": {"type": "object", "properties": {"total": {"type": "number"}, "percentage": {"type": "number"}}}, "occupancy_breakdown": {"type": "object", "properties": {"occupied": {"type": "object", "properties": {"unit_count": {"type": "number"}, "sqft": {"type": "number"}, "rent": {"type": "number"}, "base_rent": {"type": "number"}, "unit_percent": {"type": "number", "nullable": true}, "sqft_percent": {"type": "number", "nullable": true}, "econ": {"type": "number", "nullable": true}}}, "vacant": {"type": "object", "properties": {"unit_count": {"type": "number"}, "sqft": {"type": "number"}, "rent": {"type": "number"}, "base_rent": {"type": "number"}, "unit_percent": {"type": "number", "nullable": true}, "sqft_percent": {"type": "number", "nullable": true}}}, "total": {"type": "object", "properties": {"unit_count": {"type": "number"}, "unit_percent": {"type": "number"}, "sqft": {"type": "number"}, "sqft_percent": {"type": "number"}, "rent": {"type": "number"}}}}}, "occupancy": {"type": "object", "properties": {"sqft": {"type": "object", "properties": {"current": {"type": "number", "nullable": true}, "last_year_change": {"type": "number", "nullable": true}}}, "units": {"type": "object", "properties": {"current": {"type": "number", "nullable": true}, "last_year_change": {"type": "number", "nullable": true}}}, "econ": {"type": "object", "properties": {"current": {"type": "number", "nullable": true}, "last_year_change": {"type": "number", "nullable": true}}}}}, "leads_data": {"type": "object", "properties": {}}, "revenue": {"type": "object", "properties": {"rent": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "fee": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "insurance": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "merchandise": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "others": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "total": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}}}, "liabilities": {"type": "object", "properties": {"prepaid_rent": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}}}, "prepaid_services": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}}}, "prepaid_insurance": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}}}, "miscellaneous_deposits": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}}}, "total": {"type": "object", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}}}}}, "rent_change_summary": {"type": "object", "properties": {"six_month": {"type": "object", "properties": {"variance": {"type": "number"}, "count": {"type": "number"}, "prct_variance": {"type": "number"}, "avg_change": {"type": "number"}}}, "six_to_twelve_month": {"type": "object", "properties": {"variance": {"type": "number"}, "count": {"type": "number"}, "prct_variance": {"type": "number"}, "avg_change": {"type": "number"}}}, "twelve_to_eighteen_month": {"type": "object", "properties": {"variance": {"type": "number"}, "count": {"type": "number"}, "prct_variance": {"type": "number"}, "avg_change": {"type": "number"}}}, "eighteen_to_twenty_four_month": {"type": "object", "properties": {"variance": {"type": "number"}, "count": {"type": "integer"}, "prct_variance": {"type": "number"}, "avg_change": {"type": "number"}}}, "twenty_four_month": {"type": "object", "properties": {"variance": {"type": "number"}, "count": {"type": "integer"}, "prct_variance": {"type": "number"}, "avg_change": {"type": "number"}}}, "total": {"type": "object", "properties": {"variance": {"type": "number"}, "count": {"type": "number"}, "prct_variance": {"type": "number"}, "avg_change": {"type": "number"}}}}}, "space_metrics": {"type": "object", "properties": {"average_area_space": {"type": "object", "properties": {"occupied": {"type": "number"}, "vacant": {"type": "number"}, "total": {"type": "number"}}}, "average_rent_space": {"type": "object", "properties": {"occupied": {"type": "number"}, "vacant": {"type": "number"}, "total": {"type": "number"}}}, "average_rent_area": {"type": "object", "properties": {"occupied": {"type": "number"}, "vacant": {"type": "number"}, "total": {"type": "number"}}}}}, "reservations": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}}}, "company": {"type": "object", "properties": {"id": {"type": "number"}, "gds_owner_id": {"type": "string"}, "name": {"type": "string"}, "firstname": {"type": "string"}, "lastname": {"type": "string"}, "email": {"type": "string"}, "phone": {"type": "string"}, "subdomain": {"type": "string"}, "logo": {"type": "string"}, "msg": {"type": "string"}, "Settings": {"type": "object", "properties": {"twilioPhone": {"type": "string"}, "forteLogin": {"type": "string"}, "forteKey": {"type": "string"}, "forteOrganizationId": {"type": "string"}, "forteLocationId": {"type": "string"}, "invoiceSendDay": {"type": "string"}, "invoiceLateDay": {"type": "string"}, "lateChargeAmt": {"type": "string"}, "lateChargeType": {"type": "string"}, "authnetLogin": {"type": "string"}, "authnetKey": {"type": "string"}, "taxRate": {"type": "string"}, "oauthToken": {"type": "string"}, "oauthTokenSecret": {"type": "string"}, "qbDepositLiability": {"type": "string"}, "qbIncomeAccount": {"type": "string"}, "qbPrepaymentLiability": {"type": "string"}, "qbTaxCode": {"type": "string"}, "quickbooksTokenRenewal": {"type": "string"}, "realmId": {"type": "string"}, "invoiceChargeOffset": {"type": "string"}, "notificationEmails": {"type": "array", "items": {"type": "string"}}, "incomingCalls": {"type": "string"}, "twilioRedirect": {"type": "string"}, "lockoutDays": {"type": "string"}, "twilioSMSRedirect": {"type": "string"}, "transunionUser": {"type": "string"}, "transunionPassword": {"type": "string"}, "reservationExpiration": {"type": "string"}, "gateAccessCompanyToken": {"type": "string"}, "qbOauthToken": {"type": "string"}, "qbOauthTokenSecret": {"type": "string"}, "qbTokenRenewal": {"type": "string"}, "qbRealmId": {"type": "string"}, "maxAdvanceReservation": {"type": "string"}, "reservationAutoExpire": {"type": "string"}, "defaultCloseOfDay": {"type": "string"}, "paymentOrder": {"type": "string"}, "productLevelTax": {"type": "string"}, "invoiceAdjustmentDays": {"type": "string"}, "recordCashBookData": {"type": "string"}, "yardiExportRefColumn": {"type": "string"}, "yardiExportTransactionNoFormat": {"type": "string"}}}, "Roles": {"type": "array", "items": {"type": "string"}}, "webLogo": {"type": "object", "properties": {"desktop": {"type": "string"}, "mobile": {"type": "string"}}}, "platform_integration_enabled": {"type": "number"}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"property": {"summary": "One property (trimmed to some sections)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"report": {"totalUnits": {"count": 6954, "sqft": 32014434.38, "base_rent": 2208284.16}, "payment_deposits": {"cash": {"daily": 0, "mtd": 11673.72, "ytd": 417691.45}, "card": {"daily": 0, "mtd": 15878.3, "ytd": 169040.24}, "subtotal": {"daily": 0, "mtd": 28454.62, "ytd": 592315.8300000001}, "total": {"daily": 0, "mtd": 25074.079999999998, "ytd": 562333.1400000001}}, "allowances": {"discounts": {"daily": 58, "mtd": 6020.95, "ytd": 58493.4}, "write_offs": {"daily": 0, "mtd": 201.48, "ytd": 62301.37}}, "deliquencies": {"total": {"amount": 104618612.65, "units": 4818, "percent_units": 98.53}}, "net_revenue": {"revenue_mtd": 25076.14, "previous_mtd": 13612.69, "revenue_ytd": 562335.2, "previous_ytd": 934323.94}, "occupancy": {"sqft": {"current": 96.23, "last_year_change": 12.620000000000005}, "units": {"current": 70.32, "last_year_change": -17.42}, "econ": {"current": 168.39, "last_year_change": -182.58000000000004}}, "reservations": {"daily": 3, "mtd": 27, "ytd": 170}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"missing_property": {"summary": "property_id is missing", "value": {"status": 400, "data": {}, "msg": "Please enter a property id ", "actual_cause": "Please enter a property id ", "message": ""}}, "bad_date": {"summary": "date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a date ", "actual_cause": "Please enter a date ", "message": ""}}, "invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/reports/management-summary": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"in": "query", "name": "date", "schema": {"type": "string", "format": "date"}, "example": "2026-10-19", "required": true, "description": "The day the report is for. Daily figures are for this day; month-to-date and year-to-date figures run up to it. Format YYYY-MM-DD. Must not be after today's date (UTC)."}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/properties/{property_id}/reports/management-summary", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get management summary report for a property", "operationId": "getPropertyManagementSummary", "description": "Returns the management summary for one property on `date`: units, deposits, discounts and write-offs, delinquency, occupancy, revenue, liabilities, rent changes and reservations. Percentage fields are expressed as percentages (70.3 means 70.3%) and need no further calculation.\n\n**Cost:** Heavy. About 20 to 70 seconds and 12 KB for one property. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"totalUnits": {"type": "object", "properties": {"count": {"type": "number"}, "sqft": {"type": "number"}, "base_rent": {"type": "number"}}}, "payment_deposits": {"type": "object", "properties": {"cash": {"type": "object", "properties": {"daily": {"type": "number", "description": "This sum of cash transactions collected as payment for date queried"}, "mtd": {"type": "number", "description": "This sum of cash transactions collected as payment for this month, i.e, in this case from March 1, 2023 to March 17, 2023"}, "ytd": {"type": "number", "description": "This sum of cash transactions collected as payment for this year, i.e; from January 1, 2023 to March 17, 2023"}}}, "check": {"type": "object", "properties": {"daily": {"type": "number", "description": "This sum of check transactions collected as payment for date queried"}, "mtd": {"type": "number", "description": "This sum of check transactions collected as payment for this month"}, "ytd": {"type": "number", "description": "This sum of check transactions collected as payment for this year"}}}, "ach": {"type": "object", "properties": {"daily": {"type": "number", "description": "This sum of ACH transactions collected & settled as payment for date queried"}, "mtd": {"type": "number", "description": "This sum of ACH transactions collected & settled as payment for that month"}, "ytd": {"type": "number", "description": "This sum of ACH transactions collected & settled as payment for that year"}}}, "card": {"type": "object", "properties": {"daily": {"type": "number", "description": "This sum of credit/debit card transactions collected & settled as payment for date queried"}, "mtd": {"type": "number", "description": "This sum of credit/debit card transactions collected & settled as payment for that month"}, "ytd": {"type": "number", "description": "This sum of credit/debit card transactions collected & settled as payment for that year"}}}, "subtotal": {"type": "object", "properties": {"daily": {"type": "number", "description": "This sum of cash, check, ACH, debit/CC transactions for date queried. This does not include reversals."}, "mtd": {"type": "number", "description": "This sum of cash, check, ACH, debit/CC transactions for the month to date.This does not include reversals."}, "ytd": {"type": "number", "description": "This sum of cash, check, ACH, debit/CC transactions for the year to date This does not include reversals."}}}, "reversals": {"type": "object", "properties": {}}, "total": {"type": "object", "properties": {"daily": {"type": "number", "description": "This sum of cash, check, ACH, debit/CC transactions minus NSF/Reversals for date queried. This does not include reversals"}, "mtd": {"type": "number", "description": "This sum of cash, check, ACH, debit/CC transactions minus NSF/Reversals for the month to date. This does not include reversals"}, "ytd": {"type": "number", "description": "This sum of cash, check, ACH, debit/CC transactions minus NSF/Reversals for the year to date. This does not include reversals"}}}}}, "allowances": {"type": "object", "description": "Sum of discounts, promotions, write offs and applied credits for the facility in a give day, month and year", "properties": {"discounts": {"type": "object", "description": "These are promotions that do not have an end date. Discount applies to the life cycle of the tenant. Examples of discounts include 10% STUDENT DISCOUNT, 15% MILITARY DISCOUNT.", "properties": {"daily": {"type": "number", "description": "The sum of discounts or promotions that was applied to the facility on the queried day"}, "mtd": {"type": "number", "description": "The sum of discounts or promotions that was applied to the facility in that month"}, "ytd": {"type": "number", "description": "The sum of discounts or promotions that was applied to the facility in that year"}}}, "write_offs": {"type": "object", "description": "A reduction of potential revenue that is declared non-collectable(bad debt)", "properties": {"daily": {"type": "number", "description": "The sum of write offs that was applied to the facility on the queried day"}, "mtd": {"type": "number", "description": "The sum of write offs that was applied to the facility in that month"}, "ytd": {"type": "number", "description": "The sum of write offs that was applied to the facility in that year"}}}}}, "deliquencies": {"type": "object", "description": "The number of delinquent tenants that are broken down to days and the total sum of the outstanding balances for that given period", "properties": {"deliquent_10": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due for 10 days or less"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance for 10 days or less"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance for 10 days or less and values are round up"}}}, "deliquent_30": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due between 11-30 days"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance that are past due between 11-30 days"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance that are past due between 11-30 days and values are round up"}}}, "deliquent_60": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due between 31-60 days"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance that are past due between 31-60 days"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance that are past due between 31-60 days and values are round up"}}}, "deliquent_90": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due between 61-90 days"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance that are past due between 61-90 days"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance that are past due between 61-90 days and values are round up"}}}, "deliquent_120": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due between 91-120 days"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance that are past due between 91-120 days"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance that are past due between 91-120 days and values are round up"}}}, "deliquent_180": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due between 121-180 days"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance that are past due between 121-180 days"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance that are past due between 121-180 days and values are round up"}}}, "deliquent_360": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due between 181-360"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance that are past due between 181-360 days"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance that are past due between 181-360 days and values are round up"}}}, "deliquent_gt_360": {"type": "object", "properties": {"amount": {"type": "number", "description": "The outstanding balance for all spaces that are past due for greater than 360 days"}, "units": {"type": "number", "description": "The count of spaces with an outstanding balance that are past due for more than 360 days"}, "percent_units": {"type": "number", "description": "The % of spaces with an outstanding balance that are past due for more than 360 days and values are round up"}}}, "total": {"type": "object", "properties": {"amount": {"type": "number", "description": "The total outstanding balance for all spaces past due"}, "units": {"type": "number", "description": "The total count of all spaces with an outstanding balance"}, "percent_units": {"type": "number", "description": "The total % of all spaces with an outstanding balance and values are round up"}}}, "deliquent_gt_30": {"type": "object", "description": "Delinquency greater than 30 days", "properties": {"amount": {"type": "number", "description": "The total outstanding balance for all spaces past due for more than 30 days"}, "units": {"type": "number", "description": "The total count of all spaces with an outstanding balance for more than 30 days"}, "percent_units": {"type": "number", "description": "The total % of all spaces with an outstanding balance for more than 30 days and values are round up"}}}}}, "net_revenue": {"type": "object", "description": "Net revenue details", "properties": {"revenue_mtd": {"type": "number", "description": "Net revenue for month to date"}, "previous_mtd": {"type": "number", "description": "Net revenue for same day last month"}, "revenue_ytd": {"type": "number", "description": "Net revenue for year to date"}, "previous_ytd": {"type": "number", "description": "Net revenue for same day last year"}}}, "auto_pay": {"type": "object", "description": "Performance indiactior for auto pay enrollment", "properties": {"total": {"type": "number", "description": "Total tenants opted in for auto pay"}, "percentage": {"type": "number", "description": "Total percentage opted in for auto pay with respect to total occupied spaces"}}}, "insurance": {"type": "object", "description": "Performance indiactior for insurance enrollment", "properties": {"total": {"type": "number", "description": "Total tenants with active insurances"}, "percentage": {"type": "number", "description": "Total percentage of active insurances with respect to total occupied spaces"}}}, "overlock": {"type": "object", "description": "Performance indiactior for overlocked spaces", "properties": {"total": {"type": "number", "description": "Total overlocked spaces"}, "percentage": {"type": "number", "description": "Total percentage of overlocked spaces with respect to total occupied spaces"}}}, "rentUnchanged": {"type": "object", "description": "Performance indiactior for no rent change in last 12 months", "properties": {"total": {"type": "number", "description": "Total tenants with unchanged rent amount"}, "percentage": {"type": "number", "description": "Total percentage of tenants with unchanged rent amount with respect to total occupied spaces"}}}, "occupancy_breakdown": {"type": "object", "description": "Space Occupancy", "properties": {"occupied": {"type": "object", "description": "Occupied spaces breakdown", "properties": {"unit_count": {"type": "number", "description": "Total occupied spaces"}, "sqft": {"type": "number", "description": "Total occupied SQ FT"}, "rent": {"type": "number", "description": "Total rent of all occupied spaces"}, "base_rent": {"type": "number"}, "unit_percent": {"type": "number", "nullable": true, "description": "Total occupied space in percent"}, "sqft_percent": {"type": "number", "nullable": true, "description": "Total occupied space in percent"}, "econ": {"type": "number", "nullable": true}}}, "vacant": {"type": "object", "properties": {"unit_count": {"type": "number", "description": "Total vacant spaces"}, "sqft": {"type": "number", "description": "Total vacant SQ FT"}, "rent": {"type": "number"}, "base_rent": {"type": "number"}, "unit_percent": {"type": "number", "nullable": true, "description": "Total vacant space in percent"}, "sqft_percent": {"type": "number", "nullable": true, "description": "Total vacant space in percent"}}}, "total": {"type": "object", "properties": {"unit_count": {"type": "number", "description": "Total spaces excluding reservation and complimentary"}, "unit_percent": {"type": "number", "description": "Total spaces in percent excluding reservation and complimentary"}, "sqft": {"type": "number", "description": "Total SQ FT excluding reservation and complimentary"}, "sqft_percent": {"type": "number", "description": "Total SQ FT in percent excluding reservation and complimentary"}, "rent": {"type": "number", "description": "Total rent excluding reservation and complimentary"}}}}}, "occupancy": {"type": "object", "description": "Occupancy expresed in percentage values", "properties": {"sqft": {"type": "object", "properties": {"current": {"type": "number", "nullable": true}, "last_year_change": {"type": "number", "nullable": true}}}, "units": {"type": "object", "properties": {"current": {"type": "number", "nullable": true}, "last_year_change": {"type": "number", "nullable": true}}}, "econ": {"type": "object", "description": "Economic Occupancy - Revenue vs potential revenue expresed as percentage", "properties": {"current": {"type": "number", "nullable": true}, "last_year_change": {"type": "number", "nullable": true}}}}}, "leads_data": {"type": "object", "description": "Any enquires is considered a lead. Does not matter if they have or not a reservation. A reservation is a lead. The leads include the retired ones if its within the time frame", "properties": {}}, "rent_change_summary": {"type": "object", "properties": {"six_month": {"type": "object", "properties": {"variance": {"type": "number", "description": "The dollar difference between the original rent and new rent"}, "count": {"type": "number", "description": "Total number of rent changes"}, "prct_variance": {"type": "number", "description": "The rounding up percentage difference between the orignal rent and new rent"}, "avg_change": {"type": "number", "description": "Average rent change amount"}}}, "six_to_twelve_month": {"type": "object", "properties": {"variance": {"type": "number", "description": "The dollar difference between the original rent and new rent"}, "count": {"type": "number", "description": "Total number of rent changes"}, "prct_variance": {"type": "number", "description": "The rounding up percentage difference between the orignal rent and new rent"}, "avg_change": {"type": "number", "description": "Average rent change amount"}}}, "twelve_to_eighteen_month": {"type": "object", "properties": {"variance": {"type": "number", "description": "The dollar difference between the original rent and new rent"}, "count": {"type": "number", "description": "Total number of rent changes"}, "prct_variance": {"type": "number", "description": "The rounding up percentage difference between the orignal rent and new rent"}, "avg_change": {"type": "number", "description": "Average rent change amount"}}}, "eighteen_to_twenty_four_month": {"type": "object", "properties": {"variance": {"type": "number", "description": "The dollar difference between the original rent and new rent"}, "count": {"type": "number", "description": "Total number of rent changes"}, "prct_variance": {"type": "number", "description": "The rounding up percentage difference between the orignal rent and new rent"}, "avg_change": {"type": "number", "description": "Average rent change amount"}}}, "twenty_four_month": {"type": "object", "properties": {"variance": {"type": "number", "description": "The dollar difference between the original rent and new rent"}, "count": {"type": "number", "description": "Total number of rent changes"}, "prct_variance": {"type": "number", "description": "The rounding up percentage difference between the orignal rent and new rent"}, "avg_change": {"type": "number", "description": "Average rent change amount"}}}, "total": {"type": "object", "properties": {"variance": {"type": "number", "description": "The total dollar difference between the original rent and new rent"}, "count": {"type": "number", "description": "Total number of rent changes"}, "prct_variance": {"type": "number", "description": "The rounding up total percentage difference between the orignal rent and new rent"}, "avg_change": {"type": "number", "description": "total average rent change amount"}}}}}, "space_metrics": {"type": "object", "description": "Space Statistics and values are round up in pdf report", "properties": {"average_area_space": {"type": "object", "description": "Average SQ FT per space. Values in SQ FT", "properties": {"occupied": {"type": "number"}, "vacant": {"type": "number"}, "total": {"type": "number"}}}, "average_rent_space": {"type": "object", "description": "Average rent per space.Values in dollars", "properties": {"occupied": {"type": "number"}, "vacant": {"type": "number"}, "total": {"type": "number"}}}, "average_rent_area": {"type": "object", "description": "Average rent per area(SQ FT). Values in dollars", "properties": {"occupied": {"type": "number"}, "vacant": {"type": "number"}, "total": {"type": "number"}}}}}, "reservations": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "revenue": {"type": "object", "properties": {"rent": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "fee": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "insurance": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "merchandise": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "others": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}, "total": {"type": "object", "properties": {"daily": {"type": "number"}, "mtd": {"type": "number"}, "ytd": {"type": "number"}}}}}, "liabilities": {"type": "object", "properties": {"prepaid_rent": {"type": "object", "properties": {"amount": {"type": "number", "description": "Pre paid rent in dollars"}, "units": {"type": "number", "description": "Space count"}}}, "prepaid_services": {"type": "object", "properties": {"amount": {"type": "number", "description": "Pre paid services in dollars"}, "units": {"type": "number", "description": "Space count"}}}, "prepaid_insurance": {"type": "object", "properties": {"amount": {"type": "number", "description": "Pre paid services in dollars"}, "units": {"type": "number"}}}, "miscellaneous_deposits": {"type": "object", "description": "Other liabilities such as security deposits and cleaning deposits", "properties": {"amount": {"type": "number"}, "units": {"type": "number"}}}, "total": {"type": "object", "properties": {"amount": {"type": "number", "description": "Total liabilities amount in dollars"}, "units": {"type": "number", "description": "Total spaces"}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"property": {"summary": "One property (trimmed to some sections)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"totalUnits": {"count": 6954, "sqft": 32014434.38, "base_rent": 2208284.16}, "payment_deposits": {"cash": {"daily": 0, "mtd": 11673.72, "ytd": 417691.45}, "card": {"daily": 0, "mtd": 15878.3, "ytd": 169040.24}, "subtotal": {"daily": 0, "mtd": 28454.62, "ytd": 592315.8300000001}, "total": {"daily": 0, "mtd": 25074.079999999998, "ytd": 562333.1400000001}}, "allowances": {"discounts": {"daily": 58, "mtd": 6020.95, "ytd": 58493.4}, "write_offs": {"daily": 0, "mtd": 201.48, "ytd": 62301.37}}, "deliquencies": {"total": {"amount": 104618612.65, "units": 4818, "percent_units": 98.53}}, "net_revenue": {"revenue_mtd": 25076.14, "previous_mtd": 13612.69, "revenue_ytd": 562335.2, "previous_ytd": 934323.94}, "occupancy": {"sqft": {"current": 96.23, "last_year_change": 12.620000000000005}, "units": {"current": 70.32, "last_year_change": -17.42}, "econ": {"current": 168.39, "last_year_change": -182.58000000000004}}, "reservations": {"daily": 3, "mtd": 27, "ytd": 170}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"bad_date": {"summary": "date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Required date format is (YYYY-MM-DD)", "actual_cause": "Required date format is (YYYY-MM-DD)", "message": ""}}, "future_date": {"summary": "date is in the future", "value": {"status": 400, "data": {}, "msg": "Invalid Date. The date entered is in the future", "actual_cause": "Invalid Date. The date entered is in the future", "message": ""}}, "invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The property is not one this application can access.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "You do not have access to this resource", "actual_cause": "You do not have access to this resource", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/reports/coverage-details": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"in": "query", "name": "start_date", "schema": {"type": "string", "format": "date"}, "example": "2026-09-01", "description": "First day of the report, included. Format YYYY-MM-DD. Must not be in the future or after end_date. Default: today's date (UTC)."}, {"in": "query", "name": "end_date", "schema": {"type": "string", "format": "date"}, "example": "2026-09-30", "description": "Last day of the report, included. Format YYYY-MM-DD. Must not be in the future. Default: today's date (UTC)."}], "x-nectar-endpoint-name": "/v1/companies/{{company_id}}/properties/{property_id}/reports/coverage-details", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get coverage details for a property", "operationId": "getPropertyCoverageDetails", "description": "Returns the tenant insurance (coverage) transactions at one property from `start_date` to `end_date`: one row for each payment, refund or credit applied to an insurance charge, with the tenant, the space, the coverage and the amounts. Without dates, the report covers today. With only `start_date`, it runs from that day to today. Cash, check, card and ACH payments are included.\n\n**Cost:** Heavy. About 0.4 seconds and 17 KB for one month at one property. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "array", "description": "One row per insurance transaction, newest first.", "items": {"type": "object", "properties": {"property_name": {"type": "string", "description": "Property name"}, "space_number": {"type": "string", "description": "Space number"}, "tenant_first_name": {"type": "string", "description": "Tenant first name. Not masked."}, "tenant_last_name": {"type": "string", "description": "Tenant last name. Not masked."}, "tenant_address_1": {"type": "string", "description": "Tenant address 1 (the primary address). Not masked."}, "tenant_address_2": {"type": "string", "nullable": true, "description": "Tenant address 2. Not masked."}, "tenant_city": {"type": "string", "description": "Tenant city. Not masked."}, "tenant_state": {"type": "string", "description": "Tenant state. Not masked."}, "tenant_zip": {"type": "string", "description": "Tenant zip code. Not masked."}, "tenant_email": {"type": "string", "nullable": true, "description": "Tenant email address. Not masked."}, "tenant_phone": {"type": "string", "nullable": true, "description": "Tenant primary phone number. Not masked."}, "insurance_start_date": {"type": "string", "description": "The date the tenant's coverage started (YYYY-MM-DD), or `-` when the coverage has no active service."}, "insurance_end_date": {"type": "string", "format": "date", "nullable": true, "description": "The date the tenant's coverage ended or will end. Null when the coverage has no end date."}, "insurance_refunded_amount": {"type": "number", "description": "Amount refunded for the insurance"}, "insurance_credited_amount": {"type": "number", "description": "Amount paid for the insurance as credit"}, "insurance_paid_amount": {"type": "number", "description": "Amount paid for the insurance"}, "insurance_premium": {"type": "number", "description": "Insurance premium amount"}, "insurance_coverage": {"type": "string", "description": "Insurance coverage amount"}, "balance_due": {"type": "number", "nullable": true, "description": "Total balance amount to be paid by the tenant for the current billing period"}, "transaction_date": {"type": "string", "format": "date", "description": "The date of the payment, refund or credit"}, "move_in_date": {"type": "string", "format": "date", "description": "The date the tenant moved in to the space"}, "is_cancelled_coverage": {"type": "string", "enum": ["Yes", "No"], "description": "`Yes` when the coverage ends with this invoice line."}, "is_new_coverage": {"type": "string", "enum": ["Yes", "No"], "description": "`Yes` when this is the first invoice line of the coverage."}, "is_paid": {"type": "string", "enum": ["Yes", "No"], "description": "`Yes` when any amount has been paid on this invoice line."}, "tenant_id": {"type": "string", "description": "Hashed ID of the tenant: this contact on this lease, not a contact ID."}, "property_id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id})."}, "space_id": {"type": "string", "description": "Hashed ID of the space (unit). Use in: Get details of a unit (GET /units/{unit_id})."}, "invoice_id": {"type": "string", "description": "Hashed ID of the invoice. Use in: Get a invoice (GET /v2/invoices/{invoice_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"month": {"summary": "One month at one property (trimmed to one row)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": [{"property_name": "UC Irvine Storage", "space_number": "7304", "tenant_first_name": "<first name>", "tenant_last_name": "<last name>", "tenant_address_1": "<address>", "tenant_address_2": "<address line 2>", "tenant_city": "<city>", "tenant_state": "<state>", "tenant_zip": "<zip>", "tenant_email": "<email>", "tenant_phone": "<phone>", "insurance_start_date": "2026-08-26", "insurance_end_date": "2026-09-30", "insurance_refunded_amount": 0, "insurance_credited_amount": 0, "insurance_paid_amount": 1, "insurance_premium": 1, "insurance_coverage": "12", "balance_due": 0, "transaction_date": "2026-09-24", "move_in_date": "2026-08-26", "is_cancelled_coverage": "Yes", "is_new_coverage": "No", "is_paid": "Yes", "tenant_id": "lBNdLEgTL2", "property_id": "85B73ubBGy", "space_id": "6jKoZxltRj", "invoice_id": "k2MLNmlu7v", "lease_id": "gj87yK1f42"}], "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"bad_date": {"summary": "start_date or end_date is not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Required date format is (YYYY-MM-DD)", "actual_cause": "Required date format is (YYYY-MM-DD)", "message": ""}}, "future_date": {"summary": "start_date or end_date is in the future", "value": {"status": 400, "data": {}, "msg": "Invalid Date. The date entered is in the future", "actual_cause": "Invalid Date. The date entered is in the future", "message": ""}}, "date_range": {"summary": "end_date is before start_date (also when only end_date is sent and it is before today)", "value": {"status": 400, "data": {}, "msg": "Invalid Date range", "actual_cause": "Invalid Date range", "message": ""}}, "invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The property is not one this application can access.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "You do not have access to this resource", "actual_cause": "You do not have access to this resource", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reports/{report_id}": {"get": {"tags": ["Reports"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/report_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get details for associated report", "description": "Runs one of the company's saved reports and returns its rows, up to 100 per call, for the report's saved period. The columns depend on the saved report.\n\n**Cost:** Heavy. About 1 second and 50 KB for a page of 100 rows. Time and size depend on the saved report's type and columns.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "report_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The report ID is a valid ID but matches no saved report.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Report Not found", "actual_cause": "Report Not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reports/transfer": {"get": {"tags": ["Reports"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "property_id", "in": "query", "required": true, "schema": {"type": "string"}, "description": "ID of the property to report on. Use in: Get a single property (GET /properties/{property_id}).", "example": "85B73ubBGy"}, {"name": "date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "First day of the period. Format YYYY-MM-DD.", "example": "2026-01-01"}, {"name": "end_date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "Last day of the period, included. Format YYYY-MM-DD.", "example": "2026-10-19"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get lease transfer report", "operationId": "getLeaseTransferReport", "description": "Returns the transfers at one property between `date` and `end_date`, both days included. A transfer moves a tenant from one unit to another: each row has the unit and lease moved out of (`out_*`), the unit and lease moved into (`in_*`), the balances and rents on both, and the user who made the transfer with the reason and notes they recorded.\n\n**Cost:** Heavy. About 0.5 seconds and under 10 KB for one month at one property. Not paged: time and size grow with the date range.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"report": {"type": "array", "items": {"type": "object", "properties": {"tenant_name": {"type": "string"}, "transfer_date": {"type": "string"}, "contact_id": {"type": "string", "description": "Use in: Get details of a contact (GET /contacts/{contact_id})."}, "out_unit_number": {"type": "string"}, "out_unit_size": {"type": "string"}, "out_unit_category": {"type": "string"}, "out_balance": {"type": "number"}, "out_lease_id": {"type": "string", "description": "Use in: Get details about a lease (GET /leases/{lease_id})."}, "out_unit_id": {"type": "string", "description": "Use in: Get details of a unit (GET /units/{unit_id})."}, "out_rent": {"type": "number"}, "in_unit_number": {"type": "string"}, "in_unit_size": {"type": "string"}, "in_unit_category": {"type": "string"}, "in_balance": {"type": "number"}, "transfer_balance": {"type": "number", "description": "in_balance minus out_balance."}, "in_lease_id": {"type": "string", "description": "Use in: Get details about a lease (GET /leases/{lease_id})."}, "in_unit_id": {"type": "string", "description": "Use in: Get details of a unit (GET /units/{unit_id})."}, "in_rent": {"type": "number"}, "out_total_days": {"type": "number"}, "user_name": {"type": "string"}, "notes": {"type": "string", "nullable": true}, "reason": {"type": "string"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"transfer": {"summary": "Year to date at one property (trimmed to one row)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"report": [{"tenant_name": "<tenant name>", "transfer_date": "2026-08-28", "contact_id": "VvaKDQyskj", "out_unit_number": "130", "out_unit_size": "10' x 6'", "out_unit_category": "test", "out_balance": 38.32, "out_lease_id": "420xbO9Sm2", "out_unit_id": "OBZXRZCA2Z", "out_rent": 143, "in_unit_number": "7301", "in_unit_size": "24' x 24'", "in_unit_category": "test cat", "in_balance": 28.77, "transfer_balance": -9.55, "in_lease_id": "av3xZW9sP2", "in_unit_id": "Ej67k8puYB", "in_rent": 27, "out_total_days": 218, "user_name": "<staff name>", "notes": "test", "reason": "space_too_small"}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"missing_property": {"summary": "property_id is missing", "value": {"status": 400, "data": {}, "msg": "Please enter a property id ", "actual_cause": "Please enter a property id ", "message": ""}}, "bad_date": {"summary": "date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a start date for this report ", "actual_cause": "Please enter a start date for this report ", "message": ""}}, "bad_end_date": {"summary": "end_date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a end date for this report ", "actual_cause": "Please enter a end date for this report ", "message": ""}}, "invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reports/rental-activity": {"get": {"tags": ["Reports"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "property_id", "in": "query", "required": true, "schema": {"type": "string"}, "description": "ID of the property to report on. Use in: Get a single property (GET /properties/{property_id}).", "example": "85B73ubBGy"}, {"name": "date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "First day of the period. Format YYYY-MM-DD.", "example": "2026-09-01"}, {"name": "end_date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "Last day of the period, included. Format YYYY-MM-DD.", "example": "2026-09-30"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get rental activity", "operationId": "getRentalActivity", "description": "Returns the move-ins and move-outs at one property between `date` and `end_date`, both days included: one row per lease, with the unit, the tenant, the rent, the insurance premium and the space rate at move-in. Transfers are reported by Get lease transfer report (GET /reports/transfer).\n\n**Cost:** Heavy. About 1 to 2 seconds and 15 KB for one month at one property. Not paged: time and size grow with the date range.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"report": {"type": "object", "properties": {"rentalActivityMoveIn": {"type": "array", "description": "Leases that started in the period. Leases created by a transfer are not included.", "items": {"type": "object", "properties": {"unit_number": {"type": "string"}, "unit_id": {"type": "string", "description": "Use in: Get details of a unit (GET /units/{unit_id})."}, "contact_id": {"type": "string", "description": "Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "description": "Use in: Get details about a lease (GET /leases/{lease_id})."}, "company_name": {"type": "string"}, "unit_size": {"type": "string"}, "category_name": {"type": "string", "nullable": true}, "name": {"type": "string"}, "move_in_date": {"type": "string"}, "rent": {"type": "number"}, "insurance_premium": {"type": "number"}, "promotion_amount": {"type": "number"}, "promotion_names": {"type": "string", "nullable": true}, "space_rate": {"type": "number"}, "variance": {"type": "number", "description": "space_rate minus rent."}, "days_vacant": {"type": "number"}, "unit_area": {"type": "number"}}}}, "rentalActivityMoveOut": {"type": "array", "description": "Leases that ended in the period. Leases ended by a transfer are not included.", "items": {"type": "object", "properties": {"unit_number": {"type": "string"}, "unit_id": {"type": "string", "description": "Use in: Get details of a unit (GET /units/{unit_id})."}, "contact_id": {"type": "string", "description": "Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "description": "Use in: Get details about a lease (GET /leases/{lease_id})."}, "company_name": {"type": "string"}, "unit_size": {"type": "string"}, "category_name": {"type": "string", "nullable": true}, "name": {"type": "string"}, "move_out_date": {"type": "string"}, "rent": {"type": "number"}, "insurance_premium": {"type": "number"}, "space_rate": {"type": "number"}, "variance": {"type": "number", "description": "space_rate minus rent."}, "days_in_space": {"type": "number"}, "auction": {"type": "string"}, "unit_area": {"type": "number"}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"month": {"summary": "One month at one property (trimmed to one row each)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"report": {"rentalActivityMoveIn": [{"unit_number": "7322", "unit_id": "PvkED9zH9j", "contact_id": "7jP5k5yCYB", "lease_id": "gjYQgO6Tej", "company_name": "Production Sandbox", "unit_size": "24' x 24'", "category_name": "test cat", "name": "<tenant name>", "move_in_date": "2026-09-01", "rent": 27, "insurance_premium": 1, "promotion_amount": 0, "promotion_names": null, "space_rate": 27, "variance": 0, "days_vacant": 0, "unit_area": 576}], "rentalActivityMoveOut": [{"unit_number": "117022", "unit_id": "Ej6mK7FY2e", "contact_id": "8vxG46GUbB", "lease_id": "PvkEXDJu9j", "company_name": "Production Sandbox", "unit_size": "10' x 10'", "category_name": "Size Category", "name": "<tenant name>", "move_out_date": "2026-09-03", "rent": 103, "insurance_premium": 0, "space_rate": 103, "variance": 0, "days_in_space": 1157, "auction": "No", "unit_area": 100}]}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"missing_property": {"summary": "property_id is missing", "value": {"status": 400, "data": {}, "msg": "Please enter a property id ", "actual_cause": "Please enter a property id ", "message": ""}}, "bad_date": {"summary": "date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a date for this report ", "actual_cause": "Please enter a date for this report ", "message": ""}}, "bad_end_date": {"summary": "end_date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a end date for this report ", "actual_cause": "Please enter a end date for this report ", "message": ""}}, "invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reports/space-activity": {"get": {"tags": ["Reports"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "property_id[]", "in": "query", "required": true, "schema": {"type": "array", "items": {"type": "string"}}, "description": "ID of a property to report on. Repeat the parameter for several properties. Use in: Get a single property (GET /properties/{property_id}).", "style": "form", "explode": true, "example": ["85B73ubBGy"]}, {"name": "date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "First day of the period. Format YYYY-MM-DD.", "example": "2026-03-03"}, {"name": "end_date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "Last day of the period, included. Format YYYY-MM-DD.", "example": "2026-04-03"}], "x-nectar-endpoint-name": "/v1/companies/company_id/reports/space-activity", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get space activity report", "operationId": "getSpaceActivityReport", "description": "Returns the move-ins, move-outs and transfers at the given properties between `date` and `end_date`, both days included, newest first within each property.\n\n**Cost:** Heavy. About 0.5 seconds and 12 KB for one month at one property. Not paged: time and size grow with the date range and the number of properties.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"report": {"type": "array", "description": "One row per move-in, move-out, transfer-in and transfer-out in the period.", "items": {"type": "object"}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"missing_property": {"summary": "property_id[] is missing", "value": {"status": 400, "data": {}, "msg": "Please enter a property id ", "actual_cause": "Please enter a property id ", "message": ""}}, "bad_date": {"summary": "date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a start date for this report ", "actual_cause": "Please enter a start date for this report ", "message": ""}}, "bad_end_date": {"summary": "end_date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a end date for this report ", "actual_cause": "Please enter a end date for this report ", "message": ""}}, "invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reports/daily-deposits": {"get": {"tags": ["Reports"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "property_id", "in": "query", "required": true, "schema": {"type": "string"}, "description": "ID of the property to report on. Use in: Get a single property (GET /properties/{property_id}).", "example": "85B73ubBGy"}, {"name": "date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}, "description": "The day to report on. Format YYYY-MM-DD.", "example": "2026-09-24"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get daily reports", "description": "Returns the deposits at one property on `date`: totals by payment method and product type (`payment_deposits`), card payments by card brand (`card_deposits`), and the payments (`receipts`) and refunds (`refund`) behind them.\n\n**Cost:** Heavy. About 2 seconds and 15 to 30 KB for one day at one property. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"report": {"type": "object", "properties": {"payment_deposits": {"type": "object", "description": "Deposits by payment method, split by product type. `physical` adds up cash and check, `electronic` the card and ACH payments.", "properties": {"date": {"type": "string"}, "cash": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "check": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "ach": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "card": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "physical": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "electronic": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "total": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}}}, "card_deposits": {"type": "object", "description": "Card payments by card brand.", "properties": {"date": {"type": "string"}, "visa": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "mastercard": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "amex": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "discover": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}, "total": {"type": "object", "properties": {"rent": {"type": "number"}, "insurance": {"type": "number"}, "merchandise": {"type": "number"}, "auction": {"type": "number"}, "deposits": {"type": "number"}, "fees": {"type": "number"}, "tax": {"type": "number"}, "sub_total": {"type": "number"}, "refund": {"type": "number"}, "totals": {"type": "number"}, "fees_details": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "number"}}}}}}}}, "receipts": {"type": "object", "description": "The payments taken on the day.", "properties": {"receipts_data": {"type": "array", "items": {"type": "object", "properties": {"tenant": {"type": "string"}, "space_nos": {"type": "string"}, "amount": {"type": "number"}, "payment_method": {"type": "string"}, "payment_details": {"type": "string"}}}}, "total": {"type": "object", "properties": {"spaces": {"type": "number"}, "amount": {"type": "number"}}}}}, "refund": {"type": "object", "description": "The refunds and reversals on the day.", "properties": {"refund_data": {"type": "array", "items": {"type": "object", "properties": {"tenant": {"type": "string"}, "space_no": {"type": "string"}, "amount": {"type": "number"}, "payment_method": {"type": "string"}, "payment_details": {"type": "string"}}}}, "total": {"type": "object", "properties": {"spaces": {"type": "number"}, "amount": {"type": "number"}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"day": {"summary": "One day at one property (trimmed)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"report": {"payment_deposits": {"date": "2026-09-24", "cash": {"rent": 9535.74, "insurance": 658.18, "merchandise": 0, "auction": 3032.27, "deposits": 700, "fees": 926.6, "tax": 1565.65, "sub_total": 16418.44, "refund": -2039.41, "totals": 14379.03, "fees_details": [{"name": "ACH - Reversal ($30)", "value": 150}]}, "card": {"rent": 0, "insurance": 0, "merchandise": 0, "auction": 0, "deposits": 0, "fees": 0, "tax": 0, "sub_total": 0, "refund": 0, "totals": 0, "fees_details": [{"name": "ACH - Reversal ($30)", "value": 0}]}, "total": {"rent": 9536.68, "insurance": 659.18, "merchandise": 0, "auction": 3032.27, "deposits": 700, "fees": 926.6, "tax": 1565.71, "sub_total": 16420.44, "refund": -2040.41, "totals": 14380.03, "fees_details": [{"name": "ACH - Reversal ($30)", "value": 150}]}}, "card_deposits": {"date": "2026-09-24", "visa": {"rent": 0, "insurance": 0, "merchandise": 0, "auction": 0, "deposits": 0, "fees": 0, "tax": 0, "sub_total": 0, "refund": 0, "totals": 0, "fees_details": [{"name": "ACH - Reversal ($30)", "value": 0}]}, "total": {"rent": 0, "insurance": 0, "merchandise": 0, "auction": 0, "deposits": 0, "fees": 0, "tax": 0, "sub_total": 0, "refund": 0, "totals": 0, "fees_details": [{"name": "ACH - Reversal ($30)", "value": 0}]}}, "receipts": {"receipts_data": [{"tenant": "<tenant name>", "space_nos": "2733", "amount": 138.2, "payment_method": "Cash", "payment_details": ""}], "total": {"spaces": 25, "amount": 16420.440000000002}}, "refund": {"refund_data": [{"tenant": "<tenant name>", "space_no": "47, 111", "amount": -1044.28, "payment_method": "Cash", "payment_details": ""}], "total": {"spaces": 10, "amount": -2040.4099999999999}}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"missing_property": {"summary": "property_id is missing, or date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Please enter a property id ", "actual_cause": "Please enter a property id ", "message": ""}}, "invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/properties/{property_id}/reports/occupancy-statistics-report": {"get": {"tags": ["Properties"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/property_id"}, {"in": "query", "name": "date", "required": true, "schema": {"type": "string", "format": "date"}, "example": "2026-10-19", "description": "The day the report is for. Format YYYY-MM-DD. Must not be after today's date (UTC)."}, {"in": "query", "name": "space_group_id", "schema": {"type": "string"}, "example": "deBobWuxj0", "required": true, "description": "ID of the space grouping profile whose groups break down the report. Use in: Get Property Space Groups (GET /properties/{property_id}/space-groups)."}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/properties/{property_id}/reports/occupancy-statistics-report", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get occupancy statistics report for a property", "operationId": "getPropertyOccupancyStatisticsReport", "description": "The OSR includes detailed information about your property such as occupancy percentages, and other financial metrics by space groups. The formula for calculating the total promotion is the sum of the discount amount and the promotion amount (i.e., summary.disc_amount + summary.promo_amount). Within this endpoint, percentage values are decimals (0.7 means 70%).\n\n**Cost:** Heavy. About 6 seconds and 300 to 400 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object"}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"missing_space_group": {"summary": "space_group_id is missing or empty", "value": {"status": 400, "data": {}, "msg": "Space group id required", "actual_cause": "Space group id required", "message": ""}}, "bad_date": {"summary": "date is missing or not a valid YYYY-MM-DD date", "value": {"status": 400, "data": {}, "msg": "Required date format is (YYYY-MM-DD)", "actual_cause": "Required date format is (YYYY-MM-DD)", "message": ""}}, "future_date": {"summary": "date is in the future", "value": {"status": 400, "data": {}, "msg": "Invalid Date. The date entered is in the future", "actual_cause": "Invalid Date. The date entered is in the future", "message": ""}}, "invalid_id": {"summary": "property_id or space_group_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The property is not one this application can access.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 403, "data": {}, "msg": "You do not have access to this resource", "actual_cause": "You do not have access to this resource", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reservations/": {"get": {"tags": ["Reservations"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "description": "Hashed ID of a property. Only reservations at this property are returned. Default: every property your application can access. Use in: Get a single property (GET /properties/{property_id}).", "example": "85B73ubBGy"}], "x-nectar-endpoint-name": "/v1/companies/company_id/reservations/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all active reservations", "operationId": "getAllActiveReservations", "description": "Returns the company's active reservations, earliest reserved time first. A reservation holds a space for a new tenant until it expires. Each reservation comes with its pending lease, the reserved space and the tenants on the lease. Expired reservations are not listed.\n\n**Cost:** Light. About 0.6 to 1 second and 12 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"reservations": {"type": "array", "description": "Active reservations, earliest reserved time first.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the reservation. Use in: Get details about the reservation (GET /reservations/{reservation_id})."}, "expires": {"type": "string", "description": "Date and time the reservation expires (UTC), `YYYY-MM-DD HH:mm:ss`."}, "created": {"type": "string", "description": "Date and time the reservation was made (UTC), `YYYY-MM-DD HH:mm:ss`."}, "time": {"type": "string", "description": "Reserved date and time (UTC), `YYYY-MM-DD HH:mm:ss`."}, "lease_id": {"type": "string", "description": "Hashed ID of the reservation's pending lease. Get details about a lease (GET /leases/{lease_id}) returns the lease once it is no longer pending."}, "Promotions": {"type": "array", "description": "Promotions applied to the reservation's lease.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the promotion. Use in: Get promotion details (GET /promotions/{promotion_id})."}, "start_date": {"type": "string", "description": "Date the promotion starts, `YYYY-MM-DD`."}, "end_date": {"type": "string", "nullable": true, "description": "Date the promotion ends, `YYYY-MM-DD`. null when no end date is set."}}}}, "Lease": {"type": "object", "description": "The reservation's lease. It is pending while the space is reserved.", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease. Get details about a lease (GET /leases/{lease_id}) returns the lease once it is no longer pending."}, "unit_id": {"type": "string", "description": "Hashed ID of the reserved space. Use in: Get details of a unit (GET /units/{unit_id})."}, "notes": {"type": "string", "description": "Notes on the lease."}, "terms": {"type": "string"}, "rent": {"type": "number", "description": "Rent of the lease."}, "security_deposit": {"type": "number", "description": "Security deposit of the lease."}, "monthly": {"type": "number"}, "code": {"type": "string"}, "balance": {"type": "number", "description": "Balance of the lease."}, "OpenInvoices": {"type": "array", "items": {"type": "string"}}, "Unit": {"type": "object", "description": "The reserved space.", "properties": {"id": {"type": "string", "description": "Hashed ID of the space. Use in: Get details of a unit (GET /units/{unit_id})."}, "property_id": {"type": "string", "description": "Hashed ID of the property the space is at. Use in: Get a single property (GET /properties/{property_id})."}, "category_id": {"type": "string", "description": "Hashed ID of the space category."}, "address_id": {"type": "string", "description": "Hashed ID of the address."}, "number": {"type": "string", "description": "Space number at the property."}, "Address": {"type": "object", "description": "Address of the space.", "properties": {"address": {"type": "string", "description": "Street address."}, "address2": {"type": "string", "nullable": true, "description": "Second address line."}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number", "nullable": true, "description": "Latitude."}, "lng": {"type": "number", "nullable": true, "description": "Longitude."}}}}}, "Tenants": {"type": "array", "description": "Tenants on the lease.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the tenant's link to the lease."}, "contact_id": {"type": "string", "description": "Hashed ID of the tenant's contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease."}, "sort": {"type": "number", "description": "Sort order of the tenant."}, "created_at": {"type": "string", "description": "Date and time the tenant was added to the lease, `YYYY-MM-DD HH:mm:ss`."}, "Contact": {"type": "object", "description": "The tenant's contact record.", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "salutation": {"type": "string", "description": "Salutation of the contact."}, "first": {"type": "string", "description": "First name."}, "middle": {"type": "string", "description": "Middle name."}, "last": {"type": "string", "description": "Last name."}, "suffix": {"type": "string", "description": "Name suffix, for example Jr."}, "email": {"type": "string", "description": "Email address."}, "company": {"type": "string", "description": "Company the contact works for."}, "dob": {"type": "string", "description": "Date of birth."}, "ssn": {"type": "string", "description": "Social Security Number."}, "gender": {"type": "string", "description": "Gender of the contact."}, "driver_license": {"type": "string", "description": "Driver's license number."}, "source": {"type": "string", "description": "Where the contact came from."}, "Phones": {"type": "array", "description": "Phone numbers of the contact.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the phone number."}, "type": {"type": "string", "description": "Phone type, for example `Cell`."}, "phone": {"type": "string", "description": "Phone number, digits only."}, "sms": {"type": "boolean", "description": "Whether the number accepts text messages."}}}}}}}}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"reservations": [{"id": "8vxd3Zhbv5", "expires": "2026-10-21 05:43:10", "created": "2026-10-17 05:43:10", "time": "2026-10-20 05:43:10", "lease_id": "DjeagQ7Tgj", "Promotions": [{"id": "MojDZmhJvY", "start_date": "2026-10-20", "end_date": "2026-11-19"}], "Lease": {"id": "DjeagQ7Tgj", "unit_id": "eBd4zYMF7B", "notes": null, "terms": "1", "rent": 100, "security_deposit": 0, "monthly": 1, "code": null, "balance": 0, "OpenInvoices": [], "Unit": {"id": "eBd4zYMF7B", "property_id": "85B73ubBGy", "category_id": "qvQdbmFEBm", "address_id": "gjYQwd6Cej", "number": "prorize30", "Address": {"address": "5281 California Ave 22", "address2": "Suite 9", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": "United States", "lat": 33.63552, "lng": -117.855854}}, "Tenants": [{"id": "qvQdbOXiEB", "contact_id": "VvaKwpkskj", "lease_id": "DjeagQ7Tgj", "sort": 1, "created_at": "2026-10-17 05:43:09", "Contact": {"id": "VvaKwpkskj", "salutation": null, "first": "Test", "middle": null, "last": "SNM Reserve", "suffix": null, "email": "snm-test-reserve@example.com", "company": null, "dob": null, "ssn": null, "gender": null, "driver_license": null, "source": null, "Phones": [{"id": "lBNZnYOSLB", "type": "Cell", "phone": "9495550142", "sms": false}]}}]}}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/units/{unit_id}/reserve": {"post": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create a new reservation for unit", "description": "Create a new reservation for the associated unit with the associated company.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"description": "Success", "$ref": "#/components/schemas/CreateReservationSchema"}}}}, "responses": {"200": {"description": "Success", "$ref": "#/components/responses/CompanyReservations"}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/reservations/{reservation_id}": {"get": {"tags": ["Reservations"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/reservation_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get details about the reservation", "operationId": "getReservationDetails", "description": "Returns one reservation with its move-in date, the promotions applied, its pending lease, the reserved space and the tenants on the lease. Expired reservations are returned too: compare `expires` with the current time.\n\n**Cost:** Light. About 0.3 to 0.5 seconds and 2 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"reservation": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the reservation."}, "expires": {"type": "string", "description": "Date and time the reservation expires (UTC), `YYYY-MM-DD HH:mm:ss`."}, "created": {"type": "string", "description": "Date and time the reservation was made (UTC), `YYYY-MM-DD HH:mm:ss`."}, "time": {"type": "string", "description": "Reserved date and time (UTC), `YYYY-MM-DD HH:mm:ss`."}, "lease_id": {"type": "string", "description": "Hashed ID of the reservation's pending lease. Get details about a lease (GET /leases/{lease_id}) returns the lease once it is no longer pending."}, "move_in_date": {"type": "string", "description": "Move-in date of the reservation's lease, `YYYY-MM-DD`."}, "Promotions": {"type": "array", "description": "Promotions applied to the reservation's lease.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the promotion. Use in: Get promotion details (GET /promotions/{promotion_id})."}, "start_date": {"type": "string", "description": "Date the promotion starts, `YYYY-MM-DD`."}, "end_date": {"type": "string", "nullable": true, "description": "Date the promotion ends, `YYYY-MM-DD`. null when no end date is set."}}}}, "Charges": {"type": "object", "description": "Charges of the lease for its current billing period.", "properties": {"date": {"type": "string", "description": "Date of the charges, `YYYY-MM-DD`."}, "due": {"type": "string", "description": "Due date, `YYYY-MM-DD`."}, "discounts": {"type": "number", "description": "Total discounts."}, "sub_total": {"type": "number", "description": "Total before tax."}, "total_tax": {"type": "number", "description": "Total tax."}, "total_due": {"type": "number", "description": "Total due."}, "balance": {"type": "number", "description": "Amount still owed."}, "Detail": {"type": "array", "items": {"type": "string"}}}}, "Lease": {"type": "object", "description": "The reservation's lease. It is pending while the space is reserved.", "properties": {"unit_id": {"type": "string", "description": "Hashed ID of the reserved space. Use in: Get details of a unit (GET /units/{unit_id})."}, "notes": {"type": "string", "nullable": true, "description": "Notes on the lease."}, "terms": {"type": "string"}, "rent": {"type": "number", "description": "Rent of the lease."}, "security_deposit": {"type": "number", "description": "Security deposit of the lease."}, "monthly": {"type": "number"}, "code": {"type": "string"}, "balance": {"type": "number", "description": "Balance of the lease."}, "Unit": {"type": "object", "description": "The reserved space.", "properties": {"id": {"type": "string", "description": "Hashed ID of the space. Use in: Get details of a unit (GET /units/{unit_id})."}, "property_id": {"type": "string", "description": "Hashed ID of the property the space is at. Use in: Get a single property (GET /properties/{property_id})."}, "category_id": {"type": "string", "description": "Hashed ID of the space category."}, "address_id": {"type": "string", "description": "Hashed ID of the address."}, "number": {"type": "string", "description": "Space number at the property."}, "Address": {"type": "object", "description": "Address of the space.", "properties": {"address": {"type": "string", "description": "Street address."}, "address2": {"type": "string", "nullable": true, "description": "Second address line."}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string", "nullable": true}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number", "nullable": true, "description": "Latitude."}, "lng": {"type": "number", "nullable": true, "description": "Longitude."}}}}}, "Tenants": {"type": "array", "description": "Tenants on the lease.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the tenant's link to the lease."}, "contact_id": {"type": "string", "description": "Hashed ID of the tenant's contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease."}, "sort": {"type": "number", "description": "Sort order of the tenant."}, "created_at": {"type": "string", "description": "Date and time the tenant was added to the lease, `YYYY-MM-DD HH:mm:ss`."}, "Contact": {"type": "object", "description": "The tenant's contact record.", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "salutation": {"type": "string", "description": "Salutation of the contact."}, "first": {"type": "string", "description": "First name."}, "middle": {"type": "string", "description": "Middle name."}, "last": {"type": "string", "description": "Last name."}, "suffix": {"type": "string", "description": "Name suffix, for example Jr."}, "email": {"type": "string", "description": "Email address."}, "company": {"type": "string", "description": "Company the contact works for."}, "dob": {"type": "string", "description": "Date of birth."}, "ssn": {"type": "string", "description": "Social Security Number."}, "gender": {"type": "string", "description": "Gender of the contact."}, "driver_license": {"type": "string", "description": "Driver's license number."}, "source": {"type": "string", "description": "Where the contact came from."}, "Phones": {"type": "array", "description": "Phone numbers of the contact.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the phone number."}, "type": {"type": "string", "description": "Phone type, for example `Cell`."}, "phone": {"type": "string", "description": "Phone number, digits only."}, "sms": {"type": "boolean", "description": "Whether the number accepts text messages."}}}}}}}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"reservation": {"id": "8vxd3Zhbv5", "expires": "2026-10-21 05:43:10", "created": "2026-10-17 05:43:10", "time": "2026-10-20 05:43:10", "lease_id": "DjeagQ7Tgj", "move_in_date": "2026-10-20", "Promotions": [{"id": "MojDZmhJvY", "start_date": "2026-10-20", "end_date": "2026-11-19"}], "Charges": {"date": "2026-10-20", "due": "2026-10-20", "discounts": 0, "sub_total": 0, "total_tax": 0, "total_due": 0, "balance": 0, "Detail": []}, "Lease": {"unit_id": "eBd4zYMF7B", "notes": null, "terms": "1", "rent": 100, "security_deposit": 0, "monthly": 1, "code": null, "balance": 0, "Unit": {"id": "eBd4zYMF7B", "property_id": "85B73ubBGy", "category_id": "qvQdbmFEBm", "address_id": "gjYQwd6Cej", "number": "prorize30", "Address": {"address": "5281 California Ave 22", "address2": "Suite 9", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": "United States", "lat": 33.63552, "lng": -117.855854}}, "Tenants": [{"id": "qvQdbOXiEB", "contact_id": "VvaKwpkskj", "lease_id": "DjeagQ7Tgj", "sort": 1, "created_at": "2026-10-17 05:43:09", "Contact": {"id": "VvaKwpkskj", "salutation": null, "first": "Test", "middle": null, "last": "SNM Reserve", "suffix": null, "email": "snm-test-reserve@example.com", "company": null, "dob": null, "ssn": null, "gender": null, "driver_license": null, "source": null, "Phones": [{"id": "lBNZnYOSLB", "type": "Cell", "phone": "9495550142", "sms": false}]}}]}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "reservation_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "not_found": {"summary": "reservation_id is a valid ID but matches no reservation", "value": {"status": 400, "data": {}, "msg": "Reservation not found.", "actual_cause": "Reservation not found.", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/tenants": {"get": {"tags": ["Tenants"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "limit", "required": false, "schema": {"type": "integer", "default": 100}, "description": "Number of tenants to return. Default: 100. Values above 10000 are returned as 10000. A value that is not a positive whole number returns 20."}, {"in": "query", "name": "offset", "required": false, "schema": {"type": "integer", "default": 0}, "description": "Number of tenants to skip before the first one returned. Default: 0. A value that is not a number is treated as 0."}, {"in": "query", "name": "property_id", "required": false, "schema": {"type": "string"}, "description": "Hashed ID of a property. Returns only tenants on leases at this property. Default: none (all properties your app can access). Use in: Get a single property (GET /properties/{property_id})."}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all tenants", "description": "Lists the company's tenants: one item per person on an active lease, that is a lease with no end date or an end date after today. A lease with two tenants appears as two items. Each item has the lease, the contact with phones, addresses, business details and related contacts, and the reservation the lease came from.\n\nResults are paged with `limit` and `offset`. `paging.total` is the number of tenants that match. To get the next page, send the same request with `offset` increased by `limit`.\n\n**Cost:** Heavy. About 5 seconds and 12 MB at the maximum page size of 10000 (9,317 tenants). About 0.6 seconds and 210 KB at the default page size of 100.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"tenant": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of this tenant (the link between the contact and the lease)."}, "contact_id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "description": "Hashed ID of the lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "sort": {"type": "integer", "format": "int32"}, "type": {"type": "string"}, "created_at": {"type": "string", "description": "Creation date"}, "Lease": {"type": "object", "properties": {"id": {"type": "string", "description": "Lease ID"}, "unit_id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id})."}, "start_date": {"type": "string", "format": "date", "description": "Lease start date"}, "end_date": {"type": "string", "description": "Lease end date", "nullable": true}, "bill_day": {"type": "integer", "format": "int32"}, "terms": {"type": "string", "nullable": true}, "rent": {"type": "number"}, "status": {"type": "integer", "format": "int32"}, "send_invoice": {"type": "integer", "format": "int32"}, "security_deposit": {"type": "number", "nullable": true}, "moved_out": {"type": "string", "format": "nullable"}}}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "salutation": {"type": "string", "nullable": true}, "first": {"type": "string"}, "middle": {"type": "string", "nullable": true}, "last": {"type": "string"}, "suffix": {"type": "string", "nullable": true}, "email": {"type": "string", "nullable": true}, "company": {"type": "string", "nullable": true}, "dob": {"type": "string", "nullable": true, "description": "Date of birth. Masked: only the year is shown, for example 1990-**-**."}, "ssn": {"type": "string", "nullable": true, "description": "Social security number. Always fully masked with *."}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true, "description": "Driver's license number. Masked: only the last 4 characters are shown."}, "source": {"type": "string", "nullable": true}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string", "nullable": true}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string", "nullable": true}, "zip": {"type": "string"}, "country": {"type": "string", "nullable": true}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "formatted_address": {"type": "string", "nullable": true}}}}}}, "Business": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "address_id": {"type": "string"}, "name": {"type": "string", "nullable": true}, "phone": {"type": "string"}, "phone_type": {"type": "string", "nullable": true}, "country_code": {"type": "string", "nullable": true}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string", "nullable": true}, "address2": {"type": "string", "nullable": true}, "neighborhood": {"type": "string", "format": "nullable"}, "city": {"type": "string", "nullable": true}, "state": {"type": "string", "nullable": true}, "zip": {"type": "string", "nullable": true}, "country": {"type": "string", "nullable": true}, "lat": {"type": "string", "format": "nullable"}, "lng": {"type": "string", "format": "nullable"}, "formatted_address": {"type": "string", "format": "nullable"}, "region": {"type": "string", "format": "nullable"}, "district": {"type": "string", "format": "nullable"}}}}}, "Relationships": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string", "nullable": true}, "related_contact_id": {"type": "string"}, "type": {"type": "string", "nullable": true}, "is_cosigner": {"type": "integer", "format": "int32"}, "is_emergency": {"type": "integer", "format": "int32"}, "is_alternate": {"type": "integer", "format": "int32"}, "is_military": {"type": "integer", "format": "int32"}, "is_authorized": {"type": "integer", "format": "int32"}, "is_lien_holder": {"type": "integer", "format": "int32"}, "created_at": {"type": "string"}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "salutation": {"type": "string", "nullable": true}, "first": {"type": "string"}, "middle": {"type": "string", "nullable": true}, "last": {"type": "string"}, "suffix": {"type": "string", "nullable": true}, "email": {"type": "string", "nullable": true}, "company": {"type": "string", "nullable": true}, "dob": {"type": "string", "format": "nullable"}, "ssn": {"type": "string", "nullable": true, "description": "Social security number. Always fully masked with *."}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true, "description": "Driver's license number. Masked: only the last 4 characters are shown."}, "source": {"type": "string", "nullable": true}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string", "nullable": true}, "sms": {"type": "boolean"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "type": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string", "nullable": true}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string", "nullable": true}, "zip": {"type": "string"}, "country": {"type": "string", "nullable": true}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "formatted_address": {"type": "string", "nullable": true}}}}}}}}}}}}}, "Reservation": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "expires": {"type": "string"}, "created": {"type": "string"}, "time": {"type": "string"}}, "description": "The reservation the lease came from. Empty object when there is none."}}}}, "paging": {"type": "object", "properties": {"count": {"type": "integer", "format": "int32"}, "total": {"type": "integer", "format": "int32"}, "num_pages": {"type": "integer", "format": "int32", "description": "Not returned when total is 0."}, "next": {"type": "string", "nullable": true}, "prev": {"type": "string", "nullable": true}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"tenant": {"summary": "One tenant (limit=1)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"tenant": [{"id": "eBodz8WUxv", "contact_id": "eBndkKJS62", "lease_id": "OBqL5Y6c1j", "sort": 1, "type": "tenant", "created_at": "2026-09-25 21:26:09", "Lease": {"id": "OBqL5Y6c1j", "unit_id": "nB9Yq7EsrB", "start_date": "2026-09-25", "end_date": null, "bill_day": 1, "terms": "1", "rent": 54.5, "status": 1, "send_invoice": 1, "security_deposit": 50, "moved_out": null}, "Contact": {"id": "eBndkKJS62", "salutation": null, "first": "Levi", "middle": null, "last": "Lee", "suffix": null, "email": "levi.lee232@example.com", "company": "", "dob": null, "ssn": null, "gender": null, "driver_license": null, "source": null, "Phones": [{"id": "gj8mkwxU4B", "type": "Cell", "phone": "<phone>", "sms": false}], "Addresses": [{"id": "qvQdJ63iEB", "type": "primary", "Address": {"id": "GBlDl0JHZB", "address": "320 Golden Shore", "address2": "", "city": "Long Beach", "state": "CA", "neighborhood": "", "zip": "90802", "country": "United States", "lat": 0, "lng": 0, "formatted_address": null}}], "Business": {}, "Relationships": []}, "Reservation": {"id": "nB91XoirB6", "lease_id": "OBqL5Y6c1j", "expires": "2026-09-26 21:26:08", "created": "2026-09-25 21:26:09", "time": "2026-09-25 21:26:08"}}], "paging": {"count": 1, "total": 9317, "num_pages": 9317, "next": "https://api.tenantinc.com/v1/companies/kQoBXpBpnx/tenants/?limit=1&offset=1&status=active", "prev": null}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/units/{unit_id}/lease": {"get": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get lease details", "description": "Returns the current lease on a unit, with its tenants and their contact details. The current lease is the lease that is active today. A unit with no current lease, including a unit whose lease is still pending, returns 404 `Lease not found!`.\n\n**Cost:** Light. About 0.3 to 0.7 seconds and about 8 to 10 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"lease": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed lease id. Use in: Get details about a lease (GET /leases/{lease_id})."}, "unit_id": {"type": "string", "description": "Hashed unit id. Use in: Get details of a unit (GET /units/{unit_id}), Get lease details (GET /units/{unit_id}/lease), Get payment details for new lease before creating one (GET /units/{unit_id}/lease-set-up)."}, "start_date": {"type": "string", "description": "Start date of the lease", "format": "date"}, "end_date": {"type": "string", "description": "End date of the lease", "format": "date"}, "bill_day": {"type": "number", "description": "Day at which the bill has been generated"}, "notes": {"type": "string", "description": "Notes related to the lease"}, "terms": {"type": "string", "description": "Lease terms", "nullable": true}, "rent": {"type": "number"}, "status": {"type": "number"}, "send_invoice": {"type": "number"}, "security_deposit": {"type": "number", "description": "Amount which has been deposited as security"}, "monthly": {"type": "number"}, "code": {"type": "string", "format": "nullable"}, "balance": {"type": "number"}, "open_balance": {"type": "number"}, "decline_insurance": {"type": "number"}, "moved_out": {"type": "string", "format": "date", "description": "Moved out date"}, "rent_paid_through": {"type": "string", "format": "date", "nullable": true}, "lease_standing_id": {"type": "string", "description": "Hashed ID of the lease standing"}, "insurance_exp_month": {"type": "string", "format": "nullable", "description": "Month in which the insurance has to be expired"}, "insurance_exp_year": {"type": "string", "format": "nullable", "description": "Year in which the insurance has to be expired"}, "Standing": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the lease standing"}, "name": {"type": "string", "example": "Lease Closed, Current, Pending, Suspended, Delinquent, Balance Due, Gate Lockout, Active Lien, Auction", "description": "Name of the lease standing"}, "sort": {"type": "number", "description": "Sort order of the lease standing"}, "type": {"type": "string"}, "status": {"type": "number", "description": "Status in which the lease standing are active or not."}, "color": {"type": "string", "example": "#D91E18, #00B894", "description": "Hex color code of the lease standing"}, "overlock": {"type": "number"}, "deny_access": {"type": "number"}}}, "auction_status": {"type": "string", "example": "auction_day, scheduled, complete, move_out, auction_payment", "description": "Status of the auction", "nullable": true}, "OpenInvoices": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the open invoice"}, "lease_id": {"type": "string", "description": "Hashed ID of the lease"}, "number": {"type": "string"}, "date": {"type": "string", "format": "date"}, "due": {"type": "string", "format": "date"}, "discounts": {"type": "number"}, "sub_total": {"type": "number"}, "total_tax": {"type": "number"}, "total_due": {"type": "number"}, "total_payments": {"type": "number"}, "balance": {"type": "number"}, "Payment": {"type": "object", "properties": {"id": {"type": "string"}, "payment_methods_id": {"type": "string", "format": "nullable", "description": "ID of a saved payment method;if provided no need for payment_method object"}, "lease_id": {"type": "string", "description": "Hashed ID of the lease"}, "contact_id": {"type": "string", "description": "Hashed ID of the contact"}, "property_id": {"type": "string", "description": "Hashed ID of the property"}, "device_id": {"type": "string", "format": "nullable"}, "amount": {"type": "number"}, "amount_tendered": {"type": "string", "format": "nullable"}, "transaction_id": {"type": "string", "format": "nullable", "description": "Hashed ID of the transaction made"}, "auth_code": {"type": "string", "format": "nullable"}, "applied": {"type": "number"}, "date": {"type": "string"}, "number": {"type": "string", "format": "nullable"}, "ref_name": {"type": "string"}, "source": {"type": "string", "format": "nullable", "description": "payment source"}, "method": {"type": "string"}, "sub_method": {"type": "string", "format": "nullable"}, "verification_method": {"type": "string", "format": "nullable", "example": "Signature, Online pin, etc.", "description": "Verification method of the payment"}, "aid": {"type": "string", "format": "nullable"}, "qb_id": {"type": "string", "format": "nullable"}, "notes": {"type": "string"}, "created": {"type": "string"}, "credit_type": {"type": "string"}, "status": {"type": "number"}, "status_desc": {"type": "string", "format": "nullable"}, "accepted_by": {"type": "string", "description": "Hashed id of the user in which the payment has been accepted"}, "amt_remaining": {"type": "number"}, "message": {"type": "string", "format": "nullable"}, "effective_date": {"type": "string", "format": "date"}, "payment_method_type_id": {"type": "string", "example": "Cash, Card, ACH, Credit, Other", "description": "Hashed id of the payment method type"}}}}}}, "Unit": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the unit"}, "price": {"type": "number", "description": "Price of the unit"}, "label": {"type": "string", "example": "20' x 10'", "description": "Label of the unit"}, "number": {"type": "string", "description": "Number of the unit"}, "type": {"type": "string", "example": "storage, residential, parking", "description": "Type of the unit"}, "property_id": {"type": "string", "description": "Hashed ID of the property"}}}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "ID of the tenant"}, "contact_id": {"type": "string", "description": "Hashed ID of the tenant contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "lease_id": {"type": "string", "description": "ID of the lease"}, "sort": {"type": "number", "description": "Sort order of the tenant"}, "created_at": {"type": "string", "description": "Date at which the tenant has been created"}, "Contact": {"type": "object", "properties": {"id": {"type": "string", "description": "ID of the contact"}, "salutation": {"type": "string", "format": "nullable", "example": "Mr., Mrs.", "description": "Salutation of the contact", "nullable": true}, "first": {"type": "string", "description": "First name of the contact"}, "middle": {"type": "string", "format": "nullable", "description": "Middle name of the contact", "nullable": true}, "last": {"type": "string", "description": "Last name of the contact"}, "suffix": {"type": "string", "format": "nullable", "description": "Suffix of the contact", "nullable": true}, "email": {"type": "string", "description": "Email of the contact"}, "company": {"type": "string", "format": "nullable", "description": "Name of the company in which the contact belongs", "nullable": true}, "dob": {"type": "string", "format": "nullable", "description": "Date of birth. The API masks it: only the year is shown.", "nullable": true}, "ssn": {"type": "string", "format": "nullable", "description": "Social security number. The API masks it in full.", "nullable": true}, "gender": {"type": "string", "format": "nullable", "description": "Gender of the contact"}, "driver_license": {"type": "string", "description": "Driver license number. The API masks it: only the last 4 characters are shown.", "nullable": true}, "source": {"type": "string", "format": "nullable", "example": "Walk-in, Primary, Alternate", "description": "Source of the contact"}, "status": {"type": "string", "example": "current, lease closed, active, retired lead, active lien, balance due, delinquent, active lead, pending, gate lockout", "description": "Status of the contact"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed id of the phone"}, "type": {"type": "string", "example": "cell phone, Fax, home, primary, work, etc.", "description": "Type of the phone"}, "phone": {"type": "string", "description": "Phone number"}, "sms": {"type": "boolean", "description": "Whether the phone number has also used to recieve SMS"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"Address": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed id of the address"}, "address": {"type": "string"}, "city": {"type": "string", "description": "Name of the city in which the contact belongs"}, "state": {"type": "string", "description": "Name of the state in which the contact belongs"}, "zip": {"type": "string", "description": "Zip code"}}}}}}}}}}}, "Discounts": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the discount"}, "promotion_id": {"type": "string", "description": "Hashed ID of the promotion"}, "coupon_id": {"type": "string", "format": "nullable", "description": "Hashed ID of the coupon"}, "start": {"type": "string", "format": "date", "description": "Start date of the discount"}, "end": {"type": "string", "format": "nullable", "description": "End date of the discount"}, "lease_id": {"type": "string", "description": "Hashed ID of the lease"}, "company_id": {"type": "string", "format": "nullable", "description": "Hashed ID of the company"}, "value": {"type": "number", "description": "Discount amount"}, "type": {"type": "string", "example": "percent, dollar, fixed", "description": "Type of the discount"}, "pretax": {"type": "number", "description": "If true, the tax will be calculated only after applying the promotion. For eg:- If pretax = 1, discount is calculated first then tax and if it's 0, tax is calculated first and then discount."}, "msg": {"type": "string"}, "Promotion": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the promotion"}, "company_id": {"type": "string", "description": "Hashed ID of the company"}, "name": {"type": "string", "description": "Name of the promotion"}, "description": {"type": "string", "description": "Description of the promotion"}, "label": {"type": "string", "description": "Labels are of two types, discount and promotion. Promotion is a temporary offer used to reduce the rent amount of a tenant for a period of time whereas discounts are reduction in rental cost used to attract new or existing tenants and are only applied once."}, "value": {"type": "number", "description": "Promotion amount."}, "type": {"type": "string", "example": "percent, dollar, fixed-rate"}, "months": {"type": "string", "format": "nullable", "description": "Duration of promotion, if there is an end_date , the end_date will be taken into consideration."}, "offset": {"type": "number", "description": "Number of months, which needs to be skipped."}, "sort": {"type": "number", "description": "Sort oder of the promotion"}, "pretax": {"type": "number", "description": "If true, the tax will be calculated only after applying the promotion. For eg:- If pretax = 1, discount is calculated first then tax and if it's 0, tax is calculated first and then discount."}, "active": {"type": "number", "description": "If true, the promotion is active."}, "public": {"type": "number"}, "required_months": {"type": "number", "description": "Number of months, which must be paid prior to applying a promotion."}, "days_threshold": {"type": "number", "description": "Apply promotion to the next month after this day, this is not applicable for anniversary billing."}, "consecutive_pay": {"type": "number", "description": "If true and the promotion type is fixed-rate, promotion will apply to consecutive months."}, "enable": {"type": "number"}, "active_period": {"type": "string", "example": "active, end_on, date-range", "description": "If active, the promotion will remain active until manually disabled. If end_on, the promotion will remain active until the specified date. If date_range, the promotion will be active for the given date range."}, "start_date": {"type": "string", "format": "date", "description": "Start date of the promotion"}, "end_date": {"type": "string", "format": "date", "description": "End date of the promotion"}, "created_by": {"type": "number", "description": "ID of the user in which the promotion has been created"}, "created_at": {"type": "string", "description": "Date at which the promotion has been created"}, "round": {"type": "string", "format": "nullable"}}}, "round": {"type": "string", "format": "nullable"}}}}, "stored_contents": {"type": "string", "description": "Details of the stored contents saved under a lease"}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"leased": {"summary": "Current lease of a leased unit", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"lease": {"id": "7jP53nkfYB", "unit_id": "5B7nxWhbjG", "start_date": "2021-12-31", "end_date": null, "bill_day": 1, "notes": null, "terms": "1", "rent": 100, "status": 1, "send_invoice": 1, "security_deposit": 0, "monthly": 1, "code": null, "balance": 0, "open_balance": 0, "decline_insurance": 0, "moved_out": null, "rent_paid_through": "2023-04-30", "lease_standing_id": "56v1baSD2y", "insurance_exp_month": null, "insurance_exp_year": null, "Standing": {}, "auction_status": "schedule", "OpenInvoices": [], "Unit": {}, "Tenants": [{"id": "6vAnDOC62p", "contact_id": "ojrog1oIeB", "lease_id": "7jP53nkfYB", "sort": 1, "created_at": "2021-12-31 09:25:45", "Contact": {"id": "ojrog1oIeB", "salutation": null, "first": "<first name>", "middle": null, "last": "<last name>", "suffix": null, "email": "<email>", "company": null, "dob": null, "ssn": null, "gender": null, "driver_license": "<masked driver license>", "source": null, "status": "Delinquent", "Phones": [{"id": "av3xm6yiP2", "type": "cell", "phone": "<phone>", "sms": true}], "Addresses": [{"Address": {"id": "gj87ALnh42", "address": "<street address>", "city": "<city>", "state": "<state>", "zip": "<zip>"}}]}}], "Discounts": [], "stored_contents": ""}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The unit ID matches no unit, or the unit has no current lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"unit": {"summary": "The unit ID is a valid ID but matches no unit", "value": {"status": 404, "data": {}, "msg": "Unit not found", "actual_cause": "Unit not found", "message": ""}}, "lease": {"summary": "The unit has no current lease", "value": {"status": 404, "data": {}, "msg": "Lease not found!", "actual_cause": "Lease not found!", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}, "post": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/units/{unit_id}/lease", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create a new lease", "description": "Create a lease for the associated unit with the associated company.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateLease"}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"lease": {"type": "object", "properties": {"Invoice": {"type": "object", "properties": {"id": {"type": "string"}}}, "lease_id": {"type": "string"}, "payment_id": {"type": "string"}, "payment_method_id": {"type": "string"}, "status": {"type": "string", "enum": ["pending_payment", "active", "pending"], "example": "pending_payment", "description": "Lease status after creation. pending_payment when payment is deferred (awaiting collection via payment_link), active when the lease is finalized, or pending."}, "payment_link": {"type": "string", "format": "uri", "nullable": true, "description": "One-time hosted payment link, returned when payment_pending is used so the tenant can complete payment. Null when payment was collected inline."}, "tenants": {"type": "array", "description": "Tenant details", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "pin": {"type": "string"}}}}}}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/units/bulk-edit-prices": {"put": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Update bulk edit price", "description": "Update price of all associated units in an associated company by bulk\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> manage_rate_plans Hummingbird permission required. Contact Nectar team.</small>\n", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "array", "items": {"type": "object", "properties": {"adjusted": {"type": "string"}, "id": {"type": "string"}, "rounding": {"type": "string", "nullable": true}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/units/{unit_id}": {"get": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get details of a unit", "operationId": "getUnitDetails", "description": "Returns one unit (a storage space): its number, size, price, state, address, rent product, category and amenities. When the unit has a current lease, the response also has the lease ID, dates and status, and the IDs of its tenants.\n\n**Cost:** Light. About 0.3 to 0.8 seconds and about 3 to 4 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"unit": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the unit. Use in: Get details of a unit (GET /units/{unit_id}), Get lease details (GET /units/{unit_id}/lease), Get payment details for new lease before creating one (GET /units/{unit_id}/lease-set-up)."}, "property_id": {"type": "string", "description": "Hashed ID of the property the unit belongs to. Use in: Get a single property (GET /properties/{property_id})."}, "category_id": {"type": "string"}, "product_id": {"type": "string"}, "space_mix_id": {"type": "string", "description": "Should be space mix id/space group id"}, "number": {"type": "string"}, "floor": {"type": "string", "nullable": true}, "type": {"type": "string"}, "description": {"type": "string", "nullable": true}, "price": {"type": "number"}, "default_price": {"type": "number"}, "featured": {"type": "number"}, "available_date": {"type": "string", "nullable": true}, "status": {"type": "number"}, "next_lease_start": {"type": "string"}, "length": {"type": "string"}, "width": {"type": "string"}, "height": {"type": "string"}, "label": {"type": "string"}, "state": {"type": "string", "description": "Current state of the unit, for example Available, Leased, Pending, To Overlock or Overlocked."}, "gate_status": {"type": "string", "description": "Overlock status of the unit, for example Unlocked, To Overlock or Overlocked."}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string", "nullable": true}, "zip": {"type": "string"}, "country": {"type": "string", "nullable": true}, "lat": {"type": "number", "nullable": true}, "lng": {"type": "number", "nullable": true}, "formatted_address": {"type": "string", "nullable": true}}}, "Product": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "vendor_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "status": {"type": "number"}, "price": {"type": "number", "nullable": true}, "prorate": {"type": "number"}, "prorate_out": {"type": "number"}, "recurring": {"type": "number"}, "type": {"type": "string"}, "product_category_id": {"type": "string"}, "sku": {"type": "string"}, "has_inventory": {"type": "integer"}, "taxable": {"type": "number"}, "default_type": {"type": "string"}, "amount_type": {"type": "string"}, "category_type": {"type": "string"}, "msg": {"type": "string"}, "income_subtype": {"type": "string"}, "cogs_subtype": {"type": "string"}, "concession_subtype": {"type": "string"}, "liability_subtype": {"type": "string"}, "per_unit_cost": {"type": "string"}, "inventory_count": {"type": "string"}, "Vendor": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "address_id": {"type": "string"}, "name": {"type": "string"}, "phone": {"type": "string"}, "phone2": {"type": "string"}, "email": {"type": "string"}, "active": {"type": "number"}}}, "ProductCategory": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}}}, "Properties": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}}}}, "Rules": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "product_id": {"type": "string"}, "property_id": {"type": "string"}, "type": {"type": "string"}, "price": {"type": "number"}, "rent_threshold": {"type": "number"}}}}, "taxrate": {"type": "string"}, "income_account_id": {"type": "string"}, "expense_account_id": {"type": "string"}, "concession_account_id": {"type": "string"}, "liability_account_id": {"type": "string"}}}, "Lease": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the current lease. Use in: Get details about a lease (GET /leases/{lease_id})."}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "status": {"type": "number"}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}}}, "description": "Tenants on the current lease. Only their IDs are returned."}}, "nullable": true, "description": "The current lease on the unit, or null when there is none (for example an available unit, or a unit whose lease is still pending)."}, "Images": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "filename": {"type": "string"}, "file_path": {"type": "string"}, "sort": {"type": "number"}, "document_type_id": {"type": "string"}, "uploaded_by": {"type": "string"}, "type": {"type": "string"}, "upload_date": {"type": "string"}, "extension": {"type": "string"}, "encoding": {"type": "string"}, "mimetype": {"type": "string"}, "size": {"type": "string"}, "name": {"type": "string"}, "private": {"type": "string"}, "src": {"type": "string"}, "description": {"type": "string"}, "reference_number": {"type": "string"}, "foreign_id": {"type": "string"}, "status": {"type": "number"}, "downloading": {"type": "number"}, "fileloc": {"type": "string"}, "path": {"type": "string"}, "msg": {"type": "string"}, "pages": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "filename": {"type": "string"}, "sort": {"type": "string"}, "upload_id": {"type": "string"}, "src": {"type": "string"}, "location": {"type": "string"}, "fields": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "page_id": {"type": "string"}, "x_start": {"type": "number"}, "y_start": {"type": "number"}, "width": {"type": "number"}, "height": {"type": "number"}, "merge_fields": {"type": "string"}, "type": {"type": "string"}, "signer_position": {"type": "number"}, "signer_type": {"type": "string"}}}}}}}, "Revisions": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "upload_id": {"type": "string"}, "revised_upload_id": {"type": "string"}, "status": {"type": "number"}, "sort": {"type": "number"}}}}, "DocumentType": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "active": {"type": "number"}}}, "bucket_name": {"type": "string"}, "destination": {"type": "string"}, "destination_file_path": {"type": "string"}, "document": {"type": "string"}, "model": {"type": "string"}}}}, "Floorplan": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "document_type_id": {"type": "string"}, "uploaded_by": {"type": "string"}, "private": {"type": "string"}, "status": {"type": "number"}, "fileloc": {"type": "string"}, "path": {"type": "string"}, "msg": {"type": "string"}, "DocumentType": {"type": "string"}, "destination": {"type": "string"}, "destination_file_path": {"type": "string"}, "document": {"type": "string"}}}}, "Category": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string"}, "price": {"type": "string"}, "unit_type": {"type": "string"}, "Units": {"type": "object", "properties": {"min_price": {"type": "string"}, "max_price": {"type": "string"}, "unit_count": {"type": "string"}}}, "Vacant": {"type": "object", "properties": {"min_price": {"type": "string"}, "max_price": {"type": "string"}, "unit_count": {"type": "string"}}}, "Attributes": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string"}, "value": {"type": "string"}}}}, "width_id": {"type": "string", "nullable": true}, "height_id": {"type": "string", "nullable": true}, "length_id": {"type": "string", "nullable": true}, "msg": {"type": "string"}}}, "Amenities": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "value": {"type": "string"}, "category_name": {"type": "string"}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"leased": {"summary": "Leased unit", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"unit": {"id": "5B7nxWhbjG", "property_id": "85B73ubBGy", "category_id": "Lvpp0Afdv9", "product_id": "knBmmUdBVD", "space_mix_id": "407c2075fc13740fa96502f673dfd5d0", "number": "INC21", "floor": null, "type": "storage", "description": null, "price": 154, "default_price": 140, "featured": 0, "available_date": null, "status": 1, "next_lease_start": null, "length": "5", "width": "5", "height": "10", "label": "5' x 5'", "state": "Leased", "gate_status": "Unlocked", "Address": {"id": "Vgj8yqH4BJ", "address": "5281 California Ave", "address2": "Suite 320", "city": "Irvine", "state": "CA", "neighborhood": "Downtown", "zip": "92617", "country": "United States", "lat": 34.04557, "lng": -118.250926, "formatted_address": "600 S Spring St, Los Angeles, CA 90014, USA"}, "Product": {"id": "knBmmUdBVD", "company_id": "WEj67IYBe3", "vendor_id": null, "name": "Rent", "description": null, "status": 1, "price": 124, "prorate": 0, "prorate_out": 1, "recurring": 0, "type": "product", "product_category_id": null, "sku": null, "has_inventory": 1, "taxable": 1, "default_type": "rent", "amount_type": "fixed", "category_type": "rent", "msg": "", "income_subtype": "", "cogs_subtype": "", "concession_subtype": "", "liability_subtype": "", "per_unit_cost": "", "inventory_count": "", "Vendor": {}, "ProductCategory": {}, "Properties": [], "Rules": [], "taxrate": null, "income_account_id": null, "expense_account_id": null, "concession_account_id": null, "liability_account_id": null}, "Lease": {"id": "7jP53nkfYB", "start_date": "2021-12-31", "end_date": null, "status": 1, "Tenants": [{"id": "6vAnDOC62p"}]}, "Images": [], "Floorplan": [], "Category": {"id": "Lvpp0Afdv9", "company_id": "WEj67IYBe3", "name": "Noke", "description": "", "price": "50", "unit_type": "storage", "Units": {"min_price": "", "max_price": "", "unit_count": ""}, "Vacant": {"min_price": "", "max_price": "", "unit_count": ""}, "Attributes": [], "width_id": null, "height_id": null, "length_id": null, "msg": ""}, "Amenities": []}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}, "available": {"summary": "Available unit (no current lease)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"unit": {"id": "Vva7YaIkjm", "property_id": "85B73ubBGy", "category_id": "DjeayVFgjR", "product_id": "knBmmUdBVD", "space_mix_id": "d43bf7520427d099d9ffe2a70c683089", "number": "234121", "floor": null, "type": "storage", "description": null, "price": 600, "default_price": 100, "featured": 0, "available_date": null, "status": 1, "next_lease_start": null, "length": "10", "width": "10", "height": "10", "label": "10' x 10'", "state": "Available", "gate_status": "Unlocked", "Address": {"id": "nB9YqnEHrB", "address": "5281 California Ave", "address2": "Suite 320", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": null, "lat": null, "lng": null, "formatted_address": null}, "Product": {"id": "knBmmUdBVD", "company_id": "WEj67IYBe3", "vendor_id": null, "name": "Rent", "description": null, "status": 1, "price": 124, "prorate": 0, "prorate_out": 1, "recurring": 0, "type": "product", "product_category_id": null, "sku": null, "has_inventory": 1, "taxable": 1, "default_type": "rent", "amount_type": "fixed", "category_type": "rent", "msg": "", "income_subtype": "", "cogs_subtype": "", "concession_subtype": "", "liability_subtype": "", "per_unit_cost": "", "inventory_count": "", "Vendor": {}, "ProductCategory": {}, "Properties": [], "Rules": [], "taxrate": null, "income_account_id": null, "expense_account_id": null, "concession_account_id": null, "liability_account_id": null}, "Lease": null, "Images": [], "Floorplan": [], "Category": {"id": "DjeayVFgjR", "company_id": "WEj67IYBe3", "name": "Size Category", "description": "Size", "price": "", "unit_type": "storage", "Units": {"min_price": "", "max_price": "", "unit_count": ""}, "Vacant": {"min_price": "", "max_price": "", "unit_count": ""}, "Attributes": [{"name": "height", "value": "10"}, {"name": "width", "value": "10"}], "width_id": "N6jK5LtRv9", "height_id": "MojDYECJBY", "length_id": "oLvpZ8Idj9", "msg": ""}, "Amenities": []}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The unit ID is a valid ID but matches no unit.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Unit not found", "actual_cause": "Unit not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/units/{unit_id}/hold": {"post": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Hold a unit for renting", "description": "Holding a unit for a new lease and it will make sure that no new rental takes place for this unit when unit is in hold state, by default hold token is 15 minutes", "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"hold_token": {"type": "string"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/units/{unit_id}/configure": {"get": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}], "x-nectar-endpoint-name": "/v1/companies/{company_id}/units/{unit_id}/configure", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Unit Configure", "description": "Unit Configure", "responses": {"200": {"description": "Success"}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/units/{unit_id}/configure": {"post": {"tags": ["Units"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/unit_id"}], "operationId": "configureUnitLease", "x-nectar-endpoint-name": "/v2/companies/company_id/units/unit_id/configure", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Configure a lease for a unit", "description": "Builds a move-in lease for an available storage unit and returns it with its first invoices and services. Use it to show a tenant the price before they rent, and to create the lease when they go ahead.\n\nWith `save` left out or `false`, nothing is stored: the response is a price preview and `lease.id` is null. With `save: true`, a pending lease is created on the unit and the unit is no longer available. If `contact_id` is sent, that contact is linked as the lease's primary tenant. Sending the same `save: true` request again returns 409 `The current lease of this unit is pending`. Invoices in the response are always a preview: this endpoint does not save them.\n\n**Cost:** Medium. About 0.6 seconds and 130 KB per call with `billed_months` 1; about 1.3 seconds and 1.2 MB with `billed_months` 12. Not paged.", "requestBody": {"description": "Unknown fields are ignored. The Example dropdown shows a request for each variant.\n\n| Variant | Send | What happens |\n|---|---|---|\n| 1. Price preview | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">save: false</code> or leave it out | Returns the lease, invoices and services. Nothing is saved. |\n| 2. Create a pending lease | <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">save: true</code><br><code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">type: \"lease\"</code> | Creates a pending lease on the unit. With <code style=\"white-space:nowrap;font-family:inherit;font-size:inherit\">contact_id</code>, links that contact as the primary tenant. |\n", "required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"save": {"type": "boolean", "description": "Whether to create the lease. `false` returns a preview and stores nothing. `true` creates a pending lease on the unit. Default: none (treated as false).", "example": false}, "type": {"type": "string", "description": "<span style=\"display:inline-block;padding:2px 10px;border-radius:4px;background:#fdeceb;color:#d41f1c;font-family:Courier,monospace;font-weight:normal;font-size:12px;line-height:1.5\">required if save is true</span>\n\nSend `lease`. With `save: true` and no `type`, the lease is saved without its rent service, so its stored rent is 0, even though the response shows the rent. Default: none.", "example": "lease"}, "start_date": {"type": "string", "format": "date", "description": "Move-in date, format YYYY-MM-DD. Past dates are accepted. Default: today's date.", "example": "2026-10-09"}, "contact_id": {"type": "string", "description": "Hashed ID of the contact who will rent the unit. With `save: true`, the contact is linked as the lease's primary tenant. Leaving it out creates a lease with no tenant. Default: none.", "example": "nBmAK0IdBV"}, "billed_months": {"type": "integer", "description": "Number of months to bill in the first invoices. Each extra month adds an invoice to the response and about 100 KB to its size. Default: 1.", "example": 1}, "rent": {"type": "number", "description": "Monthly rent for the lease. Replaces the unit's price. Default: the unit's price.", "example": 105}, "products": {"type": "array", "description": "Extra products to add to the lease, such as merchandise. Each item is an object; sending plain ID strings returns an error. Default: none.", "items": {"type": "object", "required": ["product_id"], "properties": {"product_id": {"type": "string", "description": "Hashed ID of the product."}}}}, "promotions": {"type": "array", "description": "Promotions to apply. The same promotion sent twice returns 400 `Duplicate promotions are not allowed.` Default: none.", "items": {"type": "object", "properties": {"promotion_id": {"type": "string", "description": "Hashed ID of the promotion."}}}}, "insurance_id": {"type": "string", "description": "Insurance ID"}, "reservation_id": {"type": "string", "description": "You do not need to provide a hold token when you provide the reservation ID"}, "auto_pay_after_billing_date": {"type": "integer", "description": "Auto pay after billing date", "example": 0}, "bill_day": {"type": "integer", "description": "Bill day for lease", "example": 1}, "billing_cycle_id": {"type": "string", "description": "Lease template billing cycle id, you can either choose payment_cycle or billing_cycle_id", "example": "k2M10LI72J"}, "discount_id": {"type": "string", "description": "Discount Id", "example": "P8vx8Yfbv5"}, "edit_lease": {"type": "boolean", "description": "Edit Lease", "example": false}, "end_date": {"type": "string", "description": "Lease End Date"}, "payment_cycle": {"type": "string", "description": "Lease payment cycle. Can choose payment_cycle or billing_cycle_id. A value the property does not offer returns 400 `Invalid Payment Cycle`.", "example": "Quarterly"}, "send_invoice": {"type": "boolean", "description": "Send invoice for lease.", "example": false}, "tax_exempt": {"type": "boolean", "description": "Exempt lease from rental tax", "example": false}, "tax_exempt_description": {"type": "string", "description": "Reason to exempt tax", "example": "Tax is exempted because"}, "is_transfer": {"type": "integer", "description": "Transfer lease", "example": 1}, "lead_id": {"type": "string", "description": "Hashed lead id of the leads"}, "transfer_lease_id": {"type": "string", "description": "Transfer lease id", "example": "MjRy5Afm2O"}, "is_free_insurance": {"type": "boolean"}, "table_rate_coverage_amount": {"type": "number"}}}, "examples": {"price_preview": {"summary": "1. Price preview", "value": {"save": false}}, "create_pending_lease": {"summary": "2. Create a pending lease", "value": {"save": true, "type": "lease", "contact_id": "nBmAK0IdBV"}}}}}}, "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`. `lease` has many more fields than listed here.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"lease": {"type": "object", "properties": {"id": {"type": "string", "nullable": true, "description": "Hashed ID of the lease. Null in a preview (`save` false)."}, "unit_id": {"type": "string"}, "contact_id": {"type": "string", "nullable": true, "description": "The `contact_id` sent, or null."}, "start_date": {"type": "string", "format": "date"}, "end_date": {"type": "string", "nullable": true}, "rent": {"type": "number"}, "status": {"type": "integer", "description": "Lease status code. 2 is pending."}, "code": {"type": "string", "nullable": true, "description": "Lease access code."}, "moved_out": {"type": "string", "nullable": true}, "security_deposit": {"type": "number"}, "monthly": {"type": "integer", "description": "0 or 1, not a JSON boolean."}, "send_invoice": {"type": "integer", "description": "0 or 1, not a JSON boolean."}, "deny_payments": {"type": "integer", "description": "0 or 1, not a JSON boolean."}, "discount_id": {"type": "string", "nullable": true}, "tax_exempt": {"type": "integer", "description": "0 or 1, not a JSON boolean."}, "balance": {"type": "number"}, "open_balance": {"type": "number"}, "has_open_invoice": {"type": "boolean"}, "created_by": {"type": "string", "nullable": true}, "Checklist": {"type": "array", "description": "Move-in checklist items, such as the lease agreement to sign.", "items": {"type": "object", "properties": {"checklist_item_id": {"type": "string"}, "name": {"type": "string"}, "document_type_id": {"type": "string", "nullable": true}, "document_id": {"type": "string", "nullable": true}, "description": {"type": "string"}, "completed": {"type": "integer", "description": "0 or 1."}, "sort": {"type": "integer"}, "processing_status": {"type": "string", "nullable": true}}}}, "statuses": {"type": "array", "items": {"type": "string"}, "description": "Fixed list of lease status labels."}}}, "invoice": {"type": "array", "description": "Preview of the first invoices, one per billed month. Not saved.", "items": {"$ref": "#/components/schemas/ConfigurePreviewInvoice"}}, "applicationInvoice": {"type": "array", "description": "Preview of the application fee invoice. Can hold one invoice with a total of 0 when there is no application fee.", "items": {"$ref": "#/components/schemas/ConfigurePreviewInvoice"}}, "reservationInvoice": {"type": "array", "description": "Preview of the reservation fee invoice. Can hold one invoice with a total of 0 when there is no reservation fee.", "items": {"$ref": "#/components/schemas/ConfigurePreviewInvoice"}}, "leaseServices": {"type": "array", "description": "Services on the lease, such as rent and insurance.", "items": {"type": "object", "properties": {"id": {"type": "string", "nullable": true, "description": "Null in a preview."}, "product_id": {"type": "string"}, "name": {"type": "string"}, "price": {"type": "number"}, "start_date": {"type": "string", "format": "date"}, "end_date": {"type": "string", "nullable": true}, "recurring": {"type": "integer", "description": "0 or 1, not a JSON boolean."}}}}, "applicationServices": {"type": "array", "items": {"type": "object"}}, "reservationServices": {"type": "array", "items": {"type": "object"}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"price_preview": {"summary": "1. Price preview", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"lease": {"id": null, "unit_id": "ojrxp8IevJ", "contact_id": null, "start_date": "2026-10-09", "end_date": null, "rent": 600, "status": 2, "code": null, "moved_out": null, "security_deposit": 0, "monthly": 1, "send_invoice": 0, "deny_payments": 0, "discount_id": null, "tax_exempt": 0, "balance": 0, "open_balance": 0, "has_open_invoice": false, "created_by": "420xG3aTm2", "Checklist": [{"checklist_item_id": "3av3WVIPvA", "name": "Lease Agreement", "document_type_id": null, "document_id": "Njg4ODlFQjk0NEJFOEExQzUzMDkxRTg3", "description": "", "completed": 0, "sort": 1, "processing_status": null}], "statuses": ["active", "pending", "innactive", "ended"]}, "invoice": [{"id": null, "lease_id": null, "property_id": null, "contact_id": null, "number": null, "date": "2026-10-09", "due": "2026-10-09", "type": "manual", "status": 1, "total_amt": 0, "total_tax": 36, "balance": 636, "total_due": 636}], "applicationInvoice": [{"id": null, "lease_id": null, "date": "2026-10-09", "due": "2026-10-09", "type": "manual", "status": 1, "total_due": 0}], "reservationInvoice": [{"id": null, "lease_id": null, "date": "2026-10-09", "due": "2026-10-09", "type": "manual", "status": 1, "total_due": 0}], "leaseServices": [{"id": null, "product_id": "knBmmUdBVD", "name": "Rent", "price": 600, "start_date": "2026-10-09", "end_date": null, "recurring": 1}], "applicationServices": [], "reservationServices": []}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}, "create_pending_lease": {"summary": "2. Create a pending lease (trimmed)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"lease": {"id": "kjgrgOKsO2", "unit_id": "6jyXbGHK2q", "contact_id": "nBmAK0IdBV", "start_date": "2026-10-08", "rent": 600, "status": 2}, "invoice": [{"id": null, "lease_id": "kjgrgOKsO2", "date": "2026-10-08", "due": "2026-10-08", "total_due": 636}], "leaseServices": [{"id": "qvQPrZkCEB", "product_id": "knBmmUdBVD", "name": "Rent", "price": 600}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ConfigureError"}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "duplicate_promotions": {"summary": "Same promotion sent twice", "value": {"status": 400, "data": {}, "msg": "Duplicate promotions are not allowed.", "actual_cause": "Duplicate promotions are not allowed.", "message": ""}}, "invalid_payment_cycle": {"summary": "payment_cycle not offered at the property", "value": {"status": 400, "data": {}, "msg": "Invalid Payment Cycle", "actual_cause": "Invalid Payment Cycle", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "unit_id or a promotion_id is a valid ID but not a unit or promotion in this company.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ConfigureError"}, "examples": {"unit_not_found": {"summary": "Unit not found", "value": {"status": 404, "data": {}, "msg": "Unit not found", "actual_cause": "Unit not found", "message": ""}}, "promotion_not_found": {"summary": "Promotion not found", "value": {"status": 404, "data": {}, "msg": "Promotion not found", "actual_cause": "Promotion not found", "message": ""}}}}}}, "409": {"description": "The unit cannot be rented now.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ConfigureError"}, "examples": {"unit_leased": {"summary": "Unit is leased", "value": {"status": 409, "data": {}, "msg": "This unit is currently leased", "actual_cause": "This unit is currently leased", "message": ""}}, "lease_pending": {"summary": "Unit already has a pending lease", "value": {"status": 409, "data": {}, "msg": "The current lease of this unit is pending", "actual_cause": "The current lease of this unit is pending", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/exports": {"post": {"tags": ["Accounting"], "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/exports", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get accounting exports", "description": "This endpoint returns accounting exports of an company.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> accounting_export Hummingbird permission required. Contact Nectar team.</small>\n", "parameters": [{"name": "company_id", "in": "path", "required": true, "schema": {"type": "string"}}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/export"}}}, "required": true}, "responses": {"200": {"description": "list of accounting exports", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "string"}, "data": {"type": "array", "items": {"type": "object", "properties": {"company_name": {"type": "string"}, "property_name": {"type": "string"}, "property_number": {"type": "string"}, "yardi_type": {"type": "string"}, "trannum": {"type": "integer"}, "date": {"type": "string", "description": "ISO formated date"}, "post_month": {"type": "string", "description": "ISO formated date"}, "ref": {"type": "string"}, "remark": {"type": "string"}, "amount": {"type": "number"}, "debit_amount": {"type": "number"}, "credit_amount": {"type": "number"}, "gl_account": {"type": "string"}, "book_type": {"type": "string"}, "gl_account_name": {"type": "string"}, "journal_event": {"type": "string"}}}}, "message": {"type": "string"}}}}}}, "404": {"description": "Not found", "content": {}}, "500": {"description": "Server error", "content": {}}}}}, "/v2/companies/{company_id}/auctions/leases/{lease_id}/uploads": {"get": {"tags": ["Auctions"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/auctions/leases/lease_id/uploads", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get auction lease uploads", "operationId": "getAuctionLeaseUploads", "description": "Returns the auction images uploaded for a lease, grouped by the lease's active delinquency. Use `src` or `media_src` (whichever is available) for the image URL. A lease without auction images returns an empty `imageSet`.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB for a lease without auction images. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"imageSet": {"type": "array", "items": {"type": "object", "properties": {"delinquency_id": {"type": "string"}, "status": {"type": "string", "description": "active indicates current delinquency"}, "uploads": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "src": {"type": "string"}, "upload_date": {"type": "string"}, "status": {"type": "integer"}, "media_src": {"type": "string"}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"no_images": {"summary": "A lease without auction images", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"imageSet": []}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The lease ID is a valid ID but matches no lease.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/space-groups": {"get": {"tags": ["Space-Groups"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"in": "query", "name": "space_group_id", "required": true, "description": "Hashed ID of a space grouping profile. Repeat the parameter for several profiles, for example space_group_id=deBobWuxj0&space_group_id=p6jy3PUKvq. Use in: from Get Property Space Groups (GET /properties/{property_id}/space-groups), spaceGroups[].id.", "schema": {"type": "array", "items": {"type": "string"}}}, {"in": "query", "name": "get_secondary_groups", "schema": {"type": "number", "example": 1}}, {"in": "query", "name": "fetch_APW", "schema": {"type": "boolean", "default": false}}, {"in": "query", "name": "fetch_insurance", "description": "true or 1 fills insurance for each space type. Any other value counts as false.", "schema": {"type": "boolean", "default": false}}, {"in": "query", "name": "fetch_promotions", "description": "true or 1 fills tiers[].promo. Any other value counts as false.", "schema": {"type": "boolean", "default": false}}, {"in": "query", "name": "fetch_amenities", "description": "true or 1 fills groups[].amenities and tiers[].amenities. Any other value counts as false. Makes the response much larger.", "schema": {"type": "boolean", "default": false}}, {"in": "query", "name": "space_type_id", "description": "Hashed space type IDs to include (unit_type_id from Retrieve Company Space Management and Space Type Details, GET /v2/.../space-management/space-types). Repeat the parameter for several. Default: all space types.", "schema": {"type": "array", "items": {"type": "string"}}}], "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get space groups details", "description": "Returns the groups of one or more space grouping profiles of the company, at any of its properties. The response is keyed by space_group_id, then by space type ID. Each space type has its groups: a name, its amenity values, and one tier with its size, rate, the number of spaces, the price range of all spaces and the count and price range of vacant spaces. Only space types shown on the website are included. Amenities, promotions and insurance are filled only when their fetch_ parameter is true.\n\n**Cost:** Medium. About 0.3 to 1.5 seconds and up to 100 KB per call; with fetch_amenities, about 4.5 seconds and up to 1 MB. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"spaceGroupProfile": {"type": "object", "additionalProperties": {"type": "object", "additionalProperties": {"type": "object", "properties": {"groups": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the group, for example Drive Through Access > Climate Control. all units when the group has no name."}, "amenities": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "type": {"type": "string", "nullable": true}, "value": {"type": "string", "example": "Yes"}, "sort_order": {"type": "integer"}}}, "description": "Amenity values of the group. Empty unless fetch_amenities is true."}, "tiers": {"type": "array", "items": {"type": "object", "properties": {"tier_id": {"type": "string", "description": "ID of the tier (a 32-character hash)."}, "description": {"type": "string", "description": "The tier's size, for example 10' x 15', or its area range, for example 0 sqft to 100 sqft."}, "min_sqft": {"type": "integer", "nullable": true, "description": "Lower bound of an area tier, in square feet. Null for a size tier."}, "max_sqft": {"type": "integer", "nullable": true, "description": "Upper bound of an area tier, in square feet. Null for a size tier or an open-ended area tier."}, "width": {"type": "string", "nullable": true, "description": "Width in feet. Null for an area tier."}, "length": {"type": "string", "nullable": true, "description": "Length in feet. Null for an area tier."}, "set_rate": {"type": "number", "nullable": true, "description": "Rate set for the tier in rate management. Null when none is set."}, "sell_rate": {"type": "string"}, "units": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of spaces in the group."}, "min_price": {"type": "number", "description": "Lowest current price of the group's spaces."}, "max_price": {"type": "number", "description": "Highest current price of the group's spaces."}}}, "vacant": {"type": "object", "properties": {"count": {"type": "integer", "description": "Number of vacant spaces in the group."}, "min_price": {"type": "number", "nullable": true, "description": "Lowest price of a vacant space. Null when none is vacant."}, "max_price": {"type": "number", "nullable": true, "description": "Highest price of a vacant space. Null when none is vacant."}}}, "amenities": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the amenity."}, "name": {"type": "string"}, "type": {"type": "string", "nullable": true, "description": "Amenity field type, for example boolean or string."}, "value": {"type": "string", "example": "Yes"}, "sort_order": {"type": "integer"}, "available_units": {"type": "integer", "description": "Number of vacant spaces in the group with this amenity value."}, "show_in_website": {"type": "integer"}, "show_in_filter_bar": {"type": "integer"}}}, "description": "Amenities of the group's spaces. Empty unless fetch_amenities is true."}, "promo": {"type": "array", "items": {"type": "object"}, "description": "Promotions of the group's spaces. Empty unless fetch_promotions is true."}, "allocated_promo": {"type": "object", "description": "The group's default online promotion. An empty object when it has none."}, "costs": {"type": "object"}}}}}}}, "insurance": {"type": "array", "items": {"type": "object", "properties": {"insurance_id": {"type": "string", "description": "Hashed ID of the insurance plan."}, "insurance_product_id": {"type": "string", "description": "Hashed ID of the insurance product."}, "name": {"type": "string"}, "description": {"type": "string"}, "coverage": {"type": "string", "description": "Coverage amount, as a string."}, "premium_type": {"type": "string", "example": "$"}, "premium_value": {"type": "number"}, "deductible": {"type": "integer", "nullable": true}, "taxable": {"type": "integer"}, "prorate": {"type": "integer"}, "prorate_out": {"type": "integer"}, "unit_type_id": {"type": "string", "description": "Hashed ID of the space type the plan is for."}}}, "description": "Insurance plans offered for this space type. Empty unless fetch_insurance is true."}, "num_spaces": {"type": "integer", "description": "Number of spaces in the space type's groups."}, "num_groups": {"type": "integer", "description": "Number of groups of the space type."}}, "description": "One space type of the profile, keyed by its hashed space type ID (unit_type_id in Retrieve Company Space Management and Space Type Details, GET /v2/.../space-management/space-types)."}, "description": "One requested space grouping profile, keyed by its space_group_id. An empty object when the profile has no groups."}, "description": "The requested space grouping profiles, keyed by space_group_id."}}}, "message": {"type": "string", "example": ""}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"spaceGroupProfile": {"deBobWuxj0": {"WEj67IYBe3": {"groups": [{"name": "Drive Through Access > Climate Control", "amenities": [{"id": "8W2WaMH9BY", "name": "Drive Through Access", "type": "boolean", "value": "Yes", "sort_order": 24}, {"id": "wgjYnOHeBz", "name": "Climate Control", "type": "boolean", "value": "Yes", "sort_order": 2}], "tiers": [{"tier_id": "51834aa85614819ee14a85910b62e6ef", "description": "24' x 24'", "min_sqft": null, "max_sqft": null, "width": "24", "length": "24", "set_rate": null, "sell_rate": null, "units": {"count": 727, "min_price": 27, "max_price": 1000}, "vacant": {"count": 640, "min_price": 27, "max_price": 27}, "amenities": [{"id": "XNv4Jycrje", "name": "18 Wheeler Aisles", "type": "boolean", "value": "Yes", "sort_order": 1, "available_units": 640, "show_in_website": 1, "show_in_filter_bar": 0}, {"id": "k6vApmC6Bp", "name": "Gate", "type": "string", "value": "Electronic", "sort_order": 2, "available_units": 640, "show_in_website": 0, "show_in_filter_bar": 1}], "promo": [], "allocated_promo": {}, "costs": {}}]}], "insurance": [{"insurance_id": "WEj6DZIYve", "insurance_product_id": "OBqaYaU1B9", "name": "Cool", "description": "Cool", "coverage": "1", "premium_type": "$", "premium_value": 1, "deductible": null, "taxable": 0, "prorate": 0, "prorate_out": 0, "unit_type_id": "WEj67IYBe3"}], "num_spaces": 6676, "num_groups": 127}}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "An ID is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "A space_group_id is a valid ID but matches no space grouping profile.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "The requested resource could not be found.", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/space-management/space-types": {"get": {"tags": ["Space-Types"], "summary": "Retrieve Company Space Management and Space Type Details", "description": "Retrieves all space types configured for a specific company, along with their associated space management details. The response includes the unique ID of each space type and all relevant configuration settings. These IDs are required for subsequent API calls to accurately differentiate and map space types based on their configurations.\n\n**Cost:** Light. About 0.3 seconds and 2 KB per call. Not paged.", "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/applications/", "x-nectar-visibility": "public", "x-nectar-scope": "public", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "array", "items": {"type": "object", "properties": {"unit_type_id": {"type": "string", "description": "Hashed ID of the space type. Use in: Get space groups details (GET /space-groups), space_type_id."}, "unit_type_name": {"type": "string", "description": "Name of the space type, for example storage or parking."}, "unit_type_label": {"type": "string"}, "id": {"type": "string", "description": "Hashed ID of the company's settings for this space type."}, "company_id": {"type": "string"}, "display_name": {"type": "string", "description": "Display name of the space type."}, "have_tenant": {"type": "integer"}, "have_contract": {"type": "integer"}, "have_accounting": {"type": "integer"}, "have_taxes": {"type": "integer"}, "have_sizes": {"type": "integer"}, "have_reporting": {"type": "integer"}, "have_invoices": {"type": "integer"}, "have_feature_amenities": {"type": "integer"}, "have_delinquency": {"type": "integer"}, "have_revenue_management": {"type": "integer"}, "show_on_facility_map": {"type": "integer"}, "have_coverage": {"type": "integer"}, "show_on_website": {"type": "integer", "description": "1 when the space type is shown on the website, otherwise 0."}, "created_by": {"type": "string", "nullable": true}, "created_at": {"type": "string"}, "modified_by": {"type": "string", "nullable": true}, "modified_at": {"type": "string"}}}}, "message": {"type": "string", "example": "Data retrieved successfully!"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "example": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": [{"unit_type_id": "WEj67IYBe3", "unit_type_name": "storage", "unit_type_label": "storage", "id": "79j5ViYBwZ", "company_id": "WEj67IYBe3", "display_name": "Storage", "have_tenant": 1, "have_contract": 1, "have_accounting": 1, "have_taxes": 1, "have_sizes": 1, "have_reporting": 1, "have_invoices": 1, "have_feature_amenities": 1, "have_delinquency": 1, "have_revenue_management": 1, "show_on_facility_map": 1, "have_coverage": 1, "show_on_website": 1, "created_by": null, "created_at": "2025-01-16 09:22:25", "modified_by": null, "modified_at": "2025-02-11 09:18:48"}, {"unit_type_id": "w420NsmBy1", "unit_type_name": "parking", "unit_type_label": "parking", "id": "deBoE6ux20", "company_id": "WEj67IYBe3", "display_name": "Parking", "have_tenant": 1, "have_contract": 1, "have_accounting": 1, "have_taxes": 1, "have_sizes": 1, "have_reporting": 1, "have_invoices": 1, "have_feature_amenities": 1, "have_delinquency": 1, "have_revenue_management": 1, "show_on_facility_map": 1, "have_coverage": 1, "show_on_website": 1, "created_by": null, "created_at": "2025-01-16 09:22:26", "modified_by": null, "modified_at": "2025-02-11 09:18:58"}], "message": "Data retrieved successfully!"}]}, "meta": {"requestId": "<request id>"}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/notes/notes-catagories": {"get": {"tags": ["Notes"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "property_id", "in": "query", "required": false, "description": "Hashed ID of a property of this company. Has no effect today: the list is the same with or without it. The value is still validated, so a malformed ID or a property of another company returns 400. Default: none.", "schema": {"type": "string"}, "example": "85B73ubBGy"}], "operationId": "getNotesCategories", "x-nectar-endpoint-name": "/v2/companies/company_id/notes/notes-catagories", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get notes categories", "description": "Returns the categories a note can be filed under. In Hummingbird, staff attach notes to a contact (a tenant or a lead) and give each note a category, for example Rent Changes or Move Outs. Every company has the same default categories (13 today), plus up to 10 custom categories the operator adds in Hummingbird settings. Use the `id` as `notes_category_id` when creating a note.\n\nDefault categories carry `created_at` and `modified_at`; custom categories return only `id` and `notes_category`. IDs are hashed per company, so an ID from one company does not work for another. Unknown query parameters are ignored.\n\n**Cost:** Light. About 0.3 seconds and 2 KB per call for 16 categories. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"notes_catagories": {"type": "array", "description": "Note categories. The default categories come first, then this company's custom categories.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the category. Use in: notes_category_id of Create a note for a contact (POST /contacts/{contact_id}/notes).", "example": "WEj67IYBe3"}, "notes_category": {"type": "string", "description": "Display name of the category.", "example": "Rent Changes"}, "created_at": {"type": "string", "description": "When the category was created, format YYYY-MM-DD HH:mm:ss. Only on the default categories; absent on custom ones.", "example": "2023-12-26 07:53:41"}, "modified_at": {"type": "string", "description": "When the category was last changed, format YYYY-MM-DD HH:mm:ss. Only on the default categories; absent on custom ones.", "example": "2023-12-26 07:53:55"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"categories": {"summary": "Two default categories and one custom category (trimmed from 16)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"notes_catagories": [{"id": "WEj67IYBe3", "notes_category": "Rent Changes", "created_at": "2023-12-26 07:53:41", "modified_at": "2023-12-26 07:53:55"}, {"id": "w420NsmBy1", "notes_category": "Delinquency", "created_at": "2023-12-26 07:53:41", "modified_at": "2023-12-26 07:53:55"}, {"id": "MojDRghJvY", "notes_category": "custom"}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "property_id is not a valid ID for this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 400}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "property_id is malformed or belongs to another company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/contacts/{contact_id}/notes": {"post": {"tags": ["Notes"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/contact_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/contacts/contact_id/notes", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create a note for a contact", "description": "Create a new note for the specified contact within the associated company. Optional attachments can be included by providing an `upload_id` along with the `attachments` array. If `notes_category_id` is omitted or invalid, the note is assigned to the default \"Miscellaneous\" category.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["content"], "properties": {"content": {"type": "string", "description": "The note content.", "example": "Creating a new note"}, "method": {"type": "string", "description": "Interaction method/type for the note.", "example": "note"}, "pinned": {"type": "string", "description": "Whether the note should be pinned. '1' for pinned, '0' for unpinned.", "enum": ["0", "1"], "example": "1"}, "context": {"type": "string", "description": "Context in which the note was created (e.g. communication-centre, delinquencyCenter, leadFollowUp, moveout).", "example": "communication-centre"}, "notes_category_id": {"type": "string", "description": "Hashed ID of the notes category to associate the note with. Defaults to \"Miscellaneous\" if omitted or invalid."}, "property_id": {"type": "string", "description": "Hashed ID of the property to associate the note with."}, "unit_number": {"type": "string", "description": "Unit number to associate with the note."}, "upload_id": {"type": "string", "description": "Hashed ID of an existing upload to attach to the note."}, "src": {"type": "string", "description": "Source URL of the file to attach (used together with `docName` and `upload_id`)."}, "docName": {"type": "string", "description": "File name used when attaching a file via `src`."}, "attachments": {"type": "array", "description": "Attachments to include with the note. When `upload_id` is provided, content/name are populated server-side from the upload.", "items": {"type": "object", "properties": {"name": {"type": "string", "description": "Name of the attached file."}, "content": {"type": "string", "description": "Base64-encoded file content."}, "upload_id": {"type": "string", "description": "Hashed ID of the related upload."}}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"Interactions": {"type": "array", "description": "List of notes for the contact after the new note was added.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the note"}, "content": {"type": "string", "description": "Note content"}, "pinned": {"type": "string", "description": "Whether the note is pinned (1 = pinned, 0 = unpinned)"}, "notes_category_id": {"type": "string", "description": "Hashed ID of the associated notes category"}}}}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/website/user-signin": {"post": {"tags": ["Website"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/website/user-signin", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Sign in an existing website user", "description": "Sign in an existing website user for the associated company. Looks up the website user by `username`, validates that the linked contact has both an email and a primary phone, updates the website user record, and triggers an OTP to be sent to the contact's email and phone for verification. Returns the masked email and masked phone along with the hashed contact id.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["username", "password"], "properties": {"username": {"type": "string", "description": "Website user username used to look up the account.", "example": "johndoe"}, "password": {"type": "string", "description": "Website user password to be stored/updated on the account.", "format": "password"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact linked to the website user."}, "email": {"type": "string", "description": "Masked email address of the contact (OTP destination).", "example": "j***@example.com"}, "phone": {"type": "string", "description": "Masked primary phone number of the contact (OTP destination).", "example": "***-***-1234"}, "message": {"type": "string", "example": "Success"}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/website/user-signup": {"post": {"tags": ["Website"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/website/user-signup", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Sign up a new website user", "description": "Sign up a new website user for the associated company. The request is rejected if a website user already exists for the supplied email/phone. The contact is resolved using `contact_id` when provided, otherwise by matching the supplied email and phone within the company. If a matching contact is found, the website user record is created/updated and an OTP is sent to the contact's email and phone for verification. Returns the masked email/phone and the hashed contact id.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["email", "phone", "username", "password"], "properties": {"email": {"type": "string", "description": "Email address of the new website user. Used to find or match the contact.", "format": "email", "example": "johndoe@example.com"}, "phone": {"type": "string", "description": "Phone number of the new website user. Used to find or match the contact.", "example": "+15551234567"}, "username": {"type": "string", "description": "Username to assign to the website user account.", "example": "johndoe"}, "password": {"type": "string", "description": "Password to assign to the website user account.", "format": "password"}, "userid": {"type": "string", "description": "Optional external user id to associate with the website user record."}, "contact_id": {"type": "string", "description": "Optional hashed contact id to associate the website user with a specific contact. When omitted, the contact is looked up via email and phone."}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact linked to the new website user."}, "email": {"type": "string", "description": "Masked email address used at signup (OTP destination).", "example": "j***@example.com"}, "phone": {"type": "string", "description": "Masked phone number used at signup (OTP destination).", "example": "***-***-1234"}, "message": {"type": "string", "example": "Success"}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/website/user-update": {"put": {"tags": ["Website"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/website/user-update", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Update an existing website user", "description": "Update an existing website user record for the associated company. The website user is identified by `data.id` and any supplied fields are persisted. After saving, a `webiste_user_update` event is emitted for downstream consumers.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["data"], "properties": {"data": {"type": "object", "description": "Fields of the website user to update. Must include `id` to identify the website user record.", "required": ["id"], "properties": {"id": {"type": "string", "description": "Hashed ID of the website user record to update."}, "username": {"type": "string", "description": "Updated username for the website user."}, "password": {"type": "string", "description": "Updated password for the website user.", "format": "password"}, "email": {"type": "string", "description": "Updated email address for the website user.", "format": "email"}, "phone": {"type": "string", "description": "Updated phone number for the website user."}, "userid": {"type": "string", "description": "Updated external user id associated with the website user."}, "is_active": {"type": "boolean", "description": "Whether the website user account is active."}, "website_account_exists": {"type": "boolean", "description": "Whether a website account exists for the linked contact."}, "contact_id": {"type": "string", "description": "Hashed ID of the contact linked to this website user."}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"message": {"type": "string", "example": "User Updated successfully"}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/website/otp/generate": {"post": {"tags": ["Website"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/website/otp/generate", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Generate an OTP for a website user", "description": "Generate a one-time password (OTP) for a website user of the associated company. The contact is resolved either by the supplied hashed `contact_id` or by looking up contacts matching the supplied `phone`. The request fails when no contact is found or when multiple contacts match the supplied phone. When `phone` and/or `email` are provided, they must match the contact's primary phone and email respectively. On success, the OTP is dispatched to the contact's email and phone via the communication service and the masked phone is returned in the response.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact for whom the OTP should be generated. When provided, takes precedence over `phone` lookup."}, "phone": {"type": "string", "description": "Phone number used to look up the contact when `contact_id` is not supplied. If provided alongside `contact_id`, must match the contact's primary phone.", "example": "+15551234567"}, "email": {"type": "string", "description": "Optional email used for validation. When provided, must match the contact's email on record.", "format": "email", "example": "johndoe@example.com"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact the OTP was generated for."}, "phone": {"type": "string", "description": "Masked primary phone number of the contact (OTP destination).", "example": "***-***-1234"}, "message": {"type": "string", "example": "Otp Sent Successfully"}}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/website/otp/validate": {"post": {"tags": ["Website"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/website/otp/validate", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Validate an OTP for a website user", "description": "Validate a previously generated one-time password (OTP) for a website user of the associated company. The OTP is verified against the contact identified by the supplied hashed `contact_id` via the communication service. Returns the validation response payload on success.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["contact_id", "otp"], "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact whose OTP is being validated."}, "otp": {"type": "string", "description": "One-time password value previously sent to the contact's email/phone.", "example": "091010"}, "website_user": {"type": "boolean", "description": "Indicates whether the OTP belongs to a website user flow. Defaults to false when omitted.", "default": false}, "phone": {"type": "string", "description": "Optional phone associated with the OTP request. Used to retrieve cached user data from Redis when available."}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "description": "Validation response payload returned by the communication service or cached user data."}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/categories": {"get": {"tags": ["Accounting"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "operationId": "getAccountCategories", "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/categories", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get account categories", "description": "Returns the general ledger categories: Asset, Liability, Income, Expense and Equity. The general ledger is the accounting book every transaction is posted to, and the category is its top level: each account type and each of the operator's accounts belongs to one category. Use a category ID to filter account types or to set the category of an account.\n\nThe list is the same for every company. IDs are hashed per company, so an ID from one company does not work for another. The endpoint takes no query parameters. Unknown ones are ignored, but a parameter whose name ends in `_id` must still be a valid ID or the call returns 400.\n\n**Cost:** Light. About 0.3 seconds and 0.4 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"categories": {"type": "array", "description": "The five general ledger categories.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the category. Use in: the category_id filter of Get general ledger account types (GET /accounting/account-types), or accounts[].category_id in Bulk upsert chart of accounts (POST /accounting/account/bulk).", "example": "MojDGcJ2Ya"}, "name": {"type": "string", "description": "Name of the category.", "enum": ["Asset", "Liability", "Income", "Expense", "Equity"], "example": "Income"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"categories": {"summary": "All categories", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"categories": [{"id": "WEj67IYBe3", "name": "Asset"}, {"id": "w420NsmBy1", "name": "Liability"}, {"id": "MojDGcJ2Ya", "name": "Income"}, {"id": "N6jK9HRv9V", "name": "Expense"}, {"id": "oLvpAfd29x", "name": "Equity"}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/account-types": {"get": {"tags": ["Accounting"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "category_id", "in": "query", "required": false, "description": "Hashed ID of a general ledger category, as returned by Get account categories (GET /accounting/categories). Returns only the account types in that category. A valid ID that is not a category, for example a unit ID, returns an empty list. An ID from another company returns 400. Send it once: a second category_id value in the same request fails. Default: none (every account type).", "schema": {"type": "string"}, "example": "MojDGcJ2Ya"}], "operationId": "getGeneralLedgerAccountTypes", "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/account-types", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get general ledger account types", "description": "Returns the general ledger account types. The general ledger is the accounting book every transaction is posted to. In Hummingbird it has three levels: a category such as Income or Asset, account types inside it such as Rental Income, Merchandise or Bank, and the operator's own accounts, each mapped to one account type. Use this list to pick the account type when reading or setting up accounts.\n\nThe list is the same for every company. IDs are hashed per company, so an ID from one company does not work for another. Names are not unique: two types are named Cash. Without `category_id`, every account type is returned. Unknown query parameters are ignored.\n\n**Cost:** Light. About 0.3 seconds and 2.5 KB per call for the full list of 33 types. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"account_types": {"type": "array", "description": "General ledger account types. Empty when category_id matches no category.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the account type. Use in: the account_type_id filter of Get account subtypes (GET /accounting/account-subtypes).", "example": "r82zbs42kD"}, "name": {"type": "string", "description": "Display name of the account type. Not unique.", "example": "Rental Income"}, "gl_category_id": {"type": "string", "description": "Hashed ID of the general ledger category the type belongs to. Use in: the category_id filter of this endpoint.", "example": "MojDGcJ2Ya"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"income_types": {"summary": "Income category (trimmed to 3 of 12)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"account_types": [{"id": "3av3aTPjA1", "name": "Bank Charge", "gl_category_id": "MojDGcJ2Ya"}, {"id": "KMjRAtm2O9", "name": "Fees", "gl_category_id": "MojDGcJ2Ya"}, {"id": "r82zbs42kD", "name": "Rental Income", "gl_category_id": "MojDGcJ2Ya"}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "category_id is not a valid ID for this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 400}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "category_id is malformed or belongs to another company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/account-subtypes": {"get": {"tags": ["Accounting"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "account_type_id", "in": "query", "required": false, "description": "Hashed ID of a general ledger account type, as returned by Get general ledger account types (GET /accounting/account-types). Returns only the subtypes of that account type. For Rental Income, see the description above. An ID from another company returns 400. A valid ID that is not an account type, for example a unit ID, fails with a server error. Send it once: a second account_type_id value in the same request fails. Default: none (every subtype).", "schema": {"type": "string"}, "example": "r82zbs42kD"}], "operationId": "getAccountSubtypes", "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/account-subtypes", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get account subtypes", "description": "Returns the general ledger account subtypes. Subtypes are the level below account types: for example Storage and Parking under Rental Income, or Visa and Mastercard under Card Payments. Each of the operator's accounts is mapped to one subtype. Use this list to pick the subtype when setting up accounts.\n\nWithout `account_type_id`, every subtype is returned under its stored name. With the Rental Income account type, only subtypes that match a space type the company has set up are returned, under the company's display name for that space type. Rental Income subtypes for space types the company has not set up appear in the full list but not in the filtered one.\n\nThe list can differ between companies. IDs are hashed per company, so an ID from one company does not work for another. Names are not unique: Checking, Savings and Sales appear under more than one account type, and Allowance appears twice under the same type. Unknown query parameters are ignored.\n\n**Cost:** Light. About 0.3 seconds and 5 KB per call for the full list of 63 subtypes. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"account_subtypes": {"type": "array", "description": "General ledger account subtypes. Empty when the account type has no subtypes.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the account subtype. Use in: account_subtype_id in Bulk upsert chart of accounts (POST /accounting/account/bulk).", "example": "7kjVguPB54"}, "name": {"type": "string", "description": "Name of the subtype. For Rental Income subtypes requested with account_type_id, the company's display name for the space type. Not unique.", "example": "Storage"}, "gl_account_type_id": {"type": "string", "description": "Hashed ID of the account type the subtype belongs to. Use in: the account_type_id filter of this endpoint.", "example": "r82zbs42kD"}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"rental_income_subtypes": {"summary": "Rental Income account type", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"account_subtypes": [{"id": "wNjGaFqvKL", "name": "Parking", "gl_account_type_id": "r82zbs42kD"}, {"id": "7kjVguPB54", "name": "Storage", "gl_account_type_id": "r82zbs42kD"}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "account_type_id is not a valid ID for this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 400}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "account_type_id is malformed or belongs to another company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/account/bulk": {"post": {"tags": ["Accounting"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/account/bulk", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Bulk upsert chart of accounts", "description": "Creates new GL accounts, updates existing GL accounts by id, and optionally soft-deletes accounts included in the deleted array.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["accounts"], "properties": {"accounts": {"type": "array", "description": "Accounts to create or update. Include id to update an existing account; omit id to create a new one.", "items": {"type": "object", "required": ["name", "code", "category_id", "account_type_id", "account_subtype_id"], "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "code": {"type": "string"}, "category_id": {"type": "string"}, "account_type_id": {"type": "string"}, "account_subtype_id": {"type": "string"}}}}, "deleted": {"type": "array", "description": "Existing accounts to soft-delete.", "items": {"type": "object", "required": ["id"], "properties": {"id": {"type": "string"}}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/accounts": {"get": {"tags": ["Accounting"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "all", "in": "query", "required": false, "description": "Include group accounts. Any non-empty value turns this on, including `false` and `0`. Leave it out to get regular accounts only. Default: none (group accounts are left out).", "schema": {"type": "string"}, "example": "true"}], "operationId": "getChartOfAccounts", "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/accounts", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get chart of accounts", "description": "Returns the company's chart of accounts: the general ledger accounts the operator has set up. The general ledger is the accounting book every transaction is posted to. Each account is mapped to a category such as Income, an account type such as Rental Income, and a subtype such as Storage. Use this list to read account IDs and codes, for example before updating accounts with Bulk upsert chart of accounts.\n\nOnly active accounts are returned. Group accounts, system headers such as Invoice Lines and Payment Methods that have no category, type or subtype, are left out unless `all` is sent. Accounts whose subtype has been deleted are left out. The list is sorted by internal ID. Names and codes are free text entered by the operator: they are not unique, a code can be null, and it is returned exactly as entered, including trailing spaces. Unknown query parameters are ignored.\n\n**Cost:** Medium. About 1.1 seconds and 50 KB per call for 190 accounts. Size grows with the number of accounts. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"accounts": {"type": "array", "description": "The company's active general ledger accounts.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the account. Use in: accounts[].id (to update the account) or deleted[].id in Bulk upsert chart of accounts (POST /accounting/account/bulk).", "example": "3av3kpIPvA"}, "name": {"type": "string", "description": "Account name. Not unique.", "example": "Storage Income"}, "code": {"type": "string", "nullable": true, "description": "Account code, usually the code used in the operator's accounting system. Returned as entered, including trailing spaces. Not unique. null when no code was set.", "example": "4010-000-000"}, "category_id": {"type": "string", "nullable": true, "description": "Hashed ID of the general ledger category. null for group accounts. Use in: the category_id filter of Get general ledger account types (GET /accounting/account-types).", "example": "MojDGcJ2Ya"}, "account_type_id": {"type": "string", "nullable": true, "description": "Hashed ID of the account type. null for group accounts. Use in: the account_type_id filter of Get account subtypes (GET /accounting/account-subtypes).", "example": "r82zbs42kD"}, "account_subtype_id": {"type": "string", "nullable": true, "description": "Hashed ID of the account subtype. null for group accounts. Use in: account_subtype_id in Bulk upsert chart of accounts (POST /accounting/account/bulk).", "example": "7kjVguPB54"}, "is_group": {"type": "integer", "description": "1 for a group account (returned only when `all` is sent), 0 otherwise.", "enum": [0, 1], "example": 0}, "category": {"type": "string", "nullable": true, "description": "Name of the category. null for group accounts.", "example": "Income"}, "account_type": {"type": "string", "nullable": true, "description": "Name of the account type. null for group accounts.", "example": "Rental Income"}, "account_subtype": {"type": "string", "nullable": true, "description": "Name of the account subtype. null for group accounts.", "example": "Storage"}, "reference_exist": {"type": "integer", "description": "1 when the account is used by an active product, an active general ledger event or event override, or a tax profile. 0 otherwise.", "enum": [0, 1], "example": 1}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"accounts": {"summary": "Default (trimmed to 2 of 190)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"accounts": [{"id": "3av3kpIPvA", "name": "Storage Income", "code": "4010-000-000", "category_id": "MojDGcJ2Ya", "account_type_id": "r82zbs42kD", "account_subtype_id": "7kjVguPB54", "is_group": 0, "category": "Income", "account_type": "Rental Income", "account_subtype": "Storage", "reference_exist": 1}, {"id": "8W2WJxI9vY", "name": "Parking Income", "code": "4015-000-000", "category_id": "MojDGcJ2Ya", "account_type_id": "r82zbs42kD", "account_subtype_id": "wNjGaFqvKL", "is_group": 0, "category": "Income", "account_type": "Rental Income", "account_subtype": "Parking", "reference_exist": 0}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}, "group_account": {"summary": "With all, a group account (trimmed to 1)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"accounts": [{"id": "wnB9wpur26", "name": "Invoice Lines", "code": "invoice", "category_id": null, "account_type_id": null, "account_subtype_id": null, "is_group": 1, "category": null, "account_type": null, "account_subtype": null, "reference_exist": 1}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/templates": {"get": {"tags": ["Accounting"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "operationId": "getAccountingTemplates", "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/templates", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get accounting templates", "description": "Returns the company's accounting templates. A template holds an accounting setup for the general ledger, the accounting book every transaction is posted to, including which book type is used (for example Monthly Accrual Book or Cash Book). Properties are linked to templates, and one template is the company's default.\n\nEvery active template is returned, with its accounting setup and the properties linked to it. `Properties` lists only the linked properties your application can access, so it can be empty for a template that is linked to other properties. The endpoint takes no query parameters. Unknown ones are ignored, but a parameter whose name ends in `_id` must still be a valid ID or the call returns 400.\n\n**Cost:** Medium. About 0.6 seconds and 150 KB per call for 198 templates. Size grows with the number of templates and linked properties. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "array", "description": "The company's active accounting templates.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the template. Use in: Update accounting template (PUT /accounting/template/{accounting_template_id}).", "example": "85B74whbvG"}, "name": {"type": "string", "description": "Template name.", "example": "TEST"}, "is_default": {"type": "integer", "description": "1 for the company's default template, 0 otherwise.", "enum": [0, 1], "example": 0}, "company_id": {"type": "string", "description": "Hashed ID of the company.", "example": "WEj67IYBe3"}, "created_at": {"type": "string", "description": "When the template was created. Format YYYY-MM-DD HH:mm:ss.", "example": "2026-04-21 22:48:25"}, "created_by": {"type": "string", "description": "Hashed ID of the user who created the template.", "example": "Y2ww1bofq2"}, "modified_at": {"type": "string", "description": "When the template was last changed. Format YYYY-MM-DD HH:mm:ss.", "example": "2026-04-21 22:48:25"}, "modified_by": {"type": "string", "description": "Hashed ID of the user who last changed the template.", "example": "Y2ww1bofq2"}, "deleted_at": {"type": "string", "nullable": true, "description": "Always null. Deleted templates are not returned.", "example": null}, "deleted_by": {"type": "string", "nullable": true, "description": "Always null. Deleted templates are not returned.", "example": null}, "AccountingSetup": {"type": "object", "description": "The template's accounting setup.", "properties": {"id": {"type": "string", "description": "Hashed ID of the accounting setup.", "example": "aeBdWPh7jR"}, "book_id": {"type": "integer", "description": "Accounting book type. Values seen, with their description, 0 Cash Book, 1 Monthly Accrual Book, 2 Double Book.", "example": 1}, "description": {"type": "string", "description": "Name of the accounting book type.", "example": "Monthly Accrual Book"}, "company_id": {"type": "string", "description": "Hashed ID of the company.", "example": "WEj67IYBe3"}, "accounting_template_id": {"type": "string", "description": "Hashed ID of the template this setup belongs to. Same as the template's id.", "example": "85B74whbvG"}, "active": {"type": "integer", "description": "1 when the setup is active.", "example": 1}, "created_at": {"type": "string", "description": "When the setup was created. Format YYYY-MM-DD HH:mm:ss.", "example": "2026-04-21 22:48:25"}, "created_by": {"type": "string", "description": "Hashed ID of the user who created the setup.", "example": "Y2ww1bofq2"}, "modified_at": {"type": "string", "description": "When the setup was last changed. Format YYYY-MM-DD HH:mm:ss.", "example": "2026-04-21 22:48:25"}, "deleted_at": {"type": "string", "nullable": true, "description": "Always null.", "example": null}, "deleted_by": {"type": "string", "nullable": true, "description": "Always null.", "example": null}}}, "Properties": {"type": "array", "description": "Properties linked to the template that your application can access. Only id and name are documented. Do not rely on any other field in these items.", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the property. Use in: Get a single property (GET /properties/{property_id}).", "example": "3av388sP2A"}, "name": {"type": "string", "description": "Property name.", "example": "Irvine - California Ave."}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"templates": {"summary": "One template (trimmed to 1 of 198; property fields trimmed to id and name)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": [{"id": "85B74whbvG", "name": "TEST", "is_default": 0, "company_id": "WEj67IYBe3", "created_at": "2026-04-21 22:48:25", "created_by": "Y2ww1bofq2", "modified_at": "2026-04-21 22:48:25", "modified_by": "Y2ww1bofq2", "deleted_at": null, "deleted_by": null, "AccountingSetup": {"id": "aeBdWPh7jR", "book_id": 1, "company_id": "WEj67IYBe3", "active": 1, "created_at": "2026-04-21 22:48:25", "created_by": "Y2ww1bofq2", "deleted_at": null, "deleted_by": null, "accounting_template_id": "85B74whbvG", "modified_at": "2026-04-21 22:48:25", "description": "Monthly Accrual Book"}, "Properties": [{"id": "3av388sP2A", "name": "Irvine - California Ave."}]}], "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v1/companies/{company_id}/accounting/template/{accounting_template_id}": {"put": {"tags": ["Accounting"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "accounting_template_id", "in": "path", "required": true, "schema": {"type": "string"}}], "x-nectar-endpoint-name": "/v1/companies/company_id/accounting/template/accounting_template_id", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Update accounting template", "description": "Update an accounting template for the associated company.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["name", "Properties", "AccountingSetup"], "properties": {"name": {"type": "string"}, "Properties": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}}}}, "AccountingSetup": {"type": "object", "required": ["book_id"], "properties": {"book_id": {"type": "integer"}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"accounting_template_id": {"type": "string"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/transaction/download-pdf": {"post": {"tags": ["Transactions"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/transaction/download-pdf", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Download Transaction PDF", "description": "Generates and downloads a transaction PDF for the given contact and property.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["contact_id", "property_id"], "properties": {"contact_id": {"type": "string", "description": "Unique identifier of the contact."}, "property_id": {"type": "string", "description": "Unique identifier of the property."}, "start_dt": {"type": "string", "format": "date", "description": "Optional start date for filtering transactions (YYYY-MM-DD).", "example": "2025-10-01"}, "end_dt": {"type": "string", "format": "date", "description": "Optional end date for filtering transactions (YYYY-MM-DD).", "example": "2025-10-31"}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "array", "items": {"type": "integer"}, "description": "Raw bytes of the generated PDF file, as an array of unsigned byte values (0-255) \u2014 not a URL or base64 string. Reconstruct the file by writing these bytes to a buffer, e.g. Buffer.from(data) in Node, or a Uint8Array in a browser, and saving/serving it as a .pdf."}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/reports/download-pdf": {"post": {"tags": ["Reports"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/reports/download-pdf", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create PDF of requested report", "description": "Create a PDF of a requested report for the associated company. `type` selects which report/document to generate; this documents the `type=invoice` case only, which uses `request_id` as the invoice id.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"oneOf": [{"type": "object", "description": "The invoice case: download a specific invoice's PDF.", "required": ["type", "request_id"], "properties": {"type": {"type": "string", "enum": ["invoice"], "example": "invoice"}, "request_id": {"type": "string", "description": "The invoice id."}, "property_id": {"type": "string", "description": "Property the report/document belongs to."}}}, {"type": "object", "description": "Other report/document types (e.g. 'receipt', 'refund-receipt', and various analytical report types) are supported but not documented here - they take different required fields than the invoice case above.", "required": ["type"], "properties": {"type": {"type": "string", "not": {"enum": ["invoice"]}}, "request_id": {"type": "string"}, "property_id": {"type": "string"}}}]}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"type": {"type": "string", "description": "Always 'Buffer' - this is a JSON-serialized Node.js Buffer, not a content-type indicator."}, "data": {"type": "array", "items": {"type": "integer"}, "description": "Raw bytes of the generated PDF file, as an array of unsigned byte values (0-255). Reconstruct the file by writing these bytes to a buffer, e.g. Buffer.from(data.data) in Node, or a Uint8Array in a browser, and saving/serving it as a .pdf."}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/leases/{lease_id}/contacts": {"get": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/leases/lease_id/contacts", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get contacts for a lease", "operationId": "getLeaseContacts", "description": "Returns the contacts on the lease (its tenants), each with phones and addresses.\n\n**Cost:** Light. About 0.3 to 1 second and up to 15 KB per call. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"contacts": {"type": "array", "items": {"type": "object", "additionalProperties": true, "description": "A contact on the lease.", "properties": {"id": {"type": "string", "description": "Hashed ID of the contact. Use in: Get details of a contact (GET /contacts/{contact_id})."}, "company_id": {"type": "string", "description": "Hashed ID of the company."}, "first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}, "status": {"type": "string", "description": "Contact status."}, "contact_type": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "additionalProperties": true, "properties": {"id": {"type": "string", "description": "Hashed ID of the phone record."}, "phone": {"type": "string"}, "type": {"type": "string"}, "primary": {"type": "integer"}}}}, "Addresses": {"type": "array", "items": {"type": "object", "additionalProperties": true}}}}, "description": "The contacts on the lease."}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "lease_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "No lease has that ID.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_lease": {"summary": "lease_id is a valid ID but not a lease", "value": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/leases/{lease_id}/template-insurance": {"post": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "operationId": "addLeaseInsurance", "x-nectar-endpoint-name": "/v2/companies/company_id/leases/lease_id/template-insurance", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Add insurance to a lease", "description": "Adds an insurance or protection plan to a tenant's lease. The plan must be one offered at the lease's property. It is billed on the lease as a service at the plan's premium.\n\nAny insurance already on the lease is ended first: its service status is set to 0 and the record is kept. Sending the same request again ends the plan you just added and adds it again with a new service ID.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB per call. Not paged.", "requestBody": {"description": "Unknown fields are rejected with a 400.", "required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["insurance_id"], "properties": {"insurance_id": {"type": "string", "minLength": 10, "maxLength": 10, "description": "Hashed ID of the insurance plan to add. Use in: Get all insurances for property (GET /properties/{property_id}/insurances).", "example": "yVvaPeFkBm"}, "coverage_amount": {"type": "number", "nullable": true, "minimum": 0, "description": "Coverage amount used to price table-rate plans. For other plans it does not change the price, but it is still saved on the lease. Default: none.", "example": 3000}}}, "examples": {"add_insurance": {"summary": "Add an insurance plan", "value": {"insurance_id": "yVvaPeFkBm"}}}}}}, "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"insurance": {"type": "string", "description": "Hashed ID of the insurance service created on the lease.", "example": "LvpGWlAUdB"}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"added": {"summary": "Insurance added", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"insurance": "LvpGWlAUdB"}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected. Validation problems are listed together in one message.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 400}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"missing_insurance_id": {"summary": "insurance_id missing", "value": {"status": 400, "data": {}, "msg": "\"insurance_id\" is required; ", "message": ""}}, "unknown_field": {"summary": "Unknown field", "value": {"status": 400, "data": {}, "msg": "\"notes\" is not allowed; ", "message": ""}}, "insurance_id_length": {"summary": "insurance_id is not 10 characters", "value": {"status": 400, "data": {}, "msg": "\"insurance_id\" length must be 10 characters long; ", "message": ""}}, "coverage_amount_negative": {"summary": "coverage_amount below 0", "value": {"status": 400, "data": {}, "msg": "\"coverage_amount\" must be greater than or equal to 0; ", "message": ""}}, "coverage_amount_not_number": {"summary": "coverage_amount is not a number", "value": {"status": 400, "data": {}, "msg": "\"coverage_amount\" must be a number; ", "message": ""}}, "invalid_id": {"summary": "lease_id or insurance_id is not a valid ID", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id is a valid ID but not a lease in this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "example": 404}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"lease_not_found": {"summary": "Lease not found", "value": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/leases/{lease_id}/tenants": {"post": {"tags": ["Leases"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/lease_id"}], "operationId": "addLeaseTenant", "x-nectar-endpoint-name": "/v2/companies/company_id/leases/lease_id/tenants", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Add a tenant to a lease", "description": "Links a contact to a lease as its tenant. A lease can have only one tenant. A lease created by Configure a lease for a unit with a `contact_id` already has its tenant; one created without a `contact_id` has none.\n\nSending the contact that is already the lease's tenant returns 200 with the same `tenant_id`; no second tenant is created. Sending a different contact when the lease already has a tenant returns 409.\n\n**Cost:** Light. About 0.3 seconds and under 1 KB per call. Not paged.", "requestBody": {"description": "Unknown fields are rejected with a 400.", "required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["contact_id"], "properties": {"contact_id": {"type": "string", "description": "Hashed ID of the contact to add as the lease's tenant. Use in: Get details of a contact (GET /contacts/{contact_id}).", "example": "nBmAK0IdBV"}}}, "examples": {"add_tenant": {"summary": "Add an existing contact as the tenant", "value": {"contact_id": "nBmAK0IdBV"}}}}}}, "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"tenant_id": {"type": "string", "description": "Hashed ID of the tenant record linking the contact to the lease. Use in: Delete a tenant from the lease (DELETE /leases/{lease_id}/tenants/{tenant_id}).", "example": "gj87DQMu42"}, "contact_id": {"type": "string", "description": "Hashed ID of the contact.", "example": "nBmAK0IdBV"}, "lease_id": {"type": "string", "description": "Hashed ID of the lease.", "example": "eBod5qRtxv"}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"tenant_added": {"summary": "Tenant added", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"tenant_id": "gj87DQMu42", "contact_id": "nBmAK0IdBV", "lease_id": "eBod5qRtxv"}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"unknown_field": {"summary": "Unknown field", "value": {"status": 400, "data": {}, "msg": "\"foo\" is not allowed; ", "message": ""}}, "invalid_id": {"summary": "lease_id or contact_id is not a valid ID", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "lease_id or contact_id is a valid ID but not a lease or contact in this company.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"lease_not_found": {"summary": "Lease not found", "value": {"status": 404, "data": {}, "msg": "Invalid lease id.", "actual_cause": "Invalid lease id.", "message": ""}}, "contact_not_found": {"summary": "Contact not found", "value": {"status": 404, "data": {}, "msg": "Contact not found", "actual_cause": "Contact not found", "message": ""}}}}}}, "409": {"description": "The lease already has a different tenant. The message names the existing tenant.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string", "nullable": true}, "message": {"type": "string"}}}, "examples": {"lease_has_tenant": {"summary": "Lease already has a tenant", "value": {"status": 409, "data": {}, "msg": "Cannot add tenant to lease <lease number>. This lease already has 1 tenant(s): <first> <last> (Contact ID: <contact number>). Each lease should have only one tenant. Please create a new lease for this tenant.", "actual_cause": "Cannot add tenant to lease <lease number>. This lease already has 1 tenant(s): <first> <last> (Contact ID: <contact number>). Each lease should have only one tenant. Please create a new lease for this tenant.", "message": ""}}}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/product-categories/": {"get": {"tags": ["Product-Categories"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "search", "in": "query", "required": false, "schema": {"type": "string"}, "description": "Return only categories whose name contains this text. Default: none."}], "x-nectar-endpoint-name": "/v2/companies/company_id/product-categories", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all product categories", "description": "Lists the company's product categories. A product category groups the merchandise a facility sells, such as locks or boxes. All categories are returned in one list.\n\n**Cost:** Light. About 0.3 seconds and 0.4 KB for 2 categories. Not paged.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> view_merchandise Hummingbird permission required. Contact Nectar team.</small>", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"product_categories": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the product category."}, "company_id": {"type": "string", "description": "Hashed ID of the company record that owns this item. It is not the same value as the `company_id` in the path."}, "name": {"type": "string", "description": "Name of the product category."}, "associated_products": {"type": "integer", "nullable": true, "description": "Count of products in this category; null if none."}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"categories": {"summary": "Two product categories", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"product_categories": [{"id": "WEj67IYBe3", "company_id": "WEj67IYBe3", "name": "bag", "associated_products": 6}, {"id": "3av3aTPjA1", "company_id": "WEj67IYBe3", "name": "One-Time Fees", "associated_products": null}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/free-insurance": {"get": {"tags": ["Free-Insurance"], "parameters": [{"in": "path", "name": "company_id", "required": true, "schema": {"type": "string"}}, {"in": "query", "name": "unit_type_id", "required": false, "schema": {"type": "string"}, "description": "Return only the setting for this space type (unit type). A space type without a setting returns an empty `FreeInsurances`. Default: none (all space types)."}], "x-nectar-endpoint-name": "/v2/companies/company_id/free-insurance", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get Free Insurance Settings on company level", "description": "Get the company-level free insurance settings, one entry per space type (unit type) that has a setting.\n\n**Cost:** Light. About 0.3 seconds and 0.4 KB. Not paged.\n\n<small style=\"color:#999\"><span style=\"display:inline-block;width:1.1em;height:1.1em;line-height:1.1em;text-align:center;border:1px solid #999;border-radius:50%;\">!</span> free_insurance_setting Hummingbird permission required. Contact Nectar team.</small>\n", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"FreeInsurances": {"type": "object", "description": "Map of free insurance plans keyed by unique unit_type_id values", "example": {"unitTypeId1": {"free_insurance_id": "freeInsuranceId1", "unit_type_id": "unitTypeId1", "FreeInsuranceTemplate": {"amount": 5, "cancellation_threshold": 22, "is_enabled": 0, "type": "premium", "UnitTypes": [{"id": "unitTypeId1"}]}}}, "additionalProperties": {"type": "object", "description": "Keyed by unit_type_id; key matches the entry's own unit_type_id field.", "properties": {"free_insurance_id": {"type": "string"}, "unit_type_id": {"type": "string"}, "FreeInsuranceTemplate": {"type": "object", "properties": {"amount": {"type": "integer", "example": 100}, "cancellation_threshold": {"type": "integer", "example": 20}, "is_enabled": {"type": "integer", "example": 1, "description": "Indicates if insurance is active (1 = active, 0 = inactive) - raw 0/1 flag, not a JSON boolean."}, "type": {"type": "string", "description": "Insurance template type, e.g. 'premium' or 'coverage'."}, "UnitTypes": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}}}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"sandbox": {"summary": "Sandbox company with one setting", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"FreeInsurances": {"WEj67IYBe3": {"free_insurance_id": "WEj67IYBe3", "unit_type_id": "WEj67IYBe3", "FreeInsuranceTemplate": {"amount": 5, "cancellation_threshold": 20, "is_enabled": 1, "type": "premium", "UnitTypes": [{"id": "WEj67IYBe3"}]}}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "unit_type_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "403": {"description": "The company has not granted this app the free_insurance_setting permission.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "nullable": true}, "msg": {"type": "string"}}}, "example": {"status": 403, "data": null, "msg": "You are not allowed to access this resource"}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/leads/boxshop": {"post": {"tags": ["Leads"], "parameters": [{"$ref": "#/components/parameters/company_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/leads/boxshop", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Record BoxShop Leads and Abandoned Carts", "description": "Create BoxShop Lead and Follow-up Task for Abandoned Cart or Quotation.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["Contact", "property_id", "Products", "cartRecoveryUrl"], "properties": {"Contact": {"type": "object", "description": "Contact details object similar to that of capturing normal lead. Contact Address and other information can also be captured here just like normal leads capturing endpoint.", "properties": {"first": {"type": "string", "description": "Contact's first name", "example": "John"}, "last": {"type": "string", "description": "Contact's last name", "example": "Doe"}, "email": {"type": "string", "description": "Contact's email address", "example": "john.doe@example.com"}, "Phones": {"type": "array", "description": "Array of phone numbers", "items": {"type": "object", "properties": {"phone": {"type": "string", "description": "Phone number", "example": "+1234567890"}, "type": {"type": "string", "description": "Type of phone number (e.g., home, work, mobile)", "example": "mobile"}}}}}}, "property_id": {"type": "string", "description": "Hashed ID of the property", "example": "hashed_property_id"}, "Products": {"type": "array", "description": "Array of products", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Hashed ID of the product", "example": "hashed_product_id"}, "quantity": {"type": "integer", "description": "Quantity of the product", "example": 1}, "price": {"type": "number", "description": "Price of the product", "example": 99.99}}}}, "cartRecoveryUrl": {"type": "string", "format": "uri", "description": "URL for cart recovery", "example": "https://example.com/cart/recovery/abc123"}, "delivery_note": {"type": "string", "description": "Delivery note for the lead in case of delivery method", "example": "Please deliver the product to the address provided"}, "fulfillment_method": {"type": "string", "description": "Fulfillment method for abandoned cart or quote lead", "enum": ["pickup", "delivery"], "default": "pickup", "example": "delivery"}, "address": {"type": "object", "description": "Address object required if fulfillment method is delivery", "properties": {"address": {"type": "string", "description": "Street address", "example": "123 Main St"}, "address2": {"type": "string", "description": "Additional address information", "example": "Apt 4B"}, "city": {"type": "string", "description": "City name", "example": "Anytown"}, "state": {"type": "string", "description": "State name", "example": "CA"}, "zip": {"type": "string", "description": "ZIP code", "example": "12345"}, "country": {"type": "string", "description": "Country name", "example": "United States"}}}, "is_quotation": {"type": "boolean", "description": "When true, this is a price-quote request and no abandoned-cart email is sent. When false/omitted, this represents an abandoned cart and triggers a follow-up email to the contact."}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object", "properties": {"lead_id": {"type": "string", "description": "Hashed lead or cart id"}, "contact_id": {"type": "string", "description": "Hashed contact id"}}}, "message": {"type": "string"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/merchandise-discount": {"get": {"tags": ["Merchandise-Discounts"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"name": "search", "in": "query", "required": false, "schema": {"type": "string"}, "description": "Return only discounts whose name contains this text. Default: none."}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "Maximum number of discounts to return. Must be a whole number, 0 or more. 0 returns an empty list. Default: none (all discounts)."}, {"name": "offset", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "Number of discounts to skip before the first one returned. Only used together with `limit`. Must be a whole number, 0 or more. Default: 0."}], "x-nectar-endpoint-name": "/v2/companies/company_id/merchandise-discount", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get all merchandise discounts of company", "description": "Lists the company's merchandise discounts: discounts on the retail products a facility sells, such as locks and boxes, not on rent. Each discount lists the product categories and products it applies to.\n\n**Cost:** Light. About 0.3 seconds and 12 KB for 11 discounts without `limit`.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"merchandise_discounts": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique identifier for the merchandise discount"}, "company_id": {"type": "string", "description": "Hashed ID of the company record that owns this item. It is not the same value as the `company_id` in the path."}, "name": {"type": "string", "description": "Name of the merchandise discount"}, "description": {"type": "string", "description": "Description of the merchandise discount"}, "label": {"type": "string", "description": "Label for the merchandise discount"}, "value": {"type": "number", "description": "Value of the merchandise discount"}, "type": {"type": "string", "description": "Type of the merchandise discount, e.g. percent, dollar, fixed"}, "months": {"type": "integer", "nullable": true, "description": "Number of months the discount applies for, if time-limited"}, "offset": {"type": "integer", "description": "Month offset before the discount starts applying"}, "sort": {"type": "integer", "description": "Sort weight for the discount"}, "pretax": {"type": "integer", "description": "Whether the discount applies pre-tax - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "active": {"type": "integer", "example": 1, "description": "Indicates if the merchandise discount is active - raw 0/1 flag, not a JSON boolean (1 = active, 0 = inactive)"}, "public": {"type": "integer", "description": "Whether the discount is publicly visible - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "required_months": {"type": "integer", "nullable": true, "description": "Minimum months of tenancy required to qualify, if any"}, "days_threshold": {"type": "integer", "nullable": true, "description": "Day threshold associated with the discount, if any"}, "consecutive_pay": {"type": "integer", "description": "Whether consecutive on-time payments are required - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "enable": {"type": "integer", "description": "Whether the discount is enabled - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "created_by": {"type": "string", "description": "ID of the user who created the merchandise discount"}, "created_at": {"type": "string", "description": "Timestamp when the merchandise discount was created"}, "modified_at": {"type": "string", "description": "Timestamp when the merchandise discount was last modified"}, "modified_by": {"type": "string", "nullable": true, "description": "ID of the user who last modified the merchandise discount"}, "active_period": {"type": "string", "description": "Current active period status of the discount, e.g. active"}, "start_date": {"type": "string", "nullable": true, "description": "Date the discount becomes active, if scheduled"}, "end_date": {"type": "string", "nullable": true, "description": "Date the discount expires, if scheduled"}, "is_national_account": {"type": "integer", "description": "Whether the discount is restricted to national accounts - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "required_length": {"type": "integer", "nullable": true, "description": "Minimum lease length required to qualify, if any"}, "require_autopay": {"type": "integer", "description": "Whether autopay enrollment is required - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "require_coverage": {"type": "integer", "description": "Whether insurance coverage is required - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "require_id_verification": {"type": "integer", "description": "Whether ID verification is required - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "remove_on_delinquency": {"type": "integer", "description": "Whether the discount is removed on delinquency - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "new_tenants": {"type": "integer", "description": "Whether the discount is restricted to new tenants - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "existing_tenants": {"type": "integer", "description": "Whether the discount is restricted to existing tenants - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "web_only": {"type": "integer", "description": "Whether the discount only applies to web-originated orders - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "eligible_tenants": {"type": "string", "nullable": true, "description": "Tenant eligibility restriction for the discount, if any"}, "min_quantity": {"type": "integer", "nullable": true, "description": "Minimum quantity required to apply the merchandise discount"}, "apply_to": {"type": "string", "description": "Scope of the merchandise discount application, e.g. all, category, product, both"}, "sb709_promo_rent_cap": {"type": "number", "nullable": true, "description": "SB709-related promotional rent cap, if applicable"}, "is_sb709_rent_cap": {"type": "integer", "description": "Whether SB709 rent cap rules apply - raw 0/1 flag, not a JSON boolean (1 = yes, 0 = no)"}, "sb709_promo_disclosure": {"type": "string", "nullable": true, "description": "SB709-related promotional disclosure text, if applicable"}, "rounding_type": {"type": "string", "nullable": true, "description": "Rounding type for the merchandise discount, e.g. full_dollar etc."}, "sort_order": {"type": "integer", "description": "Priority order for the merchandise discount"}, "ProductCategories": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique identifier for the category"}, "name": {"type": "string", "description": "Name of the category"}}}}, "Products": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique identifier for the product"}, "name": {"type": "string", "description": "Name of the product"}}}}}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"discounts": {"summary": "Two merchandise discounts (trimmed from 11)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"merchandise_discounts": [{"id": "deBoqdSx20", "company_id": "WEj67IYBe3", "name": "Bag discount", "description": "", "label": "merchandise_discount", "value": 2, "type": "dollar", "months": null, "offset": 0, "sort": 0, "pretax": 1, "active": 1, "public": 1, "required_months": null, "days_threshold": null, "consecutive_pay": 0, "enable": 1, "created_at": "2025-07-29 13:09:23", "modified_at": "2025-07-29 13:09:23", "active_period": "active", "start_date": null, "end_date": null, "created_by": "1jJ54rxik2", "is_national_account": 0, "required_length": null, "require_autopay": 0, "require_coverage": 0, "require_id_verification": 0, "remove_on_delinquency": 0, "new_tenants": 0, "existing_tenants": 0, "web_only": 0, "eligible_tenants": null, "modified_by": null, "min_quantity": 3, "apply_to": "category", "sb709_promo_rent_cap": null, "is_sb709_rent_cap": 0, "sb709_promo_disclosure": null, "rounding_type": null, "sort_order": 2, "ProductCategories": [{"id": "WEj67IYBe3", "name": "bag"}], "Products": []}, {"id": "bPvk8QT92V", "company_id": "WEj67IYBe3", "name": "Bag discount fixed", "description": "", "label": "merchandise_discount", "value": 30, "type": "fixed", "months": null, "offset": 0, "sort": 0, "pretax": 1, "active": 1, "public": 1, "required_months": null, "days_threshold": null, "consecutive_pay": 0, "enable": 1, "created_at": "2025-07-29 13:12:10", "modified_at": "2025-07-29 13:12:10", "active_period": "active", "start_date": null, "end_date": null, "created_by": "1jJ54rxik2", "is_national_account": 0, "required_length": null, "require_autopay": 0, "require_coverage": 0, "require_id_verification": 0, "remove_on_delinquency": 0, "new_tenants": 0, "existing_tenants": 0, "web_only": 0, "eligible_tenants": null, "modified_by": null, "min_quantity": null, "apply_to": "product", "sb709_promo_rent_cap": null, "is_sb709_rent_cap": 0, "sb709_promo_disclosure": null, "rounding_type": null, "sort_order": 3, "ProductCategories": [], "Products": [{"id": "av37RaSPvA", "name": "MM-bag-1"}]}]}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string", "description": "Error message."}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/properties/{property_id}/invoices": {"post": {"tags": ["Invoices"], "x-nectar-endpoint-name": "/v2/companies/company_id/properties/property_id/invoices", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Create or simulate an invoice for a property", "description": "Create a new invoice or simulate an invoice (dry run) for a specific property under a company. Identical behavior to v1 - same shared route handler.", "parameters": [{"name": "company_id", "in": "path", "required": true, "schema": {"type": "string"}, "description": "Unique identifier for the company"}, {"name": "property_id", "in": "path", "required": true, "schema": {"type": "string"}, "description": "Unique identifier for the property"}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"lease_id": {"type": "string", "nullable": true, "description": "Unique identifier for the lease (if applicable)"}, "contact_id": {"type": "string", "description": "Contact id of existing contact"}, "contact": {"type": "object", "description": "Contact details to create new contact if contact is not present", "properties": {"id": {"type": "string", "description": "If provided contact id here it will update the contact details with new details"}, "company_id": {"type": "string"}, "first": {"type": "string"}, "last": {"type": "string"}, "email": {"type": "string"}}}, "InvoiceLines": {"type": "array", "items": {"type": "object", "properties": {"product_id": {"type": "string", "description": "Unique identifier for the product"}, "name": {"type": "string", "description": "Name of the product"}, "price": {"type": "number", "format": "float", "description": "Price of the product"}, "qty": {"type": "integer", "description": "Quantity of the product"}, "recurring": {"type": "integer", "description": "Indicates if the product is recurring (1 for true, 0 for false)"}, "type": {"type": "string", "description": "Type of the product (e.g., product, service)"}, "default_type": {"type": "string", "description": "Type of the product (e.g., product, rent)"}, "prorate": {"type": "integer", "description": "Indicates if the product is prorated (1 for true, 0 for false)"}, "description": {"type": "string", "description": "Description of the product"}, "start_date": {"type": "string", "format": "date", "description": "Start date for the product"}, "end_date": {"type": "string", "format": "date", "description": "End date for the product"}, "taxable": {"type": "boolean", "description": "Indicates if the product is taxable"}, "amount_type": {"type": "string", "description": "Type of amount (e.g., fixed, variable)"}, "stock": {"type": "integer", "description": "Stock level of the product"}, "allow_negative": {"type": "boolean", "description": "Indicates if negative stock is allowed"}, "cost": {"type": "number", "format": "float", "description": "Cost of the product"}}}}, "dryrun": {"type": "boolean", "description": "Validation mode - when true:\n- Validates all data\n- Calculates totals and discounts\n- Does NOT save invoice or process payment\n- Useful for quote generation\n", "default": false}, "address": {"type": "object", "description": "Delivery address for BoxShop orders", "properties": {"address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}}}, "buy_back": {"type": "boolean", "description": "Flag indicating this is a buy-back transaction (no discounts applied)"}, "is_box_shop": {"type": "boolean", "description": "Flag indicating this is a BoxShop purchase", "default": false}, "is_quotation": {"type": "boolean", "description": "Flag indicating this is a quotation", "default": false}, "fulfillment_method": {"type": "string", "description": "Fulfillment method for BoxShop orders", "enum": ["delivery", "pickup"]}, "delivery_note": {"type": "string", "description": "Delivery note for BoxShop orders in case of delivery method"}, "payment": {"type": "object", "description": "- **Mode 1: Apply Existing Payment**\n- Provide only `payment.id` to apply an existing payment to this invoice\n- **Mode 2: Create New Payment**\n- Provide `payment.amount` and payment method details\n- System will create payment and charge the payment method\n- **Mode 3: PAX Terminal Payment**\n- Provide `payment.PAXResponse` with terminal transaction data\n- Used for in-person card payments via PAX device\n", "properties": {"id": {"type": "string", "description": "**Existing Payment ID** (Mode 1)\n- Hashed ID of an existing payment to apply to this invoice\n- When provided alone, applies existing payment without charging\n- Do NOT provide with `amount` or `PAXResponse`\n"}, "amount": {"type": "number", "format": "float", "minimum": 0.01}, "property_id": {"type": "string", "description": "Hashed property id on which the payment is being made"}, "type": {"type": "string", "description": "Payment type", "enum": ["card", "cash", "check", "ach", "credit"]}, "payment_method_id": {"type": "string", "description": "Hashed payment method ID (for card/ACH payments)\n- References saved payment method (card on file, bank account)\n- Required for card and ACH payments unless using PAX\n"}, "source": {"type": "string", "description": "Payment source/channel\n- **\"hosted\"**: Payment from hosted payment page\n- **\"terminal\"**: Payment from physical terminal\n- **\"admin\"**: Manual payment entry\n- **\"api\"**: Payment via API\n", "enum": ["hosted", "terminal", "admin", "api", "web"]}, "transaction_id": {"type": "string", "description": "External transaction ID from payment gateway\n- Used with `source: \"hosted\"` to reference gateway transaction\n- Provided by payment processor\n"}, "status_desc": {"type": "string", "description": "Payment status description from gateway\n- Used with `source: \"hosted\"`\n- Examples: \"Approved\", \"Declined\", \"Partially Approved\"\n"}, "status": {"type": "string", "description": "Payment status code\n- Used with `source: \"hosted\"`\n- Indicates success/failure from payment gateway\n"}, "PAXResponse": {"type": "object", "description": "**PAX Terminal Response** (Mode 3)\n- Response object from PAX payment terminal\n- Contains transaction details from in-person card payment\n- When provided, creates payment from terminal transaction\n", "properties": {"transactionId": {"type": "string", "description": "PAX transaction identifier", "example": "PAX_TXN_123456"}, "amount": {"type": "number", "format": "float", "description": "Amount processed by terminal", "example": 51.98}, "status": {"type": "string", "description": "Terminal transaction status", "example": "APPROVED"}, "cardType": {"type": "string", "description": "Card type (Visa, Mastercard, etc.)", "example": "Visa"}, "last4": {"type": "string", "description": "Last 4 digits of card", "example": "4242"}, "authCode": {"type": "string", "description": "Authorization code from processor", "example": "AUTH123"}}}}}, "paymentMethod": {"type": "object", "description": "Payment method details for new payment methods\n- Used when creating a new payment method on-the-fly\n- Alternative to using `payment_method_id`\n", "properties": {"type": {"type": "string", "enum": ["card", "ach"], "example": "card"}, "card_number": {"type": "string", "description": "Credit card number (for card type)", "example": "4242424242424242"}, "exp_month": {"type": "string", "description": "Card expiration month (MM)", "example": "12"}, "exp_year": {"type": "string", "description": "Card expiration year (YYYY)", "example": "2026"}, "cvv": {"type": "string", "description": "Card CVV code", "example": "123"}}}}}}}}, "responses": {"200": {"description": "Success", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer", "description": "HTTP status code"}, "data": {"type": "object", "properties": {"invoice": {"type": "object", "properties": {"id": {"type": "string", "nullable": true, "description": "Unique identifier for the invoice"}, "lease_id": {"type": "string", "nullable": true, "description": "Unique identifier for the lease (if applicable)"}, "property_id": {"type": "string", "description": "Unique identifier for the property"}, "contact_id": {"type": "string", "nullable": true, "description": "Unique identifier for the contact"}, "date": {"type": "string", "format": "date", "description": "Invoice date"}, "due": {"type": "string", "format": "date", "description": "Due date for the invoice"}, "paid": {"type": "number", "format": "float", "description": "Amount paid for the invoice"}, "qboPromise": {"type": "object", "description": "QuickBooks Online promise object"}, "qb_id": {"type": "string", "nullable": true, "description": "QuickBooks ID for the invoice"}, "type": {"type": "string", "description": "Type of the invoice (e.g., manual)"}, "status": {"type": "integer", "description": "Status of the invoice (1 for active, 0 for inactive)"}, "period_start": {"type": "string", "format": "date", "description": "Start date of the billing period"}, "period_end": {"type": "string", "format": "date", "description": "End date of the billing period"}, "effective_period_start": {"type": "string", "nullable": true, "description": "Effective start date of the billing period"}, "total_amt": {"type": "number", "format": "float", "description": "Total amount of the invoice"}, "total_tax": {"type": "number", "format": "float", "description": "Total tax amount for the invoice"}, "total_discounts": {"type": "number", "format": "float", "description": "Total discounts applied to the invoice"}, "total_discounts_with_tax": {"type": "number", "format": "float", "description": "Total discounts applied to the invoice, including tax"}, "balance": {"type": "number", "format": "float", "description": "Balance amount for the invoice"}, "reissued_from": {"type": "string", "nullable": true, "description": "Unique identifier for the reissued invoice"}, "adjusted_to": {"type": "string", "nullable": true, "description": "Unique identifier for the adjusted invoice"}, "adjusted_from": {"type": "string", "nullable": true, "description": "Unique identifier for the invoice adjusted from"}, "adjusted_by": {"type": "string", "nullable": true, "description": "Unique identifier for the user who adjusted the invoice"}, "adjusted_at": {"type": "string", "nullable": true, "description": "Timestamp when the invoice was adjusted"}, "msg": {"type": "string", "description": "Message associated with the invoice"}, "InvoiceLines": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "nullable": true, "description": "Unique identifier for the invoice line"}, "invoice_id": {"type": "string", "nullable": true, "description": "Unique identifier for the invoice"}, "product_id": {"type": "string", "description": "Unique identifier for the product"}, "discount_id": {"type": "string", "nullable": true, "description": "Unique identifier for the discount"}, "lease_id": {"type": "string", "nullable": true, "description": "Unique identifier for the lease"}, "property_bill_id": {"type": "string", "nullable": true, "description": "Unique identifier for the property bill"}, "qty": {"type": "integer", "description": "Quantity of the product"}, "cost": {"type": "number", "format": "float", "description": "Cost of the product"}, "full_cost": {"type": "number", "format": "float", "description": "Full, non-prorated cost of the line item"}, "additional_tax_only_cost": {"type": "number", "format": "float", "description": "Additional tax-only cost"}, "date": {"type": "string", "nullable": true, "description": "Date associated with the invoice line"}, "start_date": {"type": "string", "format": "date", "description": "Start date for the invoice line"}, "end_date": {"type": "string", "format": "date", "description": "End date for the invoice line"}, "effective_start_date": {"type": "string", "nullable": true, "description": "Effective start date for the invoice line"}, "service_id": {"type": "string", "nullable": true, "description": "Unique identifier for the service"}, "description": {"type": "string", "description": "Description of the invoice line"}, "qb_id": {"type": "string", "nullable": true, "description": "QuickBooks ID for the invoice line"}, "total_tax": {"type": "number", "format": "float", "description": "Total tax amount for the invoice line"}, "total_discounts": {"type": "number", "format": "float", "description": "Total discounts applied to the invoice line"}, "is_tax_inclusive": {"type": "integer", "description": "Indicates if the line cost is tax-inclusive - raw 0/1 flag, not a JSON boolean"}, "PropertyBill": {"type": "object", "description": "Property bill details"}, "Unit": {"type": "object", "description": "Unit details"}, "Lease": {"type": "object", "description": "Lease details"}, "Discount": {"type": "object", "description": "Discount details"}, "Product": {"type": "object", "properties": {"id": {"type": "string", "description": "Unique identifier for the product"}, "company_id": {"type": "string", "description": "Unique identifier for the company"}, "vendor_id": {"type": "string", "nullable": true, "description": "Unique identifier for the vendor"}, "product_category_id": {"type": "string", "nullable": true, "description": "Unique identifier for the product category"}, "name": {"type": "string", "description": "Name of the product"}, "description": {"type": "string", "description": "Description of the product"}, "status": {"type": "integer", "description": "Status of the product (1 for active, 0 for inactive)"}, "sku": {"type": "string", "description": "Stock Keeping Unit of the product"}, "price": {"type": "number", "format": "float", "description": "Price of the product"}, "type": {"type": "string", "description": "Type of the product (e.g., product, service)"}, "taxable": {"type": "integer", "description": "Indicates if the product is taxable (1 for true, 0 for false)"}, "taxrate": {"type": "string", "nullable": true, "description": "Tax rate for the product"}, "qb_income_account": {"type": "string", "nullable": true, "description": "QuickBooks income account for the product"}, "default_type": {"type": "string", "description": "Default type of the product"}, "qb_id": {"type": "string", "nullable": true, "description": "QuickBooks ID for the product"}, "prorate": {"type": "integer", "description": "Indicates if the product is prorated (1 for true, 0 for false)"}, "prorate_out": {"type": "integer", "description": "Indicates if the product is prorated out (1 for true, 0 for false)"}, "recurring": {"type": "integer", "description": "Indicates if the product is recurring (1 for true, 0 for false)"}, "has_inventory": {"type": "integer", "description": "Indicates if the product has inventory - raw 0/1 flag, not a JSON boolean"}, "amount_type": {"type": "string", "description": "Type of amount (e.g., fixed, variable)"}, "category_type": {"type": "string", "description": "Category type of the product (e.g., service)"}, "income_account_id": {"type": "string", "description": "Unique identifier for the income account"}, "expense_account_id": {"type": "string", "nullable": true, "description": "Unique identifier for the expense account"}, "concession_account_id": {"type": "string", "nullable": true, "description": "Unique identifier for the concession account"}, "liability_account_id": {"type": "string", "nullable": true, "description": "Unique identifier for the liability account"}, "slug": {"type": "string", "nullable": true, "description": "Slug for the product"}, "commission": {"type": "number", "format": "float", "description": "Commission for the product"}, "created_at": {"type": "string", "description": "Timestamp when the product was created"}, "modified_at": {"type": "string", "description": "Timestamp when the product was last modified"}, "super_lease_fee": {"type": "integer", "description": "Indicates if this is a super lease fee product - raw 0/1 flag, not a JSON boolean"}, "property_price": {"type": "number", "format": "float", "nullable": true, "description": "Property-specific price for the product"}, "property_taxable": {"type": "integer", "nullable": true, "description": "Indicates if the product is taxable at the property level (1 for true, 0 for false)"}, "property_income_account_id": {"type": "string", "nullable": true, "description": "Property-specific income account ID for the product"}, "property_prorate": {"type": "integer", "nullable": true, "description": "Property-specific prorate setting for the product - raw 0/1 flag, not a JSON boolean"}, "property_prorate_out": {"type": "integer", "nullable": true, "description": "Property-specific prorate-out setting for the product - raw 0/1 flag, not a JSON boolean"}}}, "TaxLines": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "nullable": true, "description": "Unique identifier for the tax line"}, "invoice_line_id": {"type": "string", "nullable": true, "description": "Unique identifier for the invoice line"}, "tax_authority_id": {"type": "string", "nullable": true, "description": "Unique identifier for the tax authority"}, "taxrate": {"type": "number", "format": "float", "description": "Tax rate for the tax line"}, "amount": {"type": "number", "format": "float", "description": "Tax amount for the tax line"}, "qboPromise": {"type": "object", "description": "QuickBooks Online promise object"}, "msg": {"type": "string", "description": "Message associated with the tax line"}, "tax_profile_id": {"type": "string", "description": "Unique identifier for the tax profile"}}}}, "DiscountLines": {"type": "array", "items": {"type": "object", "description": "Discount lines associated with the invoice line"}}, "DiscountTotals": {"type": "object", "description": "Discount totals for the invoice line"}, "Credit": {"type": "object", "description": "Credit details for the invoice line"}, "total": {"type": "number", "format": "float", "description": "Total amount for the invoice line"}, "qboPromise": {"type": "object", "description": "QuickBooks Online promise object"}, "RoundingInfo": {"type": "object", "description": "Rounding configuration applied to this line", "properties": {"use_global_rounding": {"type": "boolean", "description": "Whether the company-wide rounding setting is used for this line"}, "rounding_method": {"type": "string", "description": "Rounding method applied, e.g. full_dollar"}, "rounding_increment": {"type": "number", "format": "float", "description": "Rounding increment applied"}, "round_retail_price": {"type": "boolean", "description": "Whether the retail price is rounded"}}}, "msg": {"type": "string", "description": "Message associated with the invoice line"}, "totalTax": {"type": "number", "format": "float", "description": "Total tax amount for the invoice line"}, "totalDiscounts": {"type": "number", "format": "float", "description": "Total discounts applied to the invoice line"}, "totalDiscountsWithTax": {"type": "number", "format": "float", "description": "Total discounts applied to the invoice line, including tax"}, "subtotal": {"type": "number", "format": "float", "description": "Subtotal for the invoice line"}, "line_item_amount_paid": {"type": "number", "format": "float", "description": "Amount paid for the invoice line"}, "line_tax_amount_paid": {"type": "number", "format": "float", "description": "Tax amount paid for the invoice line"}, "line_pending_amount": {"type": "number", "format": "float", "description": "Pending amount for the invoice line"}, "type": {"type": "string", "nullable": true, "description": "Type of the invoice line (e.g., product)"}, "tax_discount": {"type": "number", "format": "float", "description": "Tax amount attributable to discounts on this line"}}}}, "Charges": {"type": "array", "items": {"type": "object", "description": "Charges associated with the invoice"}}, "Lease": {"type": "object", "description": "Lease details"}, "Property": {"type": "object", "description": "Property details"}, "Contact": {"type": "object", "description": "Contact details"}, "VoidedByContact": {"type": "object", "description": "Voided by contact details"}, "Payments": {"type": "array", "items": {"type": "object", "description": "Payments associated with the invoice"}}, "Unit": {"type": "object", "description": "Unit details"}, "company_id": {"type": "string", "description": "Unique identifier for the company"}, "discounts": {"type": "number", "format": "float", "description": "Total discounts applied to the invoice"}, "total_due": {"type": "number", "format": "float", "description": "Total amount due for the invoice"}, "sub_total": {"type": "number", "format": "float", "description": "Subtotal for the invoice"}, "rent_total": {"type": "number", "format": "float", "description": "Total rent amount for the invoice"}, "utilities_total": {"type": "number", "format": "float", "description": "Total utilities amount for the invoice"}, "total_payments": {"type": "number", "format": "float", "description": "Total payments made for the invoice"}, "open_payments": {"type": "number", "format": "float", "description": "Open payments for the invoice"}, "void_date": {"type": "string", "nullable": true, "description": "Void date for the invoice"}, "voided_at": {"type": "string", "nullable": true, "description": "Timestamp when the invoice was voided"}, "void_source": {"type": "string", "nullable": true, "description": "Source of the void"}, "void_reason": {"type": "string", "nullable": true, "description": "Reason for voiding the invoice"}, "voided_by_contact_id": {"type": "string", "nullable": true, "description": "Unique identifier for the contact who voided the invoice"}, "created_by": {"type": "string", "description": "Unique identifier for the user who created the invoice"}, "apikey_id": {"type": "string", "nullable": true, "description": "Unique identifier for the API key used to create the invoice"}, "effective_date": {"type": "string", "nullable": true, "description": "Effective date for the invoice"}, "leases_billing_cycles_period_id": {"type": "string", "nullable": true, "description": "Unique identifier for the billing cycle period"}, "PaymentsToApply": {"type": "array", "items": {"type": "object", "description": "Payments to apply to the invoice"}}, "ReissuedFrom": {"type": "object", "description": "Reissued from invoice details"}, "ReissuedTo": {"type": "object", "description": "Reissued to invoice details"}, "po_number": {"type": "string", "nullable": true, "description": "Purchase order number for the invoice"}, "use_global_rounding": {"type": "boolean", "description": "Whether the company-wide rounding setting is used for this invoice"}, "rounding_method": {"type": "string", "description": "Rounding method applied, e.g. full_dollar"}, "rounding_increment": {"type": "number", "format": "float", "description": "Rounding increment applied"}, "round_retail_price": {"type": "boolean", "description": "Whether the retail price is rounded"}, "tax_discount": {"type": "number", "format": "float", "description": "Tax amount attributable to discounts on this invoice"}}}}}, "msg": {"type": "string", "description": "Response message"}, "message": {"type": "string", "description": "Additional message"}}}}}}, "400": {"$ref": "#/components/responses/400"}, "401": {"$ref": "#/components/responses/401"}, "404": {"$ref": "#/components/responses/404"}, "5XX": {"$ref": "#/components/responses/500"}}}}, "/v2/companies/{company_id}/invoices/{invoice_id}": {"get": {"tags": ["Invoices"], "parameters": [{"$ref": "#/components/parameters/company_id"}, {"$ref": "#/components/parameters/invoice_id"}], "x-nectar-endpoint-name": "/v2/companies/company_id/invoices/invoice_id", "x-nectar-visibility": "public", "x-nectar-scope": "public", "summary": "Get a invoice", "description": "Get one invoice by ID, with its invoice lines, payments, lease, contact and property.\n\n**Cost:** Light. About 0.4 seconds and 20 to 26 KB per invoice. Not paged.", "responses": {"200": {"description": "Success. The API gateway wraps the response in `applicationData.<app_id>[0]`.", "content": {"application/json": {"schema": {"type": "object", "properties": {"message": {"type": "string", "example": "success"}, "applicationData": {"type": "object", "additionalProperties": {"type": "array", "items": {"type": "object", "properties": {"status": {"type": "integer", "example": 200}, "data": {"type": "object", "properties": {"invoice": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "contact_id": {"type": "string"}, "number": {"type": "string"}, "po_number": {"type": "string", "nullable": true, "description": "Purchase order number for the invoice"}, "date": {"type": "string"}, "created_at": {"type": "string", "description": "Timestamp when the invoice was created"}, "due": {"type": "string"}, "status": {"type": "number"}, "period_start": {"type": "string"}, "period_end": {"type": "string"}, "paid": {"type": "number"}, "balance": {"type": "number"}, "utilities_total": {"type": "number"}, "rent_total": {"type": "number"}, "total_due": {"type": "number"}, "total_tax": {"type": "number"}, "total_discounts": {"type": "number"}, "total_payments": {"type": "number"}, "discounts": {"type": "number"}, "sub_total": {"type": "number"}, "can_void_invoice": {"type": "boolean", "description": "Whether this invoice can be voided"}, "can_adjust_invoice": {"type": "boolean", "description": "Whether this invoice can be adjusted"}, "void_date": {"type": "string", "nullable": true}, "void_reason": {"type": "string", "nullable": true}, "void_source": {"type": "string", "nullable": true}, "can_reissue": {"type": "boolean"}, "leases_billing_cycles_period_id": {"type": "string", "nullable": true}, "InvoiceStatementMeta": {"type": "object", "description": "Metadata about the combined billing statement this invoice belongs to, if any", "properties": {"statement_id": {"type": "string", "nullable": true}, "linked_invoice_count": {"type": "integer"}, "is_combined_statement": {"type": "boolean"}}}, "ReissuedFrom": {"type": "object", "properties": {}}, "InvoiceLines": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "invoice_id": {"type": "string"}, "product_id": {"type": "string"}, "discount_id": {"type": "string"}, "lease_id": {"type": "string"}, "property_bill_id": {"type": "string"}, "qty": {"type": "number"}, "cost": {"type": "number"}, "full_cost": {"type": "number", "description": "Full, non-prorated cost of the line item"}, "additional_tax_only_cost": {"type": "number"}, "date": {"type": "string", "nullable": true}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "effective_start_date": {"type": "string", "nullable": true}, "service_id": {"type": "string", "nullable": true}, "description": {"type": "string", "nullable": true}, "qb_id": {"type": "string", "nullable": true}, "total_tax": {"type": "number"}, "total_discounts": {"type": "number"}, "is_tax_inclusive": {"type": "integer", "description": "Raw 0/1 flag, not a JSON boolean"}, "PropertyBill": {"type": "object", "properties": {}}, "Unit": {"type": "object", "properties": {}}, "Lease": {"type": "object", "properties": {}}, "Discount": {"type": "object", "properties": {}}, "Service": {"type": "object", "properties": {"id": {"type": "string"}, "lease_id": {"type": "string"}, "product_id": {"type": "string"}, "property_bill_id": {"type": "string"}, "price": {"type": "number"}, "start_date": {"type": "string"}, "end_date": {"type": "string", "nullable": true}, "name": {"type": "string"}, "description": {"type": "string", "nullable": true}, "qty": {"type": "number"}, "taxable": {"type": "number"}, "recurring": {"type": "number"}, "prorate": {"type": "number"}, "service_type": {"type": "string"}, "status": {"type": "number"}, "created": {"type": "string"}, "prorate_out": {"type": "number"}, "modified_by": {"type": "string", "nullable": true}, "created_by": {"type": "string", "nullable": true}, "modified_at": {"type": "string", "nullable": true}, "update_reason": {"type": "string", "nullable": true}, "end_source": {"type": "string", "nullable": true}, "number": {"type": "string", "nullable": true}, "reference_id": {"type": "string", "nullable": true}}}, "Product": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "vendor_id": {"type": "string"}, "product_category_id": {"type": "string"}, "name": {"type": "string"}, "description": {"type": "string", "nullable": true}, "status": {"type": "number"}, "sku": {"type": "string", "nullable": true}, "price": {"type": "number", "nullable": true}, "type": {"type": "string"}, "taxable": {"type": "number"}, "taxrate": {"type": "string", "nullable": true}, "qb_income_account": {"type": "string", "nullable": true}, "default_type": {"type": "string"}, "qb_id": {"type": "string", "nullable": true}, "prorate": {"type": "number"}, "prorate_out": {"type": "number"}, "recurring": {"type": "number"}, "has_inventory": {"type": "number", "nullable": true}, "amount_type": {"type": "string", "nullable": true}, "category_type": {"type": "string", "nullable": true}, "income_account_id": {"type": "string", "nullable": true}, "expense_account_id": {"type": "string", "nullable": true}, "concession_account_id": {"type": "string", "nullable": true}, "liability_account_id": {"type": "string", "nullable": true}, "slug": {"type": "string", "nullable": true}, "commission": {"type": "number"}, "created_at": {"type": "string"}, "modified_at": {"type": "string"}, "super_lease_fee": {"type": "integer", "description": "Raw 0/1 flag, not a JSON boolean"}}}, "TaxLines": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "invoice_line_id": {"type": "string"}, "tax_authority_id": {"type": "string", "nullable": true}, "qb_id": {"type": "string", "nullable": true}, "amount": {"type": "number"}, "taxrate": {"type": "number"}, "qb_tax_code": {"type": "string", "nullable": true}, "tax_profile_id": {"type": "string", "nullable": true}, "created_at": {"type": "string"}, "modified_at": {"type": "string"}, "update_reason": {"type": "string", "nullable": true}}}}, "DiscountLines": {"type": "array", "items": {"type": "object"}}, "DiscountTotals": {"type": "object", "properties": {}}, "Credit": {"type": "object", "properties": {}}, "total": {"type": "number"}, "qboPromise": {"type": "object", "properties": {}}, "RoundingInfo": {"type": "object", "nullable": true, "description": "Rounding configuration applied to this line, if any", "properties": {"use_global_rounding": {"type": "boolean"}, "rounding_method": {"type": "string"}, "rounding_increment": {"type": "number"}, "round_retail_price": {"type": "boolean"}}}, "msg": {"type": "string"}, "totalTax": {"type": "number"}, "totalDiscounts": {"type": "number"}, "totalDiscountsWithTax": {"type": "number"}, "subtotal": {"type": "number"}, "line_item_amount_paid": {"type": "number"}, "line_tax_amount_paid": {"type": "number"}, "line_pending_amount": {"type": "number"}, "tax_discount": {"type": "number"}, "LineAllocations": {"type": "array", "items": {"type": "object"}}, "InvoiceLineAllocations": {"type": "array", "items": {"type": "object"}}, "can_credit": {"type": "boolean"}}}}, "Payments": {"type": "array", "items": {"type": "object"}}, "Lease": {"type": "object", "additionalProperties": true, "description": "Full lease record. Not exhaustively typed here - contains many more internal fields beyond those listed below.", "properties": {"id": {"type": "string"}, "unit_id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "create_invoice_day": {"type": "number"}, "notes": {"type": "string", "nullable": true}, "terms": {"type": "string", "nullable": true}, "rent": {"type": "number"}, "status": {"type": "number"}, "token": {"type": "string"}, "achtoken": {"type": "string"}, "send_invoice": {"type": "number"}, "discount_id": {"type": "string"}, "security_deposit": {"type": "number", "nullable": true}, "monthly": {"type": "number", "nullable": true}, "lease_standing_id": {"type": "string"}, "rent_paid_through": {"type": "string"}, "code": {"type": "string"}, "moved_out": {"type": "string"}, "decline_insurance": {"type": "number"}, "insurance_exp_month": {"type": "string"}, "insurance_exp_year": {"type": "string"}, "rent_change_exempt": {"type": "number"}, "auction_status": {"type": "string", "nullable": true}, "deny_payments": {"type": "number"}, "created": {"type": "string"}, "Discounts": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "Invoice": {"type": "object", "properties": {}}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "sort": {"type": "number"}, "type": {"type": "string"}, "created_at": {"type": "string"}, "primary": {"type": "number"}, "Contact": {"type": "object", "additionalProperties": true, "description": "Full contact record (heavy PII). Not exhaustively typed here.", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "status": {"type": "string"}, "user_id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "notes": {"type": "string"}, "company": {"type": "string"}, "email": {"type": "string"}, "verification_token": {"type": "string"}, "email_verified": {"type": "string"}, "suffix": {"type": "string"}, "dob": {"type": "string", "nullable": true}, "source": {"type": "string", "nullable": true}, "ssn": {"type": "string", "nullable": true}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true}, "driver_license_exp": {"type": "string"}, "driver_license_state": {"type": "string"}, "driver_license_city": {"type": "string"}, "have_secondary_contact": {"type": "number"}, "opt_out": {"type": "number"}, "gdsOwnerId": {"type": "string"}, "user_name": {"type": "string"}, "Access": {"type": "array", "items": {"type": "string"}}, "Leases": {"type": "array", "items": {"type": "string"}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "move_in": {"type": "string"}, "move_out": {"type": "string"}, "rent": {"type": "number"}, "reason": {"type": "string"}, "landlord": {"type": "string"}, "phone": {"type": "string"}, "type": {"type": "string"}, "created_at": {"type": "string"}, "primary": {"type": "number"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "formatted_address": {"type": "string"}}}}}}, "role_id": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "created_at": {"type": "string"}, "IsCellNo": {"type": "number"}, "primary": {"type": "number"}, "verification_token": {"type": "string"}, "phone_verified": {"type": "string"}}}}, "Companies": {"type": "array", "items": {"type": "string"}}, "Applications": {"type": "array", "items": {"type": "string"}}, "Reservations": {"type": "array", "items": {"type": "string"}}, "Pending": {"type": "array", "items": {"type": "string"}}, "Vehicles": {"type": "array", "items": {"type": "string"}}, "Employment": {"type": "array", "items": {"type": "string"}}, "Relationships": {"type": "array", "items": {"type": "string"}}, "Interactions": {"type": "array", "items": {"type": "string"}}, "Permissions": {"type": "array", "items": {"type": "string"}}, "Properties": {"type": "array", "items": {"type": "string"}}, "NonHbProperties": {"type": "array", "items": {"type": "string"}}, "Military": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}, "Address": {"type": "object", "properties": {}}, "CommandingOfficer": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}}}}}, "Business": {"type": "object", "properties": {}}, "Touchpoints": {"type": "array", "items": {"type": "string"}}, "Delinquencies": {"type": "array", "items": {"type": "string"}}, "Token": {"type": "object", "properties": {}}, "ActiveLead": {"type": "object", "properties": {}}, "Leads": {"type": "array", "items": {"type": "string"}}}}, "isPrimary": {"type": "boolean"}}}}, "Invoices": {"type": "array", "items": {"type": "string"}}, "Payments": {"type": "array", "items": {"type": "string"}}, "PaymentMethods": {"type": "array", "items": {"type": "string"}}, "Checklist": {"type": "array", "items": {"type": "string"}}, "Unit": {"type": "object", "additionalProperties": true, "description": "Full unit record. Not exhaustively typed here.", "properties": {"id": {"type": "string"}, "property_id": {"type": "string"}, "category_id": {"type": "string"}, "product_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "floor": {"type": "string"}, "type": {"type": "string"}, "description": {"type": "string", "nullable": true}, "price": {"type": "number"}, "featured": {"type": "number"}, "available_date": {"type": "string"}, "active": {"type": "number"}, "status": {"type": "number"}, "template_id": {"type": "string"}, "x": {"type": "number", "nullable": true}, "y": {"type": "number", "nullable": true}, "rotate": {"type": "number", "nullable": true}, "invert": {"type": "string"}, "left": {"type": "string"}, "top": {"type": "string"}, "hold_token": {"type": "string"}, "msg": {"type": "string"}, "state": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number"}, "lng": {"type": "number"}, "formatted_address": {"type": "string"}}}, "Utilities": {"type": "array", "items": {"type": "string"}}, "Amenities": {"type": "array", "properties": {}}, "Category": {"type": "object", "properties": {}}, "Product": {"type": "object", "properties": {}}, "Images": {"type": "array", "items": {"type": "string"}}, "Lease": {"type": "object", "properties": {"id": {"type": "string"}, "unit_id": {"type": "string"}, "start_date": {"type": "string"}, "end_date": {"type": "string"}, "bill_day": {"type": "number"}, "create_invoice_day": {"type": "number"}, "notes": {"type": "string"}, "terms": {"type": "string"}, "rent": {"type": "number"}, "status": {"type": "number"}, "token": {"type": "string"}, "achtoken": {"type": "string"}, "send_invoice": {"type": "number"}, "discount_id": {"type": "string"}, "security_deposit": {"type": "number"}, "monthly": {"type": "number"}, "lease_standing_id": {"type": "string"}, "rent_paid_through": {"type": "string"}, "code": {"type": "string"}, "moved_out": {"type": "string"}, "decline_insurance": {"type": "string"}, "insurance_exp_month": {"type": "string"}, "insurance_exp_year": {"type": "string"}, "rent_change_exempt": {"type": "string"}, "auction_status": {"type": "string"}, "deny_payments": {"type": "string"}, "created": {"type": "string"}, "Discounts": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "Invoice": {"type": "object", "properties": {}}, "Tenants": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "sort": {"type": "number"}, "type": {"type": "string"}, "created_at": {"type": "string"}, "primary": {"type": "number"}, "Contact": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "status": {"type": "string"}, "user_id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "notes": {"type": "string"}, "company": {"type": "string"}, "email": {"type": "string"}, "verification_token": {"type": "string"}, "email_verified": {"type": "string"}, "suffix": {"type": "string"}, "dob": {"type": "string"}, "source": {"type": "string"}, "ssn": {"type": "string"}, "gender": {"type": "string"}, "driver_license": {"type": "string"}, "driver_license_exp": {"type": "string"}, "driver_license_state": {"type": "string"}, "driver_license_city": {"type": "string"}, "have_secondary_contact": {"type": "string"}, "opt_out": {"type": "string"}, "gdsOwnerId": {"type": "string"}, "role": {"type": "string"}, "Role": {"type": "object", "properties": {}}, "user_name": {"type": "string"}, "Access": {"type": "array", "items": {"type": "string"}}, "Leases": {"type": "array", "items": {"type": "string"}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "move_in": {"type": "string"}, "move_out": {"type": "string"}, "rent": {"type": "string"}, "reason": {"type": "string"}, "landlord": {"type": "string"}, "phone": {"type": "string"}, "type": {"type": "string"}, "created_at": {"type": "string"}, "primary": {"type": "number"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "formatted_address": {"type": "string"}}}}}}, "role_id": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "created_at": {"type": "string"}, "IsCellNo": {"type": "string"}, "primary": {"type": "number"}, "verification_token": {"type": "string"}, "phone_verified": {"type": "string"}}}}, "Companies": {"type": "array", "items": {"type": "string"}}, "Applications": {"type": "array", "items": {"type": "string"}}, "Reservations": {"type": "array", "items": {"type": "string"}}, "Pending": {"type": "array", "items": {"type": "string"}}, "Vehicles": {"type": "array", "items": {"type": "string"}}, "Employment": {"type": "array", "items": {"type": "string"}}, "Relationships": {"type": "array", "items": {"type": "string"}}, "Interactions": {"type": "array", "items": {"type": "string"}}, "Permissions": {"type": "array", "items": {"type": "string"}}, "Properties": {"type": "array", "items": {"type": "string"}}, "NonHbProperties": {"type": "array", "items": {"type": "string"}}, "Military": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}, "Address": {"type": "object", "properties": {}}, "CommandingOfficer": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}}}}}, "Business": {"type": "object", "properties": {}}, "Touchpoints": {"type": "array", "items": {"type": "string"}}, "Delinquencies": {"type": "array", "items": {"type": "string"}}, "Token": {"type": "object", "properties": {}}, "ActiveLead": {"type": "object", "properties": {}}, "Leads": {"type": "array", "items": {"type": "string"}}}}, "isPrimary": {"type": "boolean"}}}}, "Invoices": {"type": "array", "items": {"type": "string"}}, "Payments": {"type": "array", "items": {"type": "string"}}, "PaymentMethods": {"type": "array", "items": {"type": "string"}}, "Checklist": {"type": "array", "items": {"type": "string"}}, "Unit": {"type": "object", "properties": {}}, "msg": {"type": "string"}, "MaintenanceRequests": {"type": "array", "items": {"type": "string"}}, "MaintenanceRequestCount": {"type": "string"}, "Reservation": {"type": "string"}, "Services": {"type": "array", "items": {"type": "string"}}, "ApplicationServices": {"type": "array", "items": {"type": "string"}}, "InsuranceServices": {"type": "array", "items": {"type": "string"}}, "ReservationServices": {"type": "array", "items": {"type": "string"}}, "move_in_costs": {"type": "string"}, "total_rent_due": {"type": "string"}, "balance": {"type": "string"}, "open_balance": {"type": "string"}, "OpenInvoices": {"type": "array", "items": {"type": "string"}}, "OpenPayments": {"type": "array", "items": {"type": "string"}}, "PastDue": {"type": "array", "items": {"type": "string"}}, "Ledger": {"type": "array", "items": {"type": "string"}}, "Standing": {"type": "object", "properties": {}}, "Vehicles": {"type": "object", "properties": {}}, "MoveInInvoice": {"type": "object", "properties": {}}, "Transfer": {"type": "string"}, "Lead": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "lease_id": {"type": "string"}, "property_id": {"type": "string"}, "unit_id": {"type": "string"}, "category_id": {"type": "string"}, "touchpoint_id": {"type": "string"}, "note": {"type": "string"}, "length_of_stay": {"type": "string"}, "move_in_date": {"type": "string"}, "retire_reason": {"type": "string"}, "method": {"type": "string"}, "content": {"type": "string"}, "extras": {"type": "string"}, "created": {"type": "string"}, "status": {"type": "string"}, "source": {"type": "string"}, "send_to": {"type": "string"}, "opened": {"type": "string"}, "flagged": {"type": "string"}, "modified": {"type": "string"}, "modified_by": {"type": "string"}, "created_by": {"type": "number"}, "is_new": {"type": "number"}, "spaceMixId": {"type": "string"}}}, "Property": {"type": "object", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "description": {"type": "string"}, "status": {"type": "number"}, "name": {"type": "string"}, "access_id": {"type": "string"}, "msg": {"type": "string"}, "gds_id": {"type": "string"}, "utc_offset": {"type": "string"}, "unit_count": {"type": "string"}, "lease_count": {"type": "string"}, "unitCount": {"type": "string"}, "occupancy": {"type": "string"}, "is_day_closed": {"type": "string"}, "localCurrentDate": {"type": "string"}, "Assets": {"type": "array", "items": {"type": "string"}}, "Phones": {"type": "array", "items": {"type": "string"}}, "Emails": {"type": "array", "items": {"type": "string"}}, "Units": {"type": "array", "items": {"type": "string"}}, "Hours": {"type": "array", "items": {"type": "string"}}, "Access": {"type": "string"}, "Address": {"type": "object", "properties": {}}, "Images": {"type": "array", "items": {"type": "string"}}, "Application": {"type": "array", "items": {"type": "string"}}, "ApplicationConfig": {"type": "object", "properties": {}}, "Checklist": {"type": "array", "items": {"type": "string"}}, "Connections": {"type": "array", "items": {"type": "string"}}, "Triggers": {"type": "array", "items": {"type": "string"}}, "MaintenanceTypes": {"type": "array", "items": {"type": "string"}}, "MaintenanceExtras": {"type": "array", "items": {"type": "string"}}, "Insurances": {"type": "array", "items": {"type": "string"}}, "Products": {"type": "array", "items": {"type": "string"}}, "TaxRates": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "LeaseTemplates": {"type": "object", "properties": {"storage": {"type": "object", "properties": {}}, "residential": {"type": "object", "properties": {}}, "commercial": {"type": "object", "properties": {}}}}}}, "LeaseAuction": {"type": "object", "properties": {}}, "Uploads": {"type": "array", "items": {"type": "string"}}, "Delinquency": {"type": "object", "properties": {}}, "has_open_invoice": {"type": "string"}, "created_by": {"type": "number"}, "auto_pay_after_billing_date": {"type": "string"}, "current_property_date": {"type": "string"}, "sensitive_info_stored": {"type": "string"}, "statuses": {"type": "array", "items": {"type": "string"}}, "advance_rental": {"type": "string"}}}, "Leases": {"type": "array", "items": {"type": "string"}}, "Pending": {"type": "string"}, "Property": {"type": "array", "items": {"type": "string"}}, "Floorplan": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "label": {"type": "string"}, "space_mix_id": {"type": "string"}, "default_price": {"type": "number"}, "modified": {"type": "string"}, "next_lease_start": {"type": "string"}, "height": {"type": "string"}, "width": {"type": "string"}, "length": {"type": "string"}, "door width": {"type": "string"}, "door height": {"type": "string"}, "sqft": {"type": "string"}}}, "msg": {"type": "string"}, "MaintenanceRequests": {"type": "array", "items": {"type": "string"}}, "MaintenanceRequestCount": {"type": "string"}, "Reservation": {"type": "object", "properties": {}}, "Services": {"type": "array", "items": {"type": "string"}}, "ApplicationServices": {"type": "array", "items": {"type": "string"}}, "InsuranceServices": {"type": "array", "items": {"type": "string"}}, "ReservationServices": {"type": "array", "items": {"type": "string"}}, "move_in_costs": {"type": "string"}, "total_rent_due": {"type": "string"}, "balance": {"type": "number"}, "open_balance": {"type": "number"}, "OpenInvoices": {"type": "array", "items": {"type": "string"}}, "OpenPayments": {"type": "array", "items": {"type": "string"}}, "PastDue": {"type": "array", "items": {"type": "string"}}, "Ledger": {"type": "array", "items": {"type": "string"}}, "Standing": {"type": "object", "properties": {}}, "Vehicles": {"type": "object", "properties": {}}, "MoveInInvoice": {"type": "object", "properties": {}}, "Transfer": {"type": "string"}, "Lead": {"type": "object", "properties": {}}, "Property": {"type": "object", "additionalProperties": true, "description": "Full property record. Not exhaustively typed here.", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "description": {"type": "string"}, "status": {"type": "number"}, "name": {"type": "string"}, "access_id": {"type": "string"}, "msg": {"type": "string"}, "gds_id": {"type": "string"}, "utc_offset": {"type": "string"}, "unit_count": {"type": "string"}, "lease_count": {"type": "string"}, "unitCount": {"type": "string"}, "occupancy": {"type": "string"}, "is_day_closed": {"type": "boolean"}, "localCurrentDate": {"type": "string"}, "Assets": {"type": "array", "items": {"type": "string"}}, "Phones": {"type": "array", "items": {"type": "string"}}, "Emails": {"type": "array", "items": {"type": "string"}}, "Units": {"type": "array", "items": {"type": "string"}}, "Hours": {"type": "array", "items": {"type": "string"}}, "Access": {"type": "string"}, "Address": {"type": "object", "properties": {}}, "Images": {"type": "array", "items": {"type": "string"}}, "Application": {"type": "array", "items": {"type": "string"}}, "ApplicationConfig": {"type": "object", "properties": {}}, "Checklist": {"type": "array", "items": {"type": "string"}}, "Connections": {"type": "array", "items": {"type": "string"}}, "Triggers": {"type": "array", "items": {"type": "string"}}, "MaintenanceTypes": {"type": "array", "items": {"type": "string"}}, "MaintenanceExtras": {"type": "array", "items": {"type": "string"}}, "Insurances": {"type": "array", "items": {"type": "string"}}, "Products": {"type": "array", "items": {"type": "string"}}, "TaxRates": {"type": "array", "items": {"type": "string"}}, "Promotions": {"type": "array", "items": {"type": "string"}}, "LeaseTemplates": {"type": "object", "properties": {"storage": {"type": "object", "properties": {}}, "residential": {"type": "object", "properties": {}}, "commercial": {"type": "object", "properties": {}}}}}}, "LeaseAuction": {"type": "object", "properties": {}}, "Uploads": {"type": "array", "items": {"type": "string"}}, "Delinquency": {"type": "object", "properties": {}}, "has_open_invoice": {"type": "boolean"}, "created_by": {"type": "number"}, "auto_pay_after_billing_date": {"type": "number"}, "current_property_date": {"type": "string"}, "sensitive_info_stored": {"type": "number"}, "statuses": {"type": "array", "items": {"type": "string"}}, "advance_rental": {"type": "number"}}}, "Property": {"type": "object", "properties": {"id": {"type": "string"}, "name": {"type": "string"}, "number": {"type": "string"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "number"}, "lng": {"type": "number"}, "formatted_address": {"type": "string"}}}}}, "Contact": {"type": "object", "additionalProperties": true, "description": "Full contact record (heavy PII). Not exhaustively typed here.", "properties": {"id": {"type": "string"}, "company_id": {"type": "string"}, "status": {"type": "string"}, "user_id": {"type": "string"}, "salutation": {"type": "string"}, "first": {"type": "string"}, "middle": {"type": "string"}, "last": {"type": "string"}, "notes": {"type": "string"}, "company": {"type": "string"}, "email": {"type": "string"}, "verification_token": {"type": "string"}, "email_verified": {"type": "string"}, "suffix": {"type": "string"}, "dob": {"type": "string", "nullable": true}, "source": {"type": "string", "nullable": true}, "ssn": {"type": "string", "nullable": true}, "gender": {"type": "string", "nullable": true}, "driver_license": {"type": "string", "nullable": true}, "driver_license_exp": {"type": "string"}, "driver_license_state": {"type": "string"}, "driver_license_city": {"type": "string"}, "have_secondary_contact": {"type": "number"}, "opt_out": {"type": "number"}, "gdsOwnerId": {"type": "string"}, "user_name": {"type": "string"}, "Access": {"type": "array", "items": {"type": "string"}}, "Leases": {"type": "array", "items": {"type": "string"}}, "Addresses": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "address_id": {"type": "string"}, "number": {"type": "string"}, "move_in": {"type": "string"}, "move_out": {"type": "string"}, "rent": {"type": "number"}, "reason": {"type": "string"}, "landlord": {"type": "string"}, "phone": {"type": "string"}, "type": {"type": "string"}, "created_at": {"type": "string"}, "primary": {"type": "number"}, "Address": {"type": "object", "properties": {"id": {"type": "string"}, "address": {"type": "string"}, "address2": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "neighborhood": {"type": "string"}, "zip": {"type": "string"}, "country": {"type": "string"}, "lat": {"type": "string"}, "lng": {"type": "string"}, "formatted_address": {"type": "string"}}}}}}, "role_id": {"type": "string"}, "Phones": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "contact_id": {"type": "string"}, "type": {"type": "string"}, "phone": {"type": "string"}, "sms": {"type": "boolean"}, "created_at": {"type": "string"}, "IsCellNo": {"type": "number"}, "primary": {"type": "number"}, "verification_token": {"type": "string"}, "phone_verified": {"type": "string"}}}}, "Companies": {"type": "array", "items": {"type": "string"}}, "Applications": {"type": "array", "items": {"type": "string"}}, "Reservations": {"type": "array", "items": {"type": "string"}}, "Pending": {"type": "array", "items": {"type": "string"}}, "Vehicles": {"type": "array", "items": {"type": "string"}}, "Employment": {"type": "array", "items": {"type": "string"}}, "Relationships": {"type": "array", "items": {"type": "string"}}, "Interactions": {"type": "array", "items": {"type": "string"}}, "Permissions": {"type": "array", "items": {"type": "string"}}, "Properties": {"type": "array", "items": {"type": "string"}}, "NonHbProperties": {"type": "array", "items": {"type": "string"}}, "Military": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}, "Address": {"type": "object", "properties": {}}, "CommandingOfficer": {"type": "object", "properties": {"Phone": {"type": "object", "properties": {}}}}}}, "Business": {"type": "object", "properties": {}}, "Touchpoints": {"type": "array", "items": {"type": "string"}}, "Delinquencies": {"type": "array", "items": {"type": "string"}}, "Token": {"type": "object", "properties": {}}, "ActiveLead": {"type": "object", "properties": {}}, "Leads": {"type": "array", "items": {"type": "string"}}}}, "VoidedByContact": {"type": "object", "additionalProperties": true, "description": "Contact who voided this invoice, if it was voided. Empty object if not voided."}}}}}, "message": {"type": "string"}}}}}, "meta": {"type": "object", "properties": {"requestId": {"type": "string"}}}}}, "examples": {"paid_lease_invoice": {"summary": "Paid rent invoice on a lease (trimmed)", "value": {"message": "success", "applicationData": {"<app_id>": [{"status": 200, "data": {"invoice": {"id": "7jPx6zuYjg", "lease_id": "N5BXQWhmv3", "contact_id": "nBmAK0IdBV", "number": "3290", "po_number": null, "date": "2018-11-30", "created_at": "2018-12-01 01:00:01", "due": "2018-12-01", "status": 1, "period_start": "2018-12-01 00:00:00", "period_end": "2018-12-31 00:00:00", "paid": 1, "balance": 0, "utilities_total": 0, "rent_total": 0, "total_due": 92.86, "total_tax": 7.86, "total_discounts": 0, "total_payments": 92.86, "discounts": 0, "sub_total": 85, "can_void_invoice": false, "can_adjust_invoice": true, "void_date": null, "void_reason": null, "void_source": null, "can_reissue": false, "leases_billing_cycles_period_id": null, "InvoiceStatementMeta": {"statement_id": null, "linked_invoice_count": 0, "is_combined_statement": false}, "ReissuedFrom": {}, "InvoiceLines": [{"id": "nB9ZDMUrv6", "invoice_id": "7jPx6zuYjg", "product_id": "knBmmUdBVD", "lease_id": null, "qty": 1, "cost": 85, "date": "2018-12-01", "start_date": "2018-12-01", "end_date": "2018-12-31", "description": null, "total_tax": 7.86, "total_discounts": 0, "Product": {"id": "knBmmUdBVD", "name": "Rent", "default_type": "rent"}}], "Payments": [{"id": "lBNxwxTL2g", "invoice_id": "7jPx6zuYjg", "payment_id": "kjgQqAiOvW", "amount": 92.86, "date": "2019-01-04"}], "Lease": {"id": "N5BXQWhmv3", "unit_id": "bPvkozs9vV", "start_date": "2018-09-04", "end_date": "2019-01-04", "bill_day": 1, "rent": 85, "status": 1}, "Property": {"id": "85B73ubBGy", "name": "UC Irvine Storage", "number": "UCI-1", "Address": {"id": "gjYQwd6Cej", "address": "5281 California Ave 22", "address2": "Suite 9", "city": "Irvine", "state": "CA", "neighborhood": null, "zip": "92617", "country": "United States", "lat": 33.63552, "lng": -117.855854, "formatted_address": null, "region": null, "district": "saaaaa", "unit_number": null, "created_at": "2026-03-23 20:42:56", "modified_at": "2026-05-07 10:31:23", "suburb_id": null, "previous_address": {"lat": 33.63552, "lng": -117.855854, "zip": "92617", "city": "Irvine", "state": "CA", "region": null, "address": "5281 California Ave 22", "country": "United States", "address2": "Suite 9", "district": "saaaaa", "suburb_id": null, "created_at": "2026-03-23 20:42:56.000000", "modified_at": "2026-03-23 20:42:56.000000", "neighborhood": null, "formatted_address": null}}}, "Contact": {"id": "nBmAK0IdBV", "first": "Jo", "last": "Martin", "email": "jomartin@example.com"}, "VoidedByContact": {}}}, "message": ""}]}, "meta": {"requestId": "<request id>"}}}}}}}, "400": {"description": "The request was rejected.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "examples": {"invalid_id": {"summary": "invoice_id is not a valid ID of this company", "value": {"status": 400, "data": {}, "msg": "Invalid ID format", "actual_cause": "Invalid ID format", "message": ""}}, "invalid_company": {"summary": "company_id is not valid", "value": {"status": 400, "data": {}, "msg": "Invalid parameters", "actual_cause": "Invalid parameters", "message": ""}}}}}}, "401": {"$ref": "#/components/responses/401"}, "404": {"description": "The invoice ID is a valid ID but matches no invoice.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "integer"}, "data": {"type": "object"}, "msg": {"type": "string"}, "actual_cause": {"type": "string"}, "message": {"type": "string"}}}, "example": {"status": 404, "data": {}, "msg": "invoice Not found", "actual_cause": "invoice Not found", "message": ""}}}}, "5XX": {"$ref": "#/components/responses/500"}}}}}, "security": [{"apiKey": [], "TimeStamp": []}], "tags": [{"description": "API related to Accounting", "name": "Accounting"}, {"description": "API related to Auctions", "name": "Auctions"}, {"description": "API related to Contacts", "name": "Contacts"}, {"description": "API related to Leads", "name": "Leads"}, {"description": "API related to Leases", "name": "Leases"}, {"description": "API related to Notes", "name": "Notes"}, {"description": "API related to Payment", "name": "Payments"}, {"description": "API related to Promotions", "name": "Promotions"}, {"description": "API related to Properties", "name": "Properties"}, {"description": "API related to Rate Management", "name": "Rate-Management"}, {"description": "API related to Rent Management", "name": "Rent-Management"}, {"description": "API related to Reports", "name": "Reports"}, {"description": "API related to Reservations", "name": "Reservations"}, {"description": "API related to Space Groups", "name": "Space-Groups"}, {"description": "API related to Tenants", "name": "Tenants"}, {"description": "API related to Units", "name": "Units"}, {"description": "API related to Website Users", "name": "Website"}], "servers": [{"url": "https://prod.edge.tenant.dev/api/v3/applications/{application_id}", "description": "PROD", "variables": {"application_id": {"description": "Your application identifier", "default": ""}}}]}