{"components":{"schemas":{"PolicyWebhook":{"description":"Payload delivered for policy lifecycle events. Includes `admin_policy_url` (Portal deep link). On `policy.documents_updated` only, `policy_url` is also set to the document archive URL.","properties":{"data":{"properties":{"insurance_policy":{"properties":{"admin_policy_url":{"description":"Portal deep link to the policy admin page for onsite staff.","format":"uri","type":"string"},"coverage_amount_cents":{"description":"Bound coverage amount in cents from the current policy revision.","type":["integer","null"]},"coverage_end_date":{"description":"Coverage end date (ISO 8601 date).","format":"date","type":["string","null"]},"coverage_start_date":{"description":"Coverage start date (ISO 8601 date).","format":"date","type":["string","null"]},"id":{"type":"string"},"pms_property_id":{"type":["string","null"]},"pms_resident_id":{"type":["string","null"]},"pms_type":{"type":["string","null"]},"pms_unit_id":{"type":["string","null"]},"policy_number":{"type":["string","null"]},"policy_url":{"description":"Present only on `policy.documents_updated`. Signed URL for the policy document archive. Distinct from `admin_policy_url`.","format":"uri","type":"string"},"product_type":{"type":"string"},"status":{"type":"string"}},"required":["id","policy_number","status","pms_type","pms_property_id","pms_unit_id","pms_resident_id","product_type","coverage_amount_cents","coverage_start_date","coverage_end_date","admin_policy_url"],"type":"object"}},"required":["insurance_policy"],"type":"object"},"event":{"example":"policy.created","type":"string"}},"required":["event","data"],"type":"object"}},"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},"info":{"description":"API for third-party partners to create and manage insurance prospects through the SayRhino platform.","title":"SayRhino Partner API","version":"v2"},"openapi":"3.1.0","paths":{"/partners/property_owners":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"active":false,"embedded_frame_ancestors":["https://www.bilt.com"],"external_org_id":"bilt-mg-77931","max_coverage_amount_cents":"500000","name":"A","purchase_flow_enabled":false,"slug":"chosen-by-the-partner","underwriting_score":"F"},"schema":{"properties":{"active":{"type":"boolean"},"embedded_frame_ancestors":{"items":{"type":"string"},"type":["array","null"]},"external_org_id":{"type":"string"},"max_coverage_amount_cents":{"type":["string","null"]},"name":{"type":"string"},"purchase_flow_enabled":{"type":["boolean","null"]},"slug":{"type":"string"},"underwriting_score":{"type":"string"}},"required":["external_org_id"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"property_owner":{"embedded_frame_ancestors":["https://a.bilt.com","https://b.bilt.com"],"external_org_id":"bilt-mg-77931","max_coverage_amount_cents":null,"name":"Gov. Mickey Lynch 1","purchase_flow_enabled":false,"slug":"hudson-residential-group","status":"pending"},"status_code":200},"schema":{"properties":{"property_owner":{"properties":{"embedded_frame_ancestors":{"items":{"type":"string"},"type":"array"},"external_org_id":{"type":"string"},"max_coverage_amount_cents":{"type":["integer","null"]},"name":{"type":"string"},"purchase_flow_enabled":{"type":"boolean"},"slug":{"type":"string"},"status":{"enum":["pending","active"],"type":"string"}},"required":["external_org_id","name","slug","status","purchase_flow_enabled","embedded_frame_ancestors","max_coverage_amount_cents"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","property_owner"],"type":"object"}}},"description":"Register a property management company and receive the slug that scopes every later call. Keyed on the partner's own organisation id, so re-sending a payload updates rather than duplicating: an omitted field is left unchanged, an explicit null clears it, and embedded_frame_ancestors replaces the whole list. Entries in that list must be https origins, and may wildcard a subdomain but not a whole TLD. A company Rhino already works with directly is provisioned by Rhino instead and returns 409. A 422 carries field-level detail under property_owner.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"example":{"property_owner":{"embedded_frame_ancestors":[],"external_org_id":"bilt-mg-77931","max_coverage_amount_cents":null,"name":"A","purchase_flow_enabled":false,"slug":"partner-owner","status":"pending"},"status_code":201},"schema":{"properties":{"property_owner":{"properties":{"embedded_frame_ancestors":{"items":{"type":"string"},"type":"array"},"external_org_id":{"type":"string"},"max_coverage_amount_cents":{"type":["integer","null"]},"name":{"type":"string"},"purchase_flow_enabled":{"type":"boolean"},"slug":{"type":"string"},"status":{"enum":["pending","active"],"type":"string"}},"required":["external_org_id","name","slug","status","purchase_flow_enabled","embedded_frame_ancestors","max_coverage_amount_cents"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","property_owner"],"type":"object"}}},"description":"Register a property management company and receive the slug that scopes every later call. Keyed on the partner's own organisation id, so re-sending a payload updates rather than duplicating: an omitted field is left unchanged, an explicit null clears it, and embedded_frame_ancestors replaces the whole list. Entries in that list must be https origins, and may wildcard a subdomain but not a whole TLD. A company Rhino already works with directly is provisioned by Rhino instead and returns 409. A 422 carries field-level detail under property_owner.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Register a property management company and receive the slug that scopes every later call. Keyed on the partner's own organisation id, so re-sending a payload updates rather than duplicating: an omitted field is left unchanged, an explicit null clears it, and embedded_frame_ancestors replaces the whole list. Entries in that list must be https origins, and may wildcard a subdomain but not a whole TLD. A company Rhino already works with directly is provisioned by Rhino instead and returns 409. A 422 carries field-level detail under property_owner."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Register a property management company and receive the slug that scopes every later call. Keyed on the partner's own organisation id, so re-sending a payload updates rather than duplicating: an omitted field is left unchanged, an explicit null clears it, and embedded_frame_ancestors replaces the whole list. Entries in that list must be https origins, and may wildcard a subdomain but not a whole TLD. A company Rhino already works with directly is provisioned by Rhino instead and returns 409. A 422 carries field-level detail under property_owner.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":"This organisation is managed directly by Rhino. Coordinate with Rhino to be granted access to it.","status_code":409},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Register a property management company and receive the slug that scopes every later call. Keyed on the partner's own organisation id, so re-sending a payload updates rather than duplicating: an omitted field is left unchanged, an explicit null clears it, and embedded_frame_ancestors replaces the whole list. Entries in that list must be https origins, and may wildcard a subdomain but not a whole TLD. A company Rhino already works with directly is provisioned by Rhino instead and returns 409. A 422 carries field-level detail under property_owner.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"422":{"content":{"application/json":{"example":{"error":"Property owner invalid.","property_owner":{"embedded_frame_ancestors":"must be a list of https origins","external_org_id":"can't be blank","max_coverage_amount_cents":"must be a whole number of cents","name":"Name can't be blank","purchase_flow_enabled":"must be true or false"},"status_code":422},"schema":{"properties":{"error":{"type":"string"},"property_owner":{"properties":{"embedded_frame_ancestors":{"type":"string"},"external_org_id":{"type":"string"},"max_coverage_amount_cents":{"type":"string"},"name":{"type":"string"},"purchase_flow_enabled":{"type":"string"}},"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","error","property_owner"],"type":"object"}}},"description":"Register a property management company and receive the slug that scopes every later call. Keyed on the partner's own organisation id, so re-sending a payload updates rather than duplicating: an omitted field is left unchanged, an explicit null clears it, and embedded_frame_ancestors replaces the whole list. Entries in that list must be https origins, and may wildcard a subdomain but not a whole TLD. A company Rhino already works with directly is provisioned by Rhino instead and returns 409. A 422 carries field-level detail under property_owner.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"500":{"description":"Register a property management company and receive the slug that scopes every later call. Keyed on the partner's own organisation id, so re-sending a payload updates rather than duplicating: an omitted field is left unchanged, an explicit null clears it, and embedded_frame_ancestors replaces the whole list. Entries in that list must be https origins, and may wildcard a subdomain but not a whole TLD. A company Rhino already works with directly is provisioned by Rhino instead and returns 409. A 422 carries field-level detail under property_owner."}},"summary":"Create or update a property owner","tags":["Property owners"]}},"/partners/providers/{provider}/webhooks/endpoints":{"get":{"parameters":[{"example":"bilt","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"endpoints":[],"status_code":200},"schema":{"properties":{"endpoints":{"items":{"properties":{"created_at":{"format":"date-time","type":"string"},"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"status":{"type":"string"},"suspension_reason":{"type":"null"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","destination_url","status","events","suspension_reason","created_at","updated_at"],"type":"object"},"type":"array"},"status_code":{"type":"integer"}},"required":["status_code","endpoints"],"type":"object"}}},"description":"List the webhook endpoints for a partner that spans many property owners. Each delivery names its owner through `property_owner_slug`, so one endpoint can serve every property manager the partner covers.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"List the webhook endpoints for a partner that spans many property owners. Each delivery names its owner through `property_owner_slug`, so one endpoint can serve every property manager the partner covers."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"List the webhook endpoints for a partner that spans many property owners. Each delivery names its owner through `property_owner_slug`, so one endpoint can serve every property manager the partner covers.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"List the webhook endpoints for a partner that spans many property owners. Each delivery names its owner through `property_owner_slug`, so one endpoint can serve every property manager the partner covers."}},"summary":"List a partner's webhook endpoints","tags":["Webhooks"]},"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"bilt","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"endpoint":{"destination_url":"https://bilt.example.com/rhino/hook","events":["prospect.created"],"name":"Bilt"}},"schema":{"properties":{"endpoint":{"properties":{"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"}},"required":["destination_url","name","events"],"type":"object"}},"required":["endpoint"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"endpoint":{"created_at":"2017-02-03T04:05:06.000Z","destination_url":"https://bilt.example.com/rhino/hook","events":["prospect.created"],"id":1,"name":"Bilt","status":"active","suspension_reason":null,"updated_at":"2017-02-03T04:05:06.000Z"},"status_code":200},"schema":{"properties":{"endpoint":{"properties":{"created_at":{"format":"date-time","type":"string"},"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["active","suspended","disabled"],"type":"string"},"suspension_reason":{"type":"null"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","destination_url","status","events","suspension_reason","created_at","updated_at"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","endpoint"],"type":"object"}}},"description":"Register an endpoint under a partner that spans many property owners. The destination URL must use HTTPS.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Register an endpoint under a partner that spans many property owners. The destination URL must use HTTPS."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Register an endpoint under a partner that spans many property owners. The destination URL must use HTTPS.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"The provider is unknown, or Rhino has not provisioned a subscriber for it. A request never creates one."},"422":{"content":{"application/json":{"example":{"endpoint":{"destination_url":"Destination url must use HTTPS"},"error":"Invalid endpoint params.","status_code":422},"schema":{"properties":{"endpoint":{"properties":{"destination_url":{"type":"string"}},"required":["destination_url"],"type":"object"},"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error","endpoint"],"type":"object"}}},"description":"Register an endpoint under a partner that spans many property owners. The destination URL must use HTTPS.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Create a partner webhook endpoint","tags":["Webhooks"]}},"/partners/providers/{provider}/webhooks/endpoints/{id}":{"delete":{"parameters":[{"example":"application/x-www-form-urlencoded","in":"header","name":"Content-Type","required":false,"schema":{"type":"string"}},{"example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"example":"bilt","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Permanently remove a partner endpoint. All pending deliveries will be cancelled."},"401":{"description":"Permanently remove a partner endpoint. All pending deliveries will be cancelled."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Permanently remove a partner endpoint. All pending deliveries will be cancelled.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Permanently remove a partner endpoint. All pending deliveries will be cancelled."}},"summary":"Delete a partner webhook endpoint","tags":["Webhooks"]},"put":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"example":"bilt","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"endpoint":{"status":"suspended"}},"schema":{"properties":{"endpoint":{"properties":{"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"status":{"enum":["active","suspended","disabled"],"type":"string"}},"required":["status"],"type":"object"}},"required":["endpoint"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"endpoint":{"created_at":"2017-02-03T04:05:06.000Z","destination_url":"https://example.com/webhooks/foo/bar","events":["prospect.created","prospect.ready","prospect.incomplete","policy.created","policy.updated","policy.canceled","policy.expired","policy.documents_updated","policy_application.created","policy_application.quoted","policy_application.declined","policy_application.submitted","delinquency.created","delinquency.resolved","move_out.initiated"],"id":1,"name":"Test endpoint","status":"suspended","suspension_reason":null,"updated_at":"2017-02-03T04:05:06.000Z"},"status_code":200},"schema":{"properties":{"endpoint":{"properties":{"created_at":{"format":"date-time","type":"string"},"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["active","suspended","disabled"],"type":"string"},"suspension_reason":{"type":"null"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","destination_url","status","events","suspension_reason","created_at","updated_at"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","endpoint"],"type":"object"}}},"description":"Update a partner endpoint's destination URL, status, or subscribed events. The owner-scoped route does not reach an endpoint registered here.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Update a partner endpoint's destination URL, status, or subscribed events. The owner-scoped route does not reach an endpoint registered here."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Update a partner endpoint's destination URL, status, or subscribed events. The owner-scoped route does not reach an endpoint registered here.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Update a partner endpoint's destination URL, status, or subscribed events. The owner-scoped route does not reach an endpoint registered here."},"422":{"content":{"application/json":{"example":{},"schema":{"properties":{},"required":["status_code","error","endpoint"],"type":"object"}}},"description":"Update a partner endpoint's destination URL, status, or subscribed events.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Update a partner webhook endpoint","tags":["Webhooks"]}},"/partners/{owner_slug}/bank_accounts":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"no-such-owner","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"_json":[{"account_number":"483902117","display_name":"Hudson \u2014 primary operating","external_system_id":"bilt-bank-88","routing_number":"021000021"}]},"schema":{"properties":{"_json":{"items":{"properties":{"account_number":{"type":"string"},"default":{"type":"string"},"display_name":{"type":["string","null"]},"external_system_id":{"type":"string"},"routing_number":{"type":"string"}},"required":["display_name"],"type":"object"},"type":"array"}},"required":["_json"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"meta":{"created":1,"failed":0,"updated":0},"results":[{"account_number_last4":"2117","action":"created","default":true,"display_name":"Hudson \u2014 primary operating","external_system_id":"bilt-bank-88","routing_number":"021000021"}],"status_code":200},"schema":{"properties":{"meta":{"properties":{"created":{"type":"integer"},"failed":{"type":"integer"},"updated":{"type":"integer"}},"required":["created","updated","failed"],"type":"object"},"results":{"items":{"properties":{"account_number_last4":{"type":["string","null"]},"action":{"enum":["created","updated","failed"],"type":"string"},"default":{"nullable":true,"type":"boolean"},"display_name":{"type":["string","null"]},"errors":{"properties":{"account_number":{"type":"string"},"default":{"type":"string"},"display_name":{"type":"string"},"external_system_id":{"type":"string"},"routing_number":{"type":"string"}},"type":["object","null"]},"external_system_id":{"type":"string"},"routing_number":{"type":["string","null"]}},"required":["external_system_id","action"],"type":"object"},"type":"array"},"status_code":{"type":"integer"}},"required":["status_code","results","meta"],"type":"object"}}},"description":"Register the bank accounts claim payments are sent to for a property management company. Keyed on the partner's own account id, so re-sending a payload updates rather than duplicating. The first account registered becomes the company's default automatically, and a building with no account of its own pays to it. That first account becomes the default even when sent with default false, since the company would otherwise have nowhere to pay claims to. Send default true on a later account to move it; sending default false on the account currently holding it is refused, because the default must point somewhere. Account numbers are write-only: responses carry the last four digits only. Accounts cannot be deleted through this API.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Register the bank accounts claim payments are sent to for a property management company. Keyed on the partner's own account id, so re-sending a payload updates rather than duplicating. The first account registered becomes the company's default automatically, and a building with no account of its own pays to it. That first account becomes the default even when sent with default false, since the company would otherwise have nowhere to pay claims to. Send default true on a later account to move it; sending default false on the account currently holding it is refused, because the default must point somewhere. Account numbers are write-only: responses carry the last four digits only. Accounts cannot be deleted through this API."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Register the bank accounts claim payments are sent to for a property management company. Keyed on the partner's own account id, so re-sending a payload updates rather than duplicating. The first account registered becomes the company's default automatically, and a building with no account of its own pays to it. That first account becomes the default even when sent with default false, since the company would otherwise have nowhere to pay claims to. Send default true on a later account to move it; sending default false on the account currently holding it is refused, because the default must point somewhere. Account numbers are write-only: responses carry the last four digits only. Accounts cannot be deleted through this API.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Register the bank accounts claim payments are sent to for a property management company. Keyed on the partner's own account id, so re-sending a payload updates rather than duplicating. The first account registered becomes the company's default automatically, and a building with no account of its own pays to it. That first account becomes the default even when sent with default false, since the company would otherwise have nowhere to pay claims to. Send default true on a later account to move it; sending default false on the account currently holding it is refused, because the default must point somewhere. Account numbers are write-only: responses carry the last four digits only. Accounts cannot be deleted through this API."},"422":{"content":{"application/json":{"example":{"error":"Send at most 100 bank accounts per request.","status_code":422},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Register the bank accounts claim payments are sent to for a property management company. Keyed on the partner's own account id, so re-sending a payload updates rather than duplicating. The first account registered becomes the company's default automatically, and a building with no account of its own pays to it. That first account becomes the default even when sent with default false, since the company would otherwise have nowhere to pay claims to. Send default true on a later account to move it; sending default false on the account currently holding it is refused, because the default must point somewhere. Account numbers are write-only: responses carry the last four digits only. Accounts cannot be deleted through this API.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Register claim payout accounts","tags":["Bank accounts"]}},"/partners/{owner_slug}/insurance_policies/{policy_identifier}/change_requests":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}},{"example":"policy_EvkKja1y7OqYSEwoMd3gbePQ","in":"path","name":"policy_identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"change_request":{"lease_end_date":"2027-09-30","lease_start_date":"2026-10-01"}},"schema":{"properties":{"change_request":{"properties":{"lease_end_date":{"type":"string"},"lease_start_date":{"type":"string"}},"type":"object"}},"required":["change_request"],"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"example":{"change_request":{"lease_end_date":"2027-09-30","lease_start_date":"2026-09-01","status":"pending"},"status_code":201},"schema":{"properties":{"change_request":{"properties":{"lease_end_date":{"type":"string"},"lease_start_date":{"type":"string"},"status":{"type":"string"}},"required":["status","lease_start_date","lease_end_date"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","change_request"],"type":"object"}}},"description":"Request new lease dates for an active policy. The renter must accept the change before it takes effect.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Request new lease dates for an active policy. The renter must accept the change before it takes effect."},"403":{"content":{"application/json":{"example":{"error":"Not granted access to this property owner.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Request new lease dates for an active policy. The renter must accept the change before it takes effect.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Request new lease dates for an active policy. The renter must accept the change before it takes effect."},"422":{"content":{"application/json":{"example":null,"examples":{},"schema":{"properties":{"change_request":{"properties":{"base":{"type":"string"},"lease_dates":{"items":{"type":"string"},"type":"array"},"lease_end_date":{"type":"string"},"lease_start_date":{"type":"string"}},"type":"object"},"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error","change_request"],"type":"object"}}},"description":"Request new lease dates for an active policy. The renter must accept the change before it takes effect.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Request a lease-date change","tags":["Policies"]}},"/partners/{owner_slug}/move_outs":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"no-such-owner","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"external_id":"bilt-mo-1","move_out_date":"2026-09-30","property":{"address_city":"Chicago","address_line_one":"123 Main St","address_state":"IL","address_zip":"60601","external_id":"bilt-prop-1"},"refund_amount_cents":150000,"residents":[{"name":"Robbie Rhino","role":"primary"},{"name":"Remy Rhino","role":"co_resident"}],"unit":{"external_id":"bilt-unit-1","name":"4B"}},"schema":{"properties":{"external_id":{"type":"string"},"move_out_date":{"type":"string"},"property":{"properties":{"address_city":{"type":"string"},"address_line_one":{"type":"string"},"address_state":{"type":"string"},"address_zip":{"type":"string"},"external_id":{"type":"string"}},"required":["address_line_one","address_city","address_state","address_zip"],"type":"object"},"refund_amount_cents":{"type":"integer"},"residents":{"items":{"properties":{"email":{"type":"string"},"external_id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"}},"required":["role","name"],"type":"object"},"type":"array"},"unit":{"properties":{"external_id":{"type":"string"},"name":{"type":"string"}},"required":["external_id","name"],"type":"object"}},"required":["external_id","move_out_date","property","residents"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"move_out":{"external_id":"bilt-mo-1","move_out_date":"2026-09-30","move_out_id":1,"property":{"address_city":"Chicago","address_line_one":"123 Main St","address_state":"IL","address_zip":"60601","external_id":"bilt-prop-1"},"refund_amount_cents":null,"residents":[{"email":"robbie@example.com","external_id":"bilt-res-1","name":"Robbie Rhino","role":"primary"}],"status":"initiated","unit":{"external_id":"bilt-unit-1","name":"4B"}},"status_code":200},"schema":{"properties":{"move_out":{"properties":{"external_id":{"type":"string"},"move_out_date":{"type":"string"},"move_out_id":{"type":"integer"},"property":{"properties":{"address_city":{"type":"string"},"address_line_one":{"type":"string"},"address_state":{"type":"string"},"address_zip":{"type":"string"},"external_id":{"type":"string"}},"required":["external_id","address_line_one","address_city","address_state","address_zip"],"type":"object"},"refund_amount_cents":{"type":"null"},"residents":{"items":{"properties":{"email":{"type":"string"},"external_id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"}},"required":["role","name","email","external_id"],"type":"object"},"type":"array"},"status":{"type":"string"},"unit":{"properties":{"external_id":{"type":"string"},"name":{"type":"string"}},"required":["external_id","name"],"type":"object"}},"required":["move_out_id","external_id","status","move_out_date","refund_amount_cents","property","unit","residents"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","move_out"],"type":"object"}}},"description":"Partner-facing entry point to open a move-out. external_id is the idempotency key; a re-post returns the existing move-out rather than creating a duplicate.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"example":{"move_out":{"external_id":"bilt-mo-1","move_out_date":"2026-09-30","move_out_id":1,"property":{"address_city":"Chicago","address_line_one":"123 Main St","address_state":"IL","address_zip":"60601","external_id":null},"refund_amount_cents":null,"residents":[{"email":null,"external_id":null,"name":"Robbie Rhino","role":"primary"},{"email":null,"external_id":null,"name":"Remy Rhino","role":"co_resident"}],"status":"initiated","unit":{"external_id":null,"name":null}},"status_code":201},"schema":{"properties":{"move_out":{"properties":{"external_id":{"type":"string"},"move_out_date":{"type":"string"},"move_out_id":{"type":"integer"},"property":{"properties":{"address_city":{"type":"string"},"address_line_one":{"type":"string"},"address_state":{"type":"string"},"address_zip":{"type":"string"},"external_id":{"type":["string","null"]}},"required":["external_id","address_line_one","address_city","address_state","address_zip"],"type":"object"},"refund_amount_cents":{"type":["integer","null"]},"residents":{"items":{"properties":{"email":{"type":["string","null"]},"external_id":{"type":["string","null"]},"name":{"type":"string"},"role":{"type":"string"}},"required":["role","name","email","external_id"],"type":"object"},"type":"array"},"status":{"type":"string"},"unit":{"properties":{"external_id":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["external_id","name"],"type":"object"}},"required":["move_out_id","external_id","status","move_out_date","refund_amount_cents","property","unit","residents"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","move_out"],"type":"object"}}},"description":"Partner-facing entry point to open a move-out. external_id is the idempotency key; a re-post returns the existing move-out rather than creating a duplicate.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Partner-facing entry point to open a move-out. external_id is the idempotency key; a re-post returns the existing move-out rather than creating a duplicate."},"403":{"content":{"application/json":{"example":{"error":"Not granted access to this property owner.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Partner-facing entry point to open a move-out. external_id is the idempotency key; a re-post returns the existing move-out rather than creating a duplicate.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Partner-facing entry point to open a move-out. external_id is the idempotency key; a re-post returns the existing move-out rather than creating a duplicate."},"422":{"content":{"application/json":{"example":{"error":"Move-out invalid.","move_out":{"external_id":"External can't be blank","move_out_date":"Move out date can't be blank","property_address_line_one":"Property address line one can't be blank","residents":"each resident must include a role and a name"},"status_code":422},"schema":{"properties":{"error":{"type":"string"},"move_out":{"properties":{"external_id":{"type":"string"},"move_out_date":{"type":"string"},"property_address_line_one":{"type":"string"},"residents":{"type":"string"}},"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","error","move_out"],"type":"object"}}},"description":"Partner-facing entry point to open a move-out. external_id is the idempotency key; a re-post returns the existing move-out rather than creating a duplicate.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Open a move-out","tags":["Move Outs"]}},"/partners/{owner_slug}/move_outs/{id}":{"get":{"parameters":[{"example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"example":"no-such-owner","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"move_out":{"external_id":"bilt-mo-1","move_out_date":"2017-02-03","move_out_id":1,"property":{"address_city":"Chicago","address_line_one":"123 Main St","address_state":"IL","address_zip":"60601","external_id":null},"refund_amount_cents":null,"residents":[],"status":"initiated","unit":{"external_id":null,"name":null}},"status_code":200},"schema":{"properties":{"move_out":{"properties":{"external_id":{"type":"string"},"move_out_date":{"type":"string"},"move_out_id":{"type":"integer"},"property":{"properties":{"address_city":{"type":"string"},"address_line_one":{"type":"string"},"address_state":{"type":"string"},"address_zip":{"type":"string"},"external_id":{"type":"null"}},"required":["external_id","address_line_one","address_city","address_state","address_zip"],"type":"object"},"refund_amount_cents":{"type":"null"},"residents":{"items":{},"type":"array"},"status":{"type":"string"},"unit":{"properties":{"external_id":{"type":"null"},"name":{"type":"null"}},"required":["external_id","name"],"type":"object"}},"required":["move_out_id","external_id","status","move_out_date","refund_amount_cents","property","unit","residents"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","move_out"],"type":"object"}}},"description":"Reconciliation read for a single move-out. Webhooks are the primary channel; this is the pull fallback.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Reconciliation read for a single move-out. Webhooks are the primary channel; this is the pull fallback."},"403":{"content":{"application/json":{"example":{"error":"Not granted access to this property owner.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Reconciliation read for a single move-out. Webhooks are the primary channel; this is the pull fallback.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Reconciliation read for a single move-out. Webhooks are the primary channel; this is the pull fallback."}},"summary":"Fetch a move-out","tags":["Move Outs"]}},"/partners/{owner_slug}/properties":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"_json":[{"address":{"city":"Brooklyn","line_one":"123 Main St","state":"NY","zip":"11201"},"building_name":"The Hudson \u2014 North","type":"multifamily"}]},"schema":{"properties":{"_json":{"items":{"properties":{"active":{"type":"boolean"},"address":{"properties":{"city":{"type":"string"},"line_one":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"}},"required":["line_one","city","state","zip"],"type":"object"},"bank_account_external_id":{"type":["string","null"]},"bank_account_id":{"type":"integer"},"building_name":{"type":"string"},"default_coverage":{"properties":{"type":{"type":"string"},"value":{"format":"float","type":["number","null"]}},"required":["type","value"],"type":"object"},"external_system_id":{"type":"string"},"pms_property_id":{"type":"string"},"pms_type":{"type":"string"},"policy_holder_name":{"type":"string"},"property_owner_id":{"type":"integer"},"single_family":{"type":"boolean"},"slug":{"type":"string"},"type":{"type":"string"}},"required":["building_name"],"type":"object"},"type":"array"}},"required":["_json"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"meta":{"created":0,"failed":1,"updated":0},"results":[{"action":"failed","errors":{"external_system_id":["is required"]},"external_system_id":null}],"status_code":200},"schema":{"properties":{"meta":{"properties":{"created":{"type":"integer"},"failed":{"type":"integer"},"updated":{"type":"integer"}},"required":["created","updated","failed"],"type":"object"},"results":{"items":{"properties":{"action":{"enum":["created","updated","failed"],"type":"string"},"errors":{"properties":{"address_city":{"items":{"type":"string"},"type":"array"},"address_line_one":{"items":{"type":"string"},"type":"array"},"address_state":{"items":{"type":"string"},"type":"array"},"address_zip":{"items":{"type":"string"},"type":"array"},"bank_account_external_id":{"items":{"type":"string"},"type":"array"},"base":{"items":{"type":"string"},"type":"array"},"building_name":{"items":{"type":"string"},"type":"array"},"default_coverage":{"items":{"type":"string"},"type":"array"},"external_system_id":{"items":{"type":"string"},"type":"array"},"pms_type":{"items":{"type":"string"},"type":"array"},"property_owner_id":{"items":{"type":"string"},"type":"array"},"type":{"items":{"type":"string"},"type":"array"}},"type":["object","null"]},"external_system_id":{"type":["string","null"]}},"required":["external_system_id","action"],"type":"object"},"type":"array"},"status_code":{"type":"integer"}},"required":["status_code","results","meta"],"type":"object"}}},"description":"Upsert a batch of properties for a property owner, keyed on the partner's own external_system_id. The body is a bare JSON array of at most 500 items. Each item resolves independently: one bad item never fails the batch.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Upsert a batch of properties for a property owner, keyed on the partner's own external_system_id. The body is a bare JSON array of at most 500 items. Each item resolves independently: one bad item never fails the batch."},"403":{"content":{"application/json":{"example":{"error":"Not granted access to this property owner.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Upsert a batch of properties for a property owner, keyed on the partner's own external_system_id. The body is a bare JSON array of at most 500 items. Each item resolves independently: one bad item never fails the batch.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Upsert a batch of properties for a property owner, keyed on the partner's own external_system_id. The body is a bare JSON array of at most 500 items. Each item resolves independently: one bad item never fails the batch."},"422":{"content":{"application/json":{"example":{"error":"Request body must be a JSON array of items.","status_code":422},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Upsert a batch of properties for a property owner, keyed on the partner's own external_system_id. The body is a bare JSON array of at most 500 items. Each item resolves independently: one bad item never fails the batch.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Create or update properties","tags":["Roster"]}},"/partners/{owner_slug}/prospects":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"prospect":{"authorized_members":[{"member_external_id":"m-2"}],"authorized_members_stamped_at":1754568000,"birthdate":"1990-05-15","citizenship":"us_or_green_card","deposit_amount_cents":250000,"education_level":"bachelor_degree","email":"newprospect@example.com","employment_status":"employed","first_name":"John","guarantor_coverage":true,"has_ssn":true,"last_name":"Doe","lease_end_date":"2026-01-31","lease_start_date":"2025-02-01","monthly_rent_cents":200000,"phone":"5559876543","pms_property_id":"prop-123","pms_prospect_id":"prospect-789","pms_type":"yardi","pms_unit_id":"unit-456","property":{"active":false,"address":{"city":"Brooklyn","line_one":"125 Main St","state":"NY","zip":"11201"},"building_name":"The Hudson \u2014 South","external_system_id":"bilt-prop-sibling","type":"multifamily"},"screening_result":"approved","social_security_number":"100010001","source":"vero","source_prospect_id":"new-prospect-123","terms_accepted_at":"2025-01-15T10:30:00Z","unit":{"external_system_id":"bilt-unit-sibling","name":"7C","property_external_id":"bilt-prop-new"},"yearly_income":75000}},"schema":{"properties":{"prospect":{"properties":{"authorized_members":{"description":"The complete current list of members authorized on this prospect. Always send the whole list, never a delta, because any member absent from it is de-authorized. Omit the key entirely to leave the existing list untouched; sending an empty array de-authorizes everyone.","items":{"properties":{"idp_subject":{"type":"string"},"member_external_id":{"type":"string"},"relationship":{"enum":["resident","delegate"],"type":"string"},"verification_method":{"type":"string"},"verified_at":{"format":"date-time","type":"string"}},"required":["member_external_id"],"type":"object"},"type":"array"},"authorized_members_stamped_at":{"description":"When the authorized_members list above was generated. A list stamped at or before the last one accepted is refused, so a delayed or out of order delivery cannot restore a member who has since been removed. The rest of the payload still applies. Omit it to accept the list unconditionally.","format":"date-time","type":"string"},"birthdate":{"type":"string"},"citizenship":{"enum":["us_or_green_card","non_us"],"type":"string"},"deposit_amount_cents":{"type":"integer"},"education_level":{"enum":["high_school","associate_degree","bachelor_degree","masters_degree","doctoral_degree"],"type":"string"},"email":{"type":"string"},"employment_status":{"enum":["full_time_student","employed","self_employed","unemployed","retired","corporation"],"type":"string"},"first_name":{"type":"string"},"guarantor_coverage":{"type":"boolean"},"has_ssn":{"type":"boolean"},"last_name":{"type":"string"},"lease_end_date":{"type":"string"},"lease_start_date":{"type":"string"},"monthly_rent_cents":{"type":"integer"},"phone":{"description":"10-digit North American (NANP) number in any common representation \u2014 E.164 (+13475550142), 11 digits with the country code (13475550142), or formatted ((347) 555-0142, 347-555-0142, 347.555.0142). Non-digits are stripped on receipt, then a leading 1 is dropped if a valid area code follows it, so the number is stored and returned as its bare 10 digits. Omit the field, or send null or an empty string, when there is no phone yet; any other value that does not reduce to 10 digits is rejected. No pattern is published because the accepted set is wider than a regex can express without rejecting input this endpoint accepts.","type":"string"},"pms_property_id":{"type":"string"},"pms_prospect_id":{"type":"string"},"pms_type":{"enum":["yardi","realpage","bilt"],"type":"string"},"pms_unit_id":{"type":"string"},"property":{"properties":{"active":{"type":"boolean"},"address":{"properties":{"city":{"type":"string"},"line_one":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"}},"required":["line_one","city","state","zip"],"type":"object"},"building_name":{"type":"string"},"external_system_id":{"type":"string"},"type":{"type":"string"}},"required":["external_system_id"],"type":"object"},"screening_result":{"enum":["approved","conditional","denied"],"type":"string"},"social_security_number":{"type":"string"},"source":{"type":"string"},"source_prospect_id":{"type":"string"},"terms_accepted_at":{"format":"date-time","type":"string"},"unit":{"properties":{"external_system_id":{"type":"string"},"name":{"type":"string"},"property_external_id":{"type":"string"}},"required":["external_system_id"],"type":["object","null"]},"yearly_income":{"type":"integer"}},"required":["source","source_prospect_id"],"type":"object"}},"required":["prospect"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"prospect":{"application_submitted":false,"birthdate":"1990-05-15","deposit_amount_cents":250000,"effective_coverage_amount_cents":250000,"email":"newprospect@example.com","employment_status":"employed","enrollment_url":null,"first_name":"John","guarantor_coverage":true,"has_ssn":true,"hosted_enrollment_url":null,"id":1,"last_name":"Doe","latest_coverage":null,"lease_end_date":"2026-01-31","lease_start_date":"2025-02-01","monthly_rent_cents":200000,"offered_products":[],"percent_savings":null,"phone":"5559876543","pms_property_id":"prop-123","pms_prospect_id":"prospect-789","pms_type":"yardi","pms_unit_id":"unit-456","property":{"external_system_id":"bilt-prop-123"},"rg_ineligibility_reasons":[],"screening_result":"approved","source":"vero","source_prospect_id":"rg-prospect-123","status":"processing","unit":{"external_system_id":"bilt-unit-456"},"yearly_income":75000},"status_code":200},"schema":{"properties":{"prospect":{"properties":{"application_submitted":{"type":"boolean"},"birthdate":{"type":["string","null"]},"deposit_amount_cents":{"type":["integer","null"]},"effective_coverage_amount_cents":{"type":["integer","null"]},"email":{"type":["string","null"]},"employment_status":{"enum":["full_time_student","employed","self_employed","unemployed","retired","corporation"],"type":["string","null"]},"enrollment_url":{"type":"null"},"first_name":{"type":"string"},"guarantor_coverage":{"type":"boolean"},"has_ssn":{"type":["boolean","null"]},"hosted_enrollment_url":{"type":"null"},"id":{"type":"integer"},"last_name":{"type":["string","null"]},"latest_coverage":{"type":"null"},"lease_end_date":{"type":["string","null"]},"lease_start_date":{"type":["string","null"]},"monthly_rent_cents":{"type":["integer","null"]},"offered_products":{"items":{"properties":{"cash_deposit_amount_cents":{"type":["integer","null"]},"enrollment_url":{"type":"null"},"monthly_enrollment_url":{"type":"null"},"monthly_premium_cents":{"type":["integer","null"]},"product_type":{"enum":["security_deposit_insurance","cash_deposit"],"type":"string"},"upfront_enrollment_url":{"type":"null"},"upfront_premium_cents":{"type":["integer","null"]}},"required":["product_type"],"type":"object"},"type":"array"},"percent_savings":{"format":"float","type":["number","null"]},"phone":{"description":"The bare 10 digits, whatever format was submitted.","type":["string","null"]},"pms_property_id":{"type":["string","null"]},"pms_prospect_id":{"type":["string","null"]},"pms_type":{"enum":["yardi","realpage","bilt"],"type":["string","null"]},"pms_unit_id":{"type":["string","null"]},"property":{"properties":{"external_system_id":{"type":"string"}},"required":["external_system_id"],"type":"object"},"rg_ineligibility_reasons":{"items":{},"type":"array"},"screening_result":{"enum":["approved","conditional","denied"],"type":["string","null"]},"source":{"type":"string"},"source_prospect_id":{"type":"string"},"status":{"enum":["incomplete","processing","ready","error"],"type":"string"},"unit":{"properties":{"external_system_id":{"type":"string"}},"required":["external_system_id"],"type":"object"},"yearly_income":{"type":["integer","null"]}},"required":["id","source","source_prospect_id","email","phone","first_name","last_name","lease_start_date","lease_end_date","screening_result","monthly_rent_cents","birthdate","employment_status","yearly_income","has_ssn","pms_prospect_id","deposit_amount_cents","effective_coverage_amount_cents","percent_savings","enrollment_url","hosted_enrollment_url","offered_products","status","application_submitted","latest_coverage"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","prospect"],"type":"object"}}},"description":"Submit prospect data for eligibility evaluation. If a prospect with the same source + source_prospect_id already exists for the property owner, it will be updated (upsert). Returns the prospect with current eligibility status and offered products.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"example":{"prospect":{"application_submitted":false,"birthdate":"1990-05-15","deposit_amount_cents":250000,"effective_coverage_amount_cents":250000,"email":"newprospect@example.com","employment_status":"employed","enrollment_url":null,"first_name":"John","guarantor_coverage":false,"has_ssn":true,"hosted_enrollment_url":null,"id":1,"last_name":"Doe","latest_coverage":null,"lease_end_date":"2026-01-31","lease_start_date":"2025-02-01","monthly_rent_cents":200000,"offered_products":[],"percent_savings":null,"phone":"5559876543","pms_property_id":"prop-123","pms_prospect_id":"prospect-789","pms_type":"yardi","pms_unit_id":"unit-456","property":{"external_system_id":"bilt-prop-123"},"rg_ineligibility_reasons":[],"screening_result":"approved","source":"vero","source_prospect_id":"new-prospect-123","status":"processing","unit":{"external_system_id":"bilt-unit-456"},"yearly_income":75000},"status_code":201},"schema":{"properties":{"prospect":{"properties":{"application_submitted":{"type":"boolean"},"birthdate":{"type":"string"},"deposit_amount_cents":{"type":"integer"},"effective_coverage_amount_cents":{"type":["integer","null"]},"email":{"type":"string"},"employment_status":{"enum":["full_time_student","employed","self_employed","unemployed","retired","corporation"],"type":"string"},"enrollment_url":{"type":"null"},"first_name":{"type":"string"},"guarantor_coverage":{"type":"boolean"},"has_ssn":{"type":"boolean"},"hosted_enrollment_url":{"type":"null"},"id":{"type":"integer"},"last_name":{"type":"string"},"latest_coverage":{"type":"null"},"lease_end_date":{"type":"string"},"lease_start_date":{"type":"string"},"monthly_rent_cents":{"type":"integer"},"offered_products":{"items":{},"type":"array"},"percent_savings":{"type":"null"},"phone":{"description":"The bare 10 digits, whatever format was submitted.","type":"string"},"pms_property_id":{"type":"string"},"pms_prospect_id":{"type":"string"},"pms_type":{"enum":["yardi","realpage","bilt"],"type":"string"},"pms_unit_id":{"type":"string"},"property":{"properties":{"external_system_id":{"type":"string"}},"required":["external_system_id"],"type":["object","null"]},"rg_ineligibility_reasons":{"items":{},"type":"array"},"screening_result":{"enum":["approved","conditional","denied"],"type":"string"},"source":{"type":"string"},"source_prospect_id":{"type":"string"},"status":{"enum":["incomplete","processing","ready","error"],"type":"string"},"unit":{"properties":{"external_system_id":{"type":"string"}},"required":["external_system_id"],"type":["object","null"]},"yearly_income":{"type":"integer"}},"required":["id","source","source_prospect_id","email","phone","first_name","last_name","lease_start_date","lease_end_date","screening_result","monthly_rent_cents","birthdate","employment_status","yearly_income","has_ssn","pms_prospect_id","deposit_amount_cents","effective_coverage_amount_cents","percent_savings","enrollment_url","hosted_enrollment_url","offered_products","status","application_submitted","latest_coverage"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","prospect"],"type":"object"}}},"description":"Submit prospect data for eligibility evaluation. If a prospect with the same source + source_prospect_id already exists for the property owner, it will be updated (upsert). Returns the prospect with current eligibility status and offered products.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Submit prospect data for eligibility evaluation. If a prospect with the same source + source_prospect_id already exists for the property owner, it will be updated (upsert). Returns the prospect with current eligibility status and offered products."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Submit prospect data for eligibility evaluation. If a prospect with the same source + source_prospect_id already exists for the property owner, it will be updated (upsert). Returns the prospect with current eligibility status and offered products.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Submit prospect data for eligibility evaluation. If a prospect with the same source + source_prospect_id already exists for the property owner, it will be updated (upsert). Returns the prospect with current eligibility status and offered products."},"422":{"content":{"application/json":{"example":{"error":"Prospect invalid.","property":{"address_city":["can't be blank"],"address_line_one":["can't be blank"],"address_state":["can't be blank","is not included in the list"],"address_zip":["can't be blank"],"base":["is not a building this partner has been granted"],"building_name":["can't be blank"],"external_system_id":["can't be blank"]},"prospect":{"enrollment_source":"Enrollment source must exist","pms_type":"cannot be sent alongside property or unit","pms_unit_id":"cannot be sent alongside property or unit","source":"Source is not included in the list","terms_accepted_at":"Terms accepted at can't be blank"},"status_code":422,"unit":{"external_system_id":["can't be blank"],"name":["can't be blank"],"property_external_id":["is not a building this partner has registered"]}},"schema":{"properties":{"error":{"type":"string"},"property":{"properties":{"address_city":{"items":{"type":"string"},"type":"array"},"address_line_one":{"items":{"type":"string"},"type":"array"},"address_state":{"items":{"type":"string"},"type":"array"},"address_zip":{"items":{"type":"string"},"type":"array"},"base":{"items":{"type":"string"},"type":"array"},"building_name":{"items":{"type":"string"},"type":"array"},"external_system_id":{"items":{"type":"string"},"type":"array"}},"type":"object"},"prospect":{"properties":{"enrollment_source":{"type":"string"},"pms_type":{"enum":["yardi","realpage","bilt"],"type":"string"},"pms_unit_id":{"type":"string"},"source":{"type":"string"},"terms_accepted_at":{"format":"date-time","type":"string"}},"type":"object"},"status_code":{"type":"integer"},"unit":{"properties":{"external_system_id":{"items":{"type":"string"},"type":"array"},"name":{"items":{"type":"string"},"type":"array"},"property_external_id":{"items":{"type":"string"},"type":"array"}},"type":"object"}},"required":["status_code","error"],"type":"object"}}},"description":"Submit prospect data for eligibility evaluation. If a prospect with the same source + source_prospect_id already exists for the property owner, it will be updated (upsert). Returns the prospect with current eligibility status and offered products.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Create or update a prospect","tags":["Prospects"]}},"/partners/{owner_slug}/prospects/{source}/{source_prospect_id}":{"get":{"parameters":[{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}},{"example":"vero","in":"path","name":"source","required":true,"schema":{"type":"string"}},{"example":"3pp-1","in":"path","name":"source_prospect_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"prospect":{"application_submitted":false,"birthdate":"1990-01-01","deposit_amount_cents":300000,"effective_coverage_amount_cents":300000,"email":"test1@example.com","employment_status":"employed","enrollment_url":"https://www.sayrhino.com/enrollment/expedited/hudson-residential-group/vero/3pp-1?email=test1%40example.com","first_name":"Robbie","guarantor_coverage":true,"has_ssn":true,"hosted_enrollment_url":"https://www.sayrhino.com/enrollment/expedited/hudson-residential-group/vero/3pp-1?email=test1%40example.com","id":1,"last_name":"Rhino","latest_coverage":{"cadence":"upfront","coverage_amount_cents":200000,"coverage_end_date":"2026-01-31","coverage_start_date":"2025-02-01","document_url":"https://www.sayrhino.com/policies/123/documents","product_payment_cents":15000,"type":"security_deposit_insurance"},"lease_end_date":"2018-02-03","lease_start_date":"2017-02-10","monthly_rent_cents":150000,"offered_products":[{"monthly_enrollment_url":null,"monthly_premium_cents":1000,"product_type":"security_deposit_insurance","upfront_enrollment_url":null,"upfront_premium_cents":10000},{"cash_deposit_amount_cents":100000,"enrollment_url":null,"product_type":"cash_deposit"}],"percent_savings":99.66666666666667,"phone":"5551234567","pms_property_id":"prop-123","pms_prospect_id":"prospect-789","pms_type":"yardi","pms_unit_id":"unit-456","rg_eligibility_status":"eligible","rg_ineligibility_reasons":[],"screening_result":"approved","source":"vero","source_prospect_id":"3pp-1","status":"processing","yearly_income":75000},"status_code":200},"schema":{"properties":{"prospect":{"properties":{"application_submitted":{"type":"boolean"},"birthdate":{"type":"string"},"deposit_amount_cents":{"type":"integer"},"effective_coverage_amount_cents":{"type":["integer","null"]},"email":{"type":"string"},"employment_status":{"enum":["full_time_student","employed","self_employed","unemployed","retired","corporation"],"type":"string"},"enrollment_url":{"type":["string","null"]},"first_name":{"type":"string"},"guarantor_coverage":{"type":"boolean"},"has_ssn":{"type":"boolean"},"hosted_enrollment_url":{"type":["string","null"]},"id":{"type":"integer"},"last_name":{"type":"string"},"latest_coverage":{"properties":{"cadence":{"type":"string"},"coverage_amount_cents":{"type":"integer"},"coverage_end_date":{"type":"string"},"coverage_start_date":{"type":"string"},"document_url":{"type":"string"},"product_payment_cents":{"type":"integer"},"type":{"type":"string"}},"required":["type","product_payment_cents","cadence","coverage_start_date","coverage_end_date","coverage_amount_cents","document_url"],"type":["object","null"]},"lease_end_date":{"type":"string"},"lease_start_date":{"type":"string"},"monthly_rent_cents":{"type":"integer"},"offered_products":{"items":{"properties":{"cash_deposit_amount_cents":{"type":["integer","null"]},"enrollment_url":{"type":"null"},"monthly_enrollment_url":{"type":"null"},"monthly_premium_cents":{"type":["integer","null"]},"product_type":{"enum":["security_deposit_insurance","cash_deposit"],"type":"string"},"upfront_enrollment_url":{"type":"null"},"upfront_premium_cents":{"type":["integer","null"]}},"required":["product_type"],"type":"object"},"type":"array"},"percent_savings":{"format":"float","type":["number","null"]},"phone":{"description":"The bare 10 digits, whatever format was submitted.","type":"string"},"pms_property_id":{"type":"string"},"pms_prospect_id":{"type":"string"},"pms_type":{"enum":["yardi","realpage","bilt"],"type":"string"},"pms_unit_id":{"type":"string"},"rg_eligibility_status":{"type":"string"},"rg_ineligibility_reasons":{"items":{},"type":"array"},"screening_result":{"enum":["approved","conditional","denied"],"type":"string"},"source":{"type":"string"},"source_prospect_id":{"type":"string"},"status":{"enum":["incomplete","processing","ready","error"],"type":"string"},"yearly_income":{"type":"integer"}},"required":["id","source","source_prospect_id","email","phone","first_name","last_name","lease_start_date","lease_end_date","screening_result","monthly_rent_cents","birthdate","employment_status","yearly_income","has_ssn","pms_type","pms_property_id","pms_unit_id","pms_prospect_id","deposit_amount_cents","effective_coverage_amount_cents","percent_savings","enrollment_url","hosted_enrollment_url","offered_products","status","application_submitted","latest_coverage"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","prospect"],"type":"object"}}},"description":"Fetch a prospect's current status, eligibility offers, and coverage details. Use this to check whether a prospect has been processed and what products are available.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Fetch a prospect's current status, eligibility offers, and coverage details. Use this to check whether a prospect has been processed and what products are available."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Fetch a prospect's current status, eligibility offers, and coverage details. Use this to check whether a prospect has been processed and what products are available.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Fetch a prospect's current status, eligibility offers, and coverage details. Use this to check whether a prospect has been processed and what products are available."}},"summary":"Get prospect by ID","tags":["Prospects"]}},"/partners/{owner_slug}/test/residents/{source}/{source_prospect_id}":{"delete":{"parameters":[{"example":"application/x-www-form-urlencoded","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}},{"example":"yardi","in":"path","name":"source","required":true,"schema":{"type":"string"}},{"example":"resident-123","in":"path","name":"source_prospect_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"reset":{"insurance_policy_ids":[1],"reprocessed_prospect_id":1,"unlinked_yardi_resident_ids":[1]},"status_code":200},"schema":{"properties":{"reset":{"properties":{"insurance_policy_ids":{"items":{"type":"integer"},"type":"array"},"reprocessed_prospect_id":{"type":"integer"},"unlinked_yardi_resident_ids":{"items":{"type":"integer"},"type":"array"}},"required":["insurance_policy_ids","unlinked_yardi_resident_ids","reprocessed_prospect_id"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","reset"],"type":"object"}}},"description":"runs the reset and returns success","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"returns unauthorized"},"404":{"content":{"application/json":{"example":{"error":"Resident not found.","status_code":404},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"returns not found"},"422":{"content":{"application/json":{"example":{"error":"RuntimeError: SayRhino teardown failed (500): {\"error\" => \"kaboom\"}","status_code":422},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"returns unprocessable entity with the error","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"destroy","tags":["PartnerApi::V2::Test::Resident"]}},"/partners/{owner_slug}/test/sayrhino_users":{"delete":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"reset":{"deleted_third_party_prospect_ids":[1],"insurance_policy_ids":[1],"reset_yardi_resident_ids":[],"third_party_prospect_ids":[1],"unlinked_yardi_resident_ids":[1]},"status_code":200},"schema":{"properties":{"reset":{"properties":{"deleted_third_party_prospect_ids":{"items":{"type":"integer"},"type":"array"},"insurance_policy_ids":{"items":{"type":"integer"},"type":"array"},"reset_yardi_resident_ids":{"items":{},"type":"array"},"third_party_prospect_ids":{"items":{"type":"integer"},"type":"array"},"unlinked_yardi_resident_ids":{"items":{"type":"integer"},"type":"array"}},"required":["insurance_policy_ids","third_party_prospect_ids","unlinked_yardi_resident_ids","deleted_third_party_prospect_ids"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","reset"],"type":"object"}}},"description":"runs the reset and returns success","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"returns unauthorized"},"404":{"description":"returns not found"},"422":{"content":{"application/json":{"example":{"error":"RuntimeError: SayRhino teardown failed (500): {\"error\" => \"kaboom\"}","status_code":422},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"returns unprocessable entity with the error","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"destroy","tags":["PartnerApi::V2::Test::SayrhinoUser"]}},"/partners/{owner_slug}/units":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"_json":[{"address":{"line_one":"1101 Midland Avenue APT 1"},"external_system_id":"bilt-unit-1","property_external_id":"bilt-prop-123"}]},"schema":{"properties":{"_json":{"items":{"properties":{"address":{"properties":{"city":{"type":"string"},"country":{"type":"string"},"line_one":{"type":"string"},"line_two":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"}},"required":["line_one"],"type":"object"},"default_coverage":{"properties":{"type":{"type":"string"},"value":{"format":"float","type":"integer"}},"required":["type","value"],"type":"object"},"external_system_id":{"type":"string"},"name":{"type":"string"},"pms_unit_id":{"type":"string"},"property_external_id":{"type":"string"}},"required":["property_external_id"],"type":"object"},"type":"array"}},"required":["_json"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"meta":{"created":1,"failed":0,"updated":0},"results":[{"action":"created","external_system_id":"bilt-unit-1"}],"status_code":200},"schema":{"properties":{"meta":{"properties":{"created":{"type":"integer"},"failed":{"type":"integer"},"updated":{"type":"integer"}},"required":["created","updated","failed"],"type":"object"},"results":{"items":{"properties":{"action":{"enum":["created","updated","failed"],"type":"string"},"errors":{"properties":{"base":{"items":{"type":"string"},"type":"array"},"default_coverage":{"items":{"type":"string"},"type":"array"},"external_system_id":{"items":{"type":"string"},"type":"array"},"name":{"items":{"type":"string"},"type":"array"},"policy_holder":{"items":{"type":"string"},"type":"array"},"policy_holder_id":{"items":{"type":"string"},"type":"array"},"property_external_id":{"items":{"type":"string"},"type":"array"}},"type":["object","null"]},"external_system_id":{"type":["string","null"]}},"required":["external_system_id","action"],"type":"object"},"type":"array"},"status_code":{"type":"integer"}},"required":["status_code","results","meta"],"type":"object"}}},"description":"Upsert a batch of units, keyed on the partner's own external_system_id and naming their building by the partner's own property_external_id. The body is a bare JSON array of at most 500 items; one bad item never fails the batch.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Upsert a batch of units, keyed on the partner's own external_system_id and naming their building by the partner's own property_external_id. The body is a bare JSON array of at most 500 items; one bad item never fails the batch."},"403":{"content":{"application/json":{"example":{"error":"Not granted access to this property owner.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Upsert a batch of units, keyed on the partner's own external_system_id and naming their building by the partner's own property_external_id. The body is a bare JSON array of at most 500 items; one bad item never fails the batch.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"422":{"content":{"application/json":{"example":{"error":"A request carries at most 500 items.","status_code":422},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Upsert a batch of units, keyed on the partner's own external_system_id and naming their building by the partner's own property_external_id. The body is a bare JSON array of at most 500 items; one bad item never fails the batch.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Create or update units","tags":["Roster"]}},"/partners/{owner_slug}/webhooks/endpoints":{"get":{"parameters":[{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"endpoints":[],"status_code":200},"schema":{"properties":{"endpoints":{"items":{"properties":{"created_at":{"format":"date-time","type":"string"},"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"status":{"type":"string"},"suspension_reason":{"type":"null"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","destination_url","status","events","suspension_reason","created_at","updated_at"],"type":"object"},"type":"array"},"status_code":{"type":"integer"}},"required":["status_code","endpoints"],"type":"object"}}},"description":"List all webhook endpoints configured for a property owner.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"List all webhook endpoints configured for a property owner."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"List all webhook endpoints configured for a property owner.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"List all webhook endpoints configured for a property owner."}},"summary":"List webhook endpoints","tags":["Webhooks"]},"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"endpoint":{"destination_url":"https://new-url.example.com/hook","events":["prospect.created"],"name":"New Endpoint"}},"schema":{"properties":{"endpoint":{"properties":{"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"}},"required":["destination_url","name","events"],"type":"object"}},"required":["endpoint"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"endpoint":{"created_at":"2017-02-03T04:05:06.000Z","destination_url":"https://new-url.example.com/hook","events":["prospect.created"],"id":1,"name":"New Endpoint","status":"active","suspension_reason":null,"updated_at":"2017-02-03T04:05:06.000Z"},"status_code":200},"schema":{"properties":{"endpoint":{"properties":{"created_at":{"format":"date-time","type":"string"},"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["active","suspended","disabled"],"type":"string"},"suspension_reason":{"type":"null"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","destination_url","status","events","suspension_reason","created_at","updated_at"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","endpoint"],"type":"object"}}},"description":"Register a new webhook endpoint to receive event notifications. The destination URL must use HTTPS.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Register a new webhook endpoint to receive event notifications. The destination URL must use HTTPS."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Register a new webhook endpoint to receive event notifications. The destination URL must use HTTPS.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"422":{"content":{"application/json":{"example":{"endpoint":{"destination_url":"Destination url must use HTTPS"},"error":"Invalid endpoint params.","status_code":422},"schema":{"properties":{"endpoint":{"properties":{"destination_url":{"type":"string"}},"required":["destination_url"],"type":"object"},"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error","endpoint"],"type":"object"}}},"description":"Register a new webhook endpoint to receive event notifications. The destination URL must use HTTPS.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Create a webhook endpoint","tags":["Webhooks"]}},"/partners/{owner_slug}/webhooks/endpoints/{endpoint_id}/deliveries":{"get":{"parameters":[{"example":1,"in":"path","name":"endpoint_id","required":true,"schema":{"type":"integer"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}},{"example":1,"in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"example":1,"in":"query","name":"per_page","required":false,"schema":{"type":"integer"}},{"example":"retrying","in":"query","name":"status","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"deliveries":[],"meta":{"page":1,"per_page":50,"total_count":0,"total_pages":1},"status_code":200},"schema":{"properties":{"deliveries":{"items":{"properties":{"attempt_number":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"delivered_at":{"format":"date-time","type":["string","null"]},"duration_ms":{"type":"null"},"endpoint_id":{"type":"integer"},"id":{"type":"integer"},"last_attempt_failure_reason":{"type":"null"},"last_attempted_at":{"format":"date-time","type":["string","null"]},"next_retry_at":{"format":"date-time","type":["string","null"]},"payload":{"properties":{"data":{"properties":{"insurance_policy_id":{"type":"integer"}},"required":["insurance_policy_id"],"type":"object"},"event":{"type":"string"}},"required":["data","event"],"type":"object"},"status":{"enum":["pending","delivering","delivered","retrying","rate_limited","failed"],"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","endpoint_id","status","attempt_number","payload","last_attempted_at","delivered_at","next_retry_at","last_attempt_failure_reason","duration_ms","created_at","updated_at"],"type":"object"},"type":"array"},"meta":{"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total_count":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_count","total_pages"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","deliveries","meta"],"type":"object"}}},"description":"List webhook delivery attempts for a specific endpoint. Supports filtering by status and pagination.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"List webhook delivery attempts for a specific endpoint. Supports filtering by status and pagination."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"List webhook delivery attempts for a specific endpoint. Supports filtering by status and pagination.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"List webhook delivery attempts for a specific endpoint. Supports filtering by status and pagination."}},"summary":"List deliveries for an endpoint","tags":["Webhooks"]}},"/partners/{owner_slug}/webhooks/endpoints/{endpoint_id}/deliveries/{id}":{"get":{"parameters":[{"example":1,"in":"path","name":"endpoint_id","required":true,"schema":{"type":"integer"}},{"example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"delivery":{"attempt_number":3,"created_at":"2017-02-03T04:05:06.000Z","delivered_at":null,"duration_ms":null,"endpoint_id":1,"id":1,"last_attempt_failure_reason":null,"last_attempted_at":null,"next_retry_at":null,"payload":{"data":{"insurance_policy_id":1},"event":"policy.created"},"status":"failed","updated_at":"2017-02-03T04:05:06.000Z"},"status_code":200},"schema":{"properties":{"delivery":{"properties":{"attempt_number":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"delivered_at":{"format":"date-time","type":["string","null"]},"duration_ms":{"type":"null"},"endpoint_id":{"type":"integer"},"id":{"type":"integer"},"last_attempt_failure_reason":{"type":"null"},"last_attempted_at":{"format":"date-time","type":["string","null"]},"next_retry_at":{"format":"date-time","type":["string","null"]},"payload":{"properties":{"data":{"properties":{"insurance_policy_id":{"type":"integer"}},"required":["insurance_policy_id"],"type":"object"},"event":{"type":"string"}},"required":["data","event"],"type":"object"},"status":{"enum":["pending","delivering","delivered","retrying","rate_limited","failed"],"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","endpoint_id","status","attempt_number","payload","last_attempted_at","delivered_at","next_retry_at","last_attempt_failure_reason","duration_ms","created_at","updated_at"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","delivery"],"type":"object"}}},"description":"Fetch details of a single webhook delivery attempt including payload, status, and retry information.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Fetch details of a single webhook delivery attempt including payload, status, and retry information."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Fetch details of a single webhook delivery attempt including payload, status, and retry information.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Fetch details of a single webhook delivery attempt including payload, status, and retry information."}},"summary":"Get a specific delivery","tags":["Webhooks"]}},"/partners/{owner_slug}/webhooks/endpoints/{endpoint_id}/deliveries/{id}/retry":{"post":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":1,"in":"path","name":"endpoint_id","required":true,"schema":{"type":"integer"}},{"example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{},"schema":{"properties":{},"type":"object"}}}},"responses":{"204":{"description":"Re-enqueue a failed webhook delivery for another attempt."},"401":{"description":"Re-enqueue a failed webhook delivery for another attempt."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Re-enqueue a failed webhook delivery for another attempt.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Re-enqueue a failed webhook delivery for another attempt."}},"summary":"Retry a failed delivery","tags":["Webhooks"]}},"/partners/{owner_slug}/webhooks/endpoints/{id}":{"delete":{"parameters":[{"example":"application/x-www-form-urlencoded","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Permanently remove a webhook endpoint. All pending deliveries will be cancelled."},"401":{"description":"Permanently remove a webhook endpoint. All pending deliveries will be cancelled."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Permanently remove a webhook endpoint. All pending deliveries will be cancelled.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Permanently remove a webhook endpoint. All pending deliveries will be cancelled."}},"summary":"Delete a webhook endpoint","tags":["Webhooks"]},"put":{"parameters":[{"example":"application/json","in":"header","name":"Content-Type","required":true,"schema":{"type":"string"}},{"example":1,"in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"example":"hudson-residential-group","in":"path","name":"owner_slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"endpoint":{"destination_url":"https://new-url.example.com/hook","events":["prospect.created","prospect.updated"],"status":"suspended"}},"schema":{"properties":{"endpoint":{"properties":{"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"status":{"enum":["active","suspended","disabled"],"type":"string"}},"type":"object"}},"required":["endpoint"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"example":{"endpoint":{"created_at":"2017-02-03T04:05:06.000Z","destination_url":"https://example.com/webhooks/foo/bar","events":["prospect.created","prospect.ready","prospect.incomplete","policy.created","policy.updated","policy.canceled","policy.expired","policy.documents_updated","policy_application.created","policy_application.quoted","policy_application.declined","policy_application.submitted","delinquency.created","delinquency.resolved","move_out.initiated"],"id":1,"name":"Test endpoint","status":"suspended","suspension_reason":null,"updated_at":"2017-02-03T04:05:06.000Z"},"status_code":200},"schema":{"properties":{"endpoint":{"properties":{"created_at":{"format":"date-time","type":"string"},"destination_url":{"type":"string"},"events":{"items":{"type":"string"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["active","suspended","disabled"],"type":"string"},"suspension_reason":{"type":"null"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","destination_url","status","events","suspension_reason","created_at","updated_at"],"type":"object"},"status_code":{"type":"integer"}},"required":["status_code","endpoint"],"type":"object"}}},"description":"Update an existing webhook endpoint's destination URL, status, or subscribed events.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Update an existing webhook endpoint's destination URL, status, or subscribed events."},"403":{"content":{"application/json":{"example":{"error":"Not authorized to call the partner onboarding API.","status_code":403},"schema":{"properties":{"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error"],"type":"object"}}},"description":"Update an existing webhook endpoint's destination URL, status, or subscribed events.","headers":{"Content-Type":{"schema":{"type":"string"}}}},"404":{"description":"Update an existing webhook endpoint's destination URL, status, or subscribed events."},"422":{"content":{"application/json":{"example":{"endpoint":{"destination_url":"Destination url must use HTTPS","status":"Status is invalid"},"error":"Endpoint invalid.","status_code":422},"schema":{"properties":{"endpoint":{"properties":{"destination_url":{"type":"string"},"status":{"enum":["active","suspended","disabled"],"type":"string"}},"type":"object"},"error":{"type":"string"},"status_code":{"type":"integer"}},"required":["status_code","error","endpoint"],"type":"object"}}},"description":"Update an existing webhook endpoint's destination URL, status, or subscribed events.","headers":{"Content-Type":{"schema":{"type":"string"}}}}},"summary":"Update a webhook endpoint","tags":["Webhooks"]}},"/token":{"post":{"description":"Obtain a JWT via OAuth2 client_credentials grant.","requestBody":{"content":{"application/json":{"schema":{"properties":{"audience":{"description":"API identifier provided during onboarding","type":"string"},"client_id":{"type":"string"},"client_secret":{"type":"string"},"grant_type":{"enum":["client_credentials"],"type":"string"}},"required":["client_id","client_secret","grant_type","audience"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"access_token":{"type":"string"},"expires_in":{"description":"Token lifetime in seconds","type":"integer"},"scope":{"type":"string"},"token_type":{"enum":["Bearer"],"type":"string"}},"type":"object"}}},"description":"Token issued"},"401":{"description":"Invalid credentials"}},"security":[],"summary":"Request an access token","tags":["Authentication"]}}},"security":[{"bearerAuth":[]}],"tags":[{"name":"Authentication"},{"name":"Property owners"},{"name":"Webhooks"},{"name":"Bank accounts"},{"name":"Policies"},{"name":"Move Outs"},{"name":"Roster"},{"name":"Prospects"},{"name":"PartnerApi::V2::Test::Resident"},{"name":"PartnerApi::V2::Test::SayrhinoUser"}]}
