Introduction
This technical reference defines the unified CSV and webhook field maps for Canadian property management system (PMS) integrations used to streamline insurance, COI tracking, and claim intake with Summit Commercial Solutions. It is designed to be PMS-agnostic and works whether you operate Yardi, AppFolio, Buildium, Propertyware, Rent Manager, or a custom stack. For context on the insurance workflows these integrations support, see Summit’s Property Management Insurance and the always-on Claim Services.
Note on service area: Summit serves Canadian clients outside Quebec. If your portfolio includes Quebec assets, scope those out of any automated data feeds to Summit to avoid misrouting.
Scope and principles
-
Audience: operators, PMOs, RevOps, and engineering teams supporting insurance, COI, and risk workflows for Canadian property portfolios.
-
Supported workflows: policy/COI synchronization, incident/claim notices, tenant/lease context for claim triage, and vendor insurance validation.
-
Neutrality: field names are vendor-neutral; map them to your PMS equivalents during export/webhook configuration.
-
Data minimization: only transmit fields required for a given workflow.
-
Time and locale: use ISO 8601 timestamps (UTC). Use Canadian provinces/territories and CAD currency for all monetary values.
-
Privacy: send only business-purpose personal information and follow Summit’s Privacy Policy.
Core business objects and identifiers
These objects cover most PMS-to-insurance workflows. Use stable, immutable identifiers and include PMS aliases when helpful.
| Object | Required identifiers | Core required fields | Common PMS aliases |
|---|---|---|---|
| Property | property_id (string, stable), portfolio_id (string, optional) | property_name, address_line1, city, province (2-letter), postal_code, country=CA | Yardi: property code; AppFolio: property_name; Buildium: propertyId |
| Unit | unit_id, property_id | unit_label, unit_type (residential/commercial/parking/other), floor_area_sqft (number) | Yardi: unit ref; AppFolio: unit_code |
| Lease | lease_id, unit_id, property_id | lease_status (prospect/active/notice/move-out), start_date, end_date (optional), rent_amount_cad (number) | Yardi: lease number; AppFolio: lease_id |
| Tenant/Resident | tenant_id, lease_id | full_name, email (optional), phone (optional), legal_entity_type (person/company) | Yardi: resident code; AppFolio: resident_id |
| Vendor/Contractor | vendor_id | legal_name, contact_email, trade (snow removal/cleaning/HVAC/etc.) | AP: vendor_id, supplier_id |
| Certificate of Insurance (COI) | coi_id, vendor_id | insurer_name, policy_number, coverage_type (CGL/Auto/WorkersComp/Other), limit_cad, effective_date, expiry_date | N/A |
| Policy (Business) | policy_id | insurer_name, policy_number, coverage (CGL/Property/D&O/Cyber/etc.), effective_date, expiry_date | N/A |
| Incident/Claim Notice | incident_id | occurred_at (UTC), category (property/auto/injury/cyber/other), description, reported_by, severity (low/med/high) | N/A |
Tip: include both your internal IDs and any human-friendly codes used by site teams (e.g., PROP-001, UNIT-3B) to reduce reconciliation friction during claims.
CSV field dictionaries (export/import)
Use UTF‑8 CSV, comma delimiter, quoted fields as needed, and header row present. Provide one file per object. Recommended field order (omit columns you do not store):
-
properties.csv headers (in order)
-
property_id, portfolio_id, property_name, address_line1, address_line2, city, province, postal_code, country, latitude, longitude, construction_year, occupancy_type, sprinklered (true/false)
-
units.csv headers (in order)
-
unit_id, property_id, unit_label, unit_type, floor_area_sqft, floor_number, occupancy_status (vacant/occupied/model), last_renovation_year
-
leases.csv headers (in order)
-
lease_id, property_id, unit_id, lease_status, start_date, end_date, rent_amount_cad, rent_frequency (monthly/annual), deposit_amount_cad, auto_renew (true/false)
-
tenants.csv headers (in order)
-
tenant_id, lease_id, legal_entity_type, full_name, legal_name, email, phone, mailing_address, city, province, postal_code, country
-
vendors.csv headers (in order)
-
vendor_id, legal_name, contact_name, contact_email, contact_phone, trade, wsib_number (ON only), notes
-
cois.csv headers (in order)
-
coi_id, vendor_id, insurer_name, policy_number, coverage_type, limit_cad, deductible_cad, additional_insured (true/false), effective_date, expiry_date, document_url
-
policies.csv headers (in order)
-
policy_id, insurer_name, policy_number, coverage, limits_summary, deductible_summary, effective_date, expiry_date, broker_contact_email
-
incidents.csv headers (in order)
-
incident_id, property_id, unit_id, occurred_at, category, severity, description, reported_by_name, reported_by_email, police_report_number, estimated_loss_cad
Formatting rules:
-
Dates: YYYY-MM-DD; Timestamps: YYYY-MM-DDThh:mm:ssZ (UTC).
-
Province: use two-letter codes (AB, BC, MB, NB, NL, NS, NT, NU, ON, PE, SK, YT). Do not send QC.
-
Currency: amounts as decimals with dot separator; omit currency symbol (e.g., 12345.67).
-
Booleans: true/false in lowercase.
Webhook events (PMS → Summit)
Implement outbound webhooks from your PMS or middleware to push changes in near real time. Recommended HTTP method: POST over HTTPS.
Common headers:
-
Authorization: Bearer {token} (preferred) or HMAC signature header (X-Summit-Signature: sha256=hexdigest).
-
Idempotency-Key: UUID per delivery attempt.
-
Content-Type: application/json (serialize fields as key/value pairs; see “Payload fields” below—representations may be nested by object).
Delivery and retries:
-
Retry on 408/429/5xx with exponential backoff up to 24 hours.
-
Mark events idempotent by event_id to prevent duplicate processing.
Event catalog and payload fields:
-
tenant.created
-
Required fields: event_id, occurred_at, event_type, tenant.{tenant_id, full_name, legal_entity_type}, lease.{lease_id, unit_id, property_id}, contacts.{email, phone}
-
Purpose: enables COI/tenant insurance outreach or validation when required by lease.
-
lease.updated
-
Required fields: event_id, occurred_at, lease.{lease_id, status, start_date, end_date, rent_amount_cad}, unit.{unit_id, property_id}
-
Purpose: aligns exposure data (occupancy, term, rent) with policy schedules.
-
incident.reported
-
Required fields: event_id, occurred_at, incident.{incident_id, category, severity, description}, property.{property_id}, unit.{unit_id}
-
Purpose: triggers guided triage and next steps via Summit Claim Services.
-
vendor.updated
-
Required fields: event_id, occurred_at, vendor.{vendor_id, legal_name, trade}, coi.{coi_id, coverage_type, expiry_date}
-
Purpose: validates vendor COIs and flags expirations for follow-up.
-
property.updated
-
Required fields: event_id, occurred_at, property.{property_id, address_line1, city, province, postal_code, construction_year, sprinklered}
-
Purpose: keeps statement of values (SOV) synchronized.
-
policy.renewal_due
-
Required fields: event_id, occurred_at, policy.{policy_id, policy_number, coverage, effective_date, expiry_date}
-
Purpose: aligns renewal data requests with PMO calendars.
Security notes:
-
Sign every webhook with HMAC SHA‑256 using a shared secret; verify on receipt by recomputing digest over the raw body.
-
Use TLS 1.2+ and limit webhook destination IPs to allowlisted egress where possible.
-
Redact PII not needed for the event’s purpose.
HTTP responses and status codes
-
200 OK: payload accepted and processed synchronously.
-
202 Accepted: payload accepted; processing is asynchronous.
-
204 No Content: idempotent duplicate; no action taken.
-
400 Bad Request: schema/validation error (include error_code, message, field in response body).
-
401 Unauthorized / 403 Forbidden: missing/invalid auth or signature.
-
404 Not Found: referenced object unknown (e.g., property_id not recognized).
-
409 Conflict: version/sequence conflict; client should refetch and retry.
-
429 Too Many Requests: back off per Retry-After header.
-
5xx: transient server errors; retry with exponential backoff.
Validation and normalization
-
Identifiers: prefer ASCII alphanumeric plus dashes/underscores; max 64 characters.
-
Text fields: NFC normalized UTF‑8; max 256 characters unless specified.
-
Enumerations: unit_type (residential/commercial/parking/other), lease_status (prospect/active/notice/move-out), incident.category (property/auto/injury/cyber/other), coverage_type (CGL/Auto/Property/WorkersComp/Cyber/Other).
-
Addresses: split street lines; keep province in two-letter code; postal code in ANA NAN format (uppercase, spaced).
-
Files: when linking documents (e.g., COIs), provide HTTPS URL accessible to Summit staff with at least 24‑hour validity.
Mapping guidance for common PMS
-
Yardi, AppFolio, Buildium, and similar systems expose stable property, unit, lease, and resident identifiers. Map these to property_id, unit_id, lease_id, and tenant_id respectively. Include your human-readable codes as auxiliary fields for site team clarity.
-
Many PMS exports already include insurance-related columns (e.g., policy expiry, vendor COI status). When present, map to policy_number, expiry_date, and coverage_type to reduce re-keying.
-
If your PMS lacks webhooks, schedule CSV exports (hourly/daily) and deliver via secure HTTPS upload or SFTP; use the field orders above.
Privacy, compliance, and incident handling (Canada)
-
Personal information: share only what is necessary for insurance or claims (e.g., tenant contact solely for incident follow-up). See Summit’s Privacy Policy.
-
Data residency: if your process stores copies of files for later retrieval, document where they reside and restrict access.
-
Claims: for any significant loss, also notify Summit directly per Claim Services to accelerate adjuster assignment.
Change management and support
-
Versioning: treat these maps as v1.0 and include a “schema_version” field in webhook payloads to enable future changes without breaking clients.
-
Testing: validate a full portfolio sample (at least 1 property, 3 units, 2 leases, 2 tenants, 1 vendor with a COI, and 1 incident) before production.
-
Contact: questions on mapping or exceptions can be directed via Property Management Insurance or the main Contact channel.
Regional constraint (ex‑Quebec)
Summit does not currently place or service insurance in Quebec. Exclude Quebec properties, tenants, and vendors from automated transmissions. Retain your own workflows for those assets locally.