{"openapi":"3.1.0","info":{"title":"Westland ExpressTrack","description":"Create tracked Westland handoffs and report browser-observed progress. No Westland API, card access, binding authority, or provider verification is provided. Read /connector-instructions before using. Customer identifiers, application answers and payment credentials must never be sent to this API.","version":"0.2.0"},"servers":[{"url":"https://westlandexpresstrack.ca"}],"paths":{"/connector-instructions":{"get":{"tags":["Guide"],"summary":"Instructions","operationId":"read_connector_instructions","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v1/journeys":{"post":{"tags":["Journey"],"summary":"Create Journey","description":"Create a tracked handoff after consent. This does not generate a quote or buy insurance. Preserve the returned journey_token privately and use it for every observation and status call. Reuse Idempotency-Key only when retrying the same request.","operationId":"start_tenant_insurance_journey","security":[{"ConnectorAPIKey":[]}],"parameters":[{"name":"idempotency-key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$","title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JourneyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JourneyCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/journeys/{journey_id}":{"get":{"tags":["Journey"],"summary":"Get Journey","description":"Read only this journey using its private capability. Observed payment or issuance is not independent provider verification.","operationId":"get_tenant_insurance_progress","security":[{"ConnectorAPIKey":[],"JourneyCapability":[]}],"parameters":[{"name":"journey_id","in":"path","required":true,"schema":{"type":"string","title":"Journey Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JourneyStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/journeys/{journey_id}/observations":{"post":{"tags":["Journey"],"summary":"Report Observation","description":"Report an event ONLY after observing its matching evidence in the customer's current authorized Westland browser session. Never send raw page text, names, addresses, card data, passwords or screenshots. Read the connector guide for stage detection. The service always labels these events agent_reported; callers cannot claim provider verification.","operationId":"report_tenant_insurance_browser_observation","security":[{"ConnectorAPIKey":[],"JourneyCapability":[]}],"parameters":[{"name":"journey_id","in":"path","required":true,"schema":{"type":"string","title":"Journey Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Observation"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObservationResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"EventType":{"type":"string","enum":["stage_viewed","stage_completed","validation_failed","quote_ready","checkout_started","payment_succeeded","payment_failed","policy_issued","broker_referral_required","user_handoff","tracking_lost","user_cancelled"],"title":"EventType"},"EventView":{"properties":{"event_id":{"type":"string","title":"Event Id"},"type":{"type":"string","title":"Type"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"source":{"type":"string","enum":["expresstrack","agent_reported","simulated"],"title":"Source"},"evidence":{"type":"string","title":"Evidence"},"occurred_at":{"type":"string","title":"Occurred At"},"received_at":{"type":"string","title":"Received At"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"}},"additionalProperties":false,"type":"object","required":["event_id","type","stage","source","evidence","occurred_at","received_at","error_code"],"title":"EventView"},"Evidence":{"type":"string","enum":["active_step_visible","next_step_visible","validation_message_visible","quote_summary_visible","checkout_visible","payment_success_visible","payment_failure_visible","issued_policy_visible","referral_message_visible","user_statement","observation_unavailable"],"title":"Evidence"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JourneyCreate":{"properties":{"product":{"type":"string","const":"tenant_insurance","title":"Product","default":"tenant_insurance"},"language":{"type":"string","const":"en","title":"Language","default":"en"},"mode":{"type":"string","enum":["assisted","handoff"],"title":"Mode","default":"assisted"},"campaign":{"type":"string","enum":["muse","direct","pilot"],"title":"Campaign","default":"muse"},"analytics_consent":{"type":"boolean","const":true,"title":"Analytics Consent","description":"The customer has agreed to anonymous journey progress being recorded by ExpressTrack."}},"additionalProperties":false,"type":"object","required":["analytics_consent"],"title":"JourneyCreate"},"JourneyCreated":{"properties":{"journey":{"$ref":"#/components/schemas/JourneyStatus"},"journey_token":{"type":"string","title":"Journey Token","description":"Private capability. Store in the assistant's secure tool context; do not put it in customer links or browser storage."},"handoff_url":{"type":"string","title":"Handoff Url"},"observation_url":{"type":"string","title":"Observation Url"},"instructions_url":{"type":"string","title":"Instructions Url"},"token_expires_at":{"type":"string","title":"Token Expires At"},"referral_attribution":{"type":"string","enum":["configured_unverified","not_configured"],"title":"Referral Attribution"},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"}},"additionalProperties":false,"type":"object","required":["journey","journey_token","handoff_url","observation_url","instructions_url","token_expires_at","referral_attribution"],"title":"JourneyCreated"},"JourneyStatus":{"properties":{"id":{"type":"string","title":"Id"},"created_at":{"type":"string","title":"Created At"},"last_activity_at":{"type":"string","title":"Last Activity At"},"mode":{"type":"string","title":"Mode"},"campaign":{"type":"string","title":"Campaign"},"demo":{"type":"boolean","title":"Demo"},"state":{"type":"string","title":"State"},"latest_observed_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Observed Stage"},"highest_observed_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Highest Observed Stage"},"observation_source":{"type":"string","title":"Observation Source"},"payment_status":{"type":"string","title":"Payment Status"},"policy_status":{"type":"string","title":"Policy Status"},"provider_verified":{"type":"boolean","const":false,"title":"Provider Verified","default":false},"visibility":{"type":"string","title":"Visibility"},"inactive":{"type":"boolean","title":"Inactive"},"inactivity_hours":{"type":"integer","title":"Inactivity Hours"},"resume_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume Url"},"next_action":{"type":"string","title":"Next Action"},"events":{"items":{"$ref":"#/components/schemas/EventView"},"type":"array","title":"Events"}},"additionalProperties":false,"type":"object","required":["id","created_at","last_activity_at","mode","campaign","demo","state","latest_observed_stage","highest_observed_stage","observation_source","payment_status","policy_status","visibility","inactive","inactivity_hours","resume_url","next_action","events"],"title":"JourneyStatus"},"Observation":{"properties":{"event_id":{"type":"string","maxLength":80,"minLength":8,"pattern":"^[a-zA-Z0-9_-]+$","title":"Event Id"},"type":{"$ref":"#/components/schemas/EventType"},"stage":{"anyOf":[{"$ref":"#/components/schemas/Stage"},{"type":"null"}]},"evidence":{"$ref":"#/components/schemas/Evidence"},"observed_at":{"type":"string","format":"date-time","title":"Observed At"},"error_code":{"anyOf":[{"type":"string","enum":["required_field","invalid_value","payment_declined","site_unavailable","session_expired","unsupported_applicant","other"]},{"type":"null"}],"title":"Error Code"}},"additionalProperties":false,"type":"object","required":["event_id","type","evidence","observed_at"],"title":"Observation"},"ObservationResult":{"properties":{"accepted":{"type":"boolean","title":"Accepted"},"duplicate":{"type":"boolean","title":"Duplicate"},"journey":{"$ref":"#/components/schemas/JourneyStatus"}},"additionalProperties":false,"type":"object","required":["accepted","duplicate","journey"],"title":"ObservationResult"},"Stage":{"type":"string","enum":["name","address","package","coverage","quote_review","checkout","confirmation"],"title":"Stage"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ConnectorAPIKey":{"type":"apiKey","in":"header","name":"X-API-Key"},"JourneyCapability":{"type":"apiKey","in":"header","name":"X-Journey-Token"}}}}