{"openapi":"3.1.0","info":{"title":"Rentari.ai Developer API","version":"0.1.0","description":"Public REST surface for Rentari.ai. Bearer-authed with sk_test_ or sk_live_ keys generated from the Developer dashboard. See https://www.rentari.ai/docs/api for human-readable docs."},"servers":[{"url":"https://www.rentari.ai","description":"Production"}],"paths":{"/api/v1/external/properties":{"get":{"tags":["Developer API External"],"summary":"List Properties","description":"Returns properties in the portfolio, ordered by id ascending so\ncursors are stable across writes.","operationId":"list_properties_api_v1_external_properties_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Starting After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_PropertyOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Developer API External"],"summary":"Create Property","description":"Create a property and one default unit.\n\nPublic-API surface is intentionally narrower than the dashboard's\nmulti-unit form: one property, one unit, no deed lookup. Use the\ndashboard to verify the property and add additional units after\ncreation.\n\nRespects the user's plan unit limit via Subscription.max_units.\nHonors Idempotency-Key per the /docs/api contract.","operationId":"create_property_api_v1_external_properties_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/properties/{property_id}":{"get":{"tags":["Developer API External"],"summary":"Retrieve Property","operationId":"retrieve_property_api_v1_external_properties__property_id__get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Developer API External"],"summary":"Update Property","description":"Update a property's address or type.","operationId":"update_property_api_v1_external_properties__property_id__patch","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Validate and preview without saving.","default":false,"title":"Dry Run"},"description":"Validate and preview without saving."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/tenants":{"get":{"tags":["Developer API External"],"summary":"List Tenants","operationId":"list_tenants_api_v1_external_tenants_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Starting After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_TenantOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/tenants/invite":{"post":{"tags":["Developer API External"],"summary":"Invite Tenant","description":"Create an applicant lead + send the apply-now email.\n\nThe lead is locked to the API key owner's portfolio. The unit_id\nmust belong to a property the owner controls; cross-portfolio\ninvites get a 404 so we don't leak unit existence. Honors\nIdempotency-Key so a flaky retry doesn't double-send the email.","operationId":"invite_tenant_api_v1_external_tenants_invite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantInviteCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantInviteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/leases":{"get":{"tags":["Developer API External"],"summary":"List Leases","description":"Leases are scoped to the portfolio via Unit -> Property.landlord_id.","operationId":"list_leases_api_v1_external_leases_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Starting After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_LeaseOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/maintenance/tickets":{"get":{"tags":["Developer API External"],"summary":"List Maintenance Tickets","operationId":"list_maintenance_tickets_api_v1_external_maintenance_tickets_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Starting After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_MaintenanceTicketOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Developer API External"],"summary":"Create Maintenance Ticket","description":"Open a maintenance ticket. Honors Idempotency-Key so a retry does\nnot create a duplicate ticket.","operationId":"create_maintenance_ticket_api_v1_external_maintenance_tickets_post","parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Validate and preview without saving.","default":false,"title":"Dry Run"},"description":"Validate and preview without saving."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceTicketCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceTicketOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/payments":{"get":{"tags":["Developer API External"],"summary":"List Payments","operationId":"list_payments_api_v1_external_payments_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Starting After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_PaymentOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/tenants/{tenant_id}":{"patch":{"tags":["Developer API External"],"summary":"Update Tenant","description":"Update a tenant's contact details.","operationId":"update_tenant_api_v1_external_tenants__tenant_id__patch","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Validate and preview without saving.","default":false,"title":"Dry Run"},"description":"Validate and preview without saving."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/maintenance/tickets/{ticket_id}":{"patch":{"tags":["Developer API External"],"summary":"Update Maintenance Ticket","description":"Update a maintenance ticket's status, priority, text, or vendor.","operationId":"update_maintenance_ticket_api_v1_external_maintenance_tickets__ticket_id__patch","parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"string","title":"Ticket Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Validate and preview without saving.","default":false,"title":"Dry Run"},"description":"Validate and preview without saving."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceTicketUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceTicketOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/leases/{lease_id}":{"patch":{"tags":["Developer API External"],"summary":"Update Lease","description":"Update a lease. Changing rent or deposit additionally requires the\n'payments' scope, because those numbers drive what a tenant is billed.","operationId":"update_lease_api_v1_external_leases__lease_id__patch","parameters":[{"name":"lease_id","in":"path","required":true,"schema":{"type":"string","title":"Lease Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Validate and preview without saving.","default":false,"title":"Dry Run"},"description":"Validate and preview without saving."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaseUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaseOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/webhooks/endpoints":{"post":{"tags":["Developer API External"],"summary":"Create Webhook Endpoint","description":"Register a new endpoint. The signing secret is returned in this\nresponse and never shown again; persist it on your side or fetch\na fresh secret by rotating the endpoint. Honors Idempotency-Key.","operationId":"create_webhook_endpoint_api_v1_external_webhooks_endpoints_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Developer API External"],"summary":"List Webhook Endpoints","operationId":"list_webhook_endpoints_api_v1_external_webhooks_endpoints_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Starting After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListEnvelope_WebhookEndpointOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/webhooks/endpoints/{endpoint_id}":{"delete":{"tags":["Developer API External"],"summary":"Delete Webhook Endpoint","description":"Soft-disable the endpoint. Pending deliveries already enqueued\nwill not be sent; existing delivery history is preserved.","operationId":"delete_webhook_endpoint_api_v1_external_webhooks_endpoints__endpoint_id__delete","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LeaseOut":{"properties":{"object":{"type":"string","title":"Object","default":"lease"},"id":{"type":"string","title":"Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"monthly_rent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Rent"},"security_deposit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Security Deposit"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["id"],"title":"LeaseOut"},"LeaseUpdate":{"properties":{"end_date":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"End Date"},"status":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Status"},"monthly_rent":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Monthly Rent"},"security_deposit":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Security Deposit"}},"type":"object","title":"LeaseUpdate","description":"Money fields (monthly_rent, security_deposit) require the separate\n'payments' scope; the rest only need 'write'."},"ListEnvelope_LeaseOut_":{"properties":{"object":{"type":"string","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/LeaseOut"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","has_more"],"title":"ListEnvelope[LeaseOut]"},"ListEnvelope_MaintenanceTicketOut_":{"properties":{"object":{"type":"string","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/MaintenanceTicketOut"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","has_more"],"title":"ListEnvelope[MaintenanceTicketOut]"},"ListEnvelope_PaymentOut_":{"properties":{"object":{"type":"string","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/PaymentOut"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","has_more"],"title":"ListEnvelope[PaymentOut]"},"ListEnvelope_PropertyOut_":{"properties":{"object":{"type":"string","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/PropertyOut"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","has_more"],"title":"ListEnvelope[PropertyOut]"},"ListEnvelope_TenantOut_":{"properties":{"object":{"type":"string","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/TenantOut"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","has_more"],"title":"ListEnvelope[TenantOut]"},"ListEnvelope_WebhookEndpointOut_":{"properties":{"object":{"type":"string","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/WebhookEndpointOut"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","has_more"],"title":"ListEnvelope[WebhookEndpointOut]"},"MaintenanceTicketCreate":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"priority":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Priority"},"unit_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Unit Id"}},"type":"object","required":["title"],"title":"MaintenanceTicketCreate"},"MaintenanceTicketOut":{"properties":{"object":{"type":"string","title":"Object","default":"maintenance_ticket"},"id":{"type":"string","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"vendor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Id"},"ai_triage_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Triage Category"},"ai_triage_severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Triage Severity"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id"],"title":"MaintenanceTicketOut"},"MaintenanceTicketUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"priority":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Priority"},"status":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Status"},"vendor_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Vendor Id"}},"type":"object","title":"MaintenanceTicketUpdate"},"PaymentOut":{"properties":{"object":{"type":"string","title":"Object","default":"payment"},"id":{"type":"string","title":"Id"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"transaction_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"due_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due Date"},"paid_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid Date"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["id"],"title":"PaymentOut"},"PropertyCreate":{"properties":{"street_address":{"type":"string","maxLength":255,"minLength":1,"title":"Street Address"},"city":{"type":"string","maxLength":100,"minLength":1,"title":"City"},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State"},"zip_code":{"type":"string","maxLength":10,"minLength":5,"title":"Zip Code"},"property_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Property Type"},"monthly_rent":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Monthly Rent"},"security_deposit":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Security Deposit"},"beds":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":0.0},{"type":"null"}],"title":"Beds"},"baths":{"anyOf":[{"type":"number","maximum":50.0,"minimum":0.0},{"type":"null"}],"title":"Baths"}},"type":"object","required":["street_address","city","state","zip_code"],"title":"PropertyCreate"},"PropertyOut":{"properties":{"object":{"type":"string","title":"Object","default":"property"},"id":{"type":"string","title":"Id"},"street_address":{"type":"string","title":"Street Address"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"zip_code":{"type":"string","title":"Zip Code"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"unit_count":{"type":"integer","title":"Unit Count","default":0},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","street_address","city","state","zip_code"],"title":"PropertyOut"},"PropertyUpdate":{"properties":{"street_address":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Street Address"},"city":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string","maxLength":10,"minLength":5},{"type":"null"}],"title":"Zip Code"},"property_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Property Type"}},"type":"object","title":"PropertyUpdate"},"TenantInviteCreate":{"properties":{"first_name":{"type":"string","maxLength":100,"minLength":1,"title":"First Name"},"last_name":{"type":"string","maxLength":100,"minLength":1,"title":"Last Name"},"email":{"type":"string","format":"email","title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Phone"},"unit_id":{"type":"string","maxLength":120,"minLength":1,"title":"Unit Id"},"target_rent":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Target Rent"},"personal_note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Personal Note"}},"type":"object","required":["first_name","last_name","email","unit_id"],"title":"TenantInviteCreate"},"TenantInviteOut":{"properties":{"object":{"type":"string","title":"Object","default":"tenant_invite"},"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"invite_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invite Link"},"sent":{"type":"boolean","title":"Sent"}},"type":"object","required":["id","email","first_name","last_name","sent"],"title":"TenantInviteOut"},"TenantOut":{"properties":{"object":{"type":"string","title":"Object","default":"tenant"},"id":{"type":"string","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","required":["id","first_name","last_name"],"title":"TenantOut"},"TenantUpdate":{"properties":{"first_name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Phone"}},"type":"object","title":"TenantUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookEndpointCreate":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"events":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Events"}},"type":"object","required":["url","events"],"title":"WebhookEndpointCreate"},"WebhookEndpointOut":{"properties":{"object":{"type":"string","title":"Object","default":"webhook_endpoint"},"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"signing_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signing Secret","description":"Returned ONCE at creation; never on subsequent reads."}},"type":"object","required":["id","url","events","status"],"title":"WebhookEndpointOut"}}}}