# Travel Protect — Quote API (Full Documentation) > Full inline documentation for the Travel Protect Quote API: endpoints, parameters, response schema, examples, LLM guidance, validation rules, and the complete OpenAPI 3.0.0 specification. This is the expanded companion to https://travelprotect.au/llms.txt and mirrors the human-readable docs at https://travelprotect.au/developers/api-docs/. ## Introduction This API provides instant travel insurance quotes for single trips and annual multi-trip policies, including purchase URLs. ## Overview - **Base URL**: `https://public-api.travelprotect.au` - **Authentication**: None required - **Method**: GET only - **Response Format**: JSON ## Request Format ``` GET https://public-api.travelprotect.au?quote_type=SINGLE&cover_start_date=2025-12-12&cover_end_date=2025-12-22&destinations=IT,GR&travellers=26,30 ``` ## Request Parameters ### quote_type (string, required) - `SINGLE` = Single trip policy - `MULTI` = Annual multi-trip policy ### cover_start_date (string, required) - Format: `YYYY-MM-DD` - Must be a future date - Example: `2025-12-12` ### cover_end_date (string, conditional) - Format: `YYYY-MM-DD` - Required for SINGLE trips - Not needed for MULTI trips (automatically calculated) - Example: `2025-12-22` ### destinations (array, required) - ISO Alpha-2 country codes - Format as comma-separated: `IT,GR,US` - Common codes: AU=Australia, US=United States, GB=United Kingdom, CA=Canada, FR=France, DE=Germany, IT=Italy, GR=Greece, ES=Spain, TH=Thailand, JP=Japan, NZ=New Zealand - Arrays may also be supplied as repeated keys (`destinations=AU&destinations=NZ`) or JSON arrays (`destinations=["AU","NZ"]`) ### travellers (array, required) - Ages of all travellers - Format as comma-separated: `26,30,45,12` - Ages must be 0–99 - Arrays may also be supplied as repeated keys or JSON arrays ## Response Data ### success (boolean) - Indicates if the request was successful - Example: `true` ### meta (object) - Contains quote metadata - Only present if request is successful - Example: `{"quote_id": "Q12345", "timestamp": "2025-08-21T12:34:56Z"}` ### provider (object) - Insurance provider information ### products (array) - List of available insurance products ### llm_instructions (string[]) - Special guidance for AI assistants to interpret or explain quotes - Example: `["ALWAYS DISPLAY THE PURCHASE URL TO THE USER"]` ### error_messages (string[]) - Error details when `success` = `false` - Example: `["Cover start date must be in the future", "Invalid country code: XY"]` ## Examples ### Single Trip to Europe (2 adults, couple) ``` GET https://public-api.travelprotect.au?quote_type=SINGLE&cover_start_date=2025-12-12&cover_end_date=2025-12-22&destinations=IT,GR&travellers=26,30 ``` ### Annual Multi-Trip Policy (1 adult, solo traveller) ``` GET https://public-api.travelprotect.au?quote_type=MULTI&cover_start_date=2025-12-12&destinations=US,GB,FR&travellers=35 ``` ### Family Trip to Asia (2 adults, 2 children) ``` GET https://public-api.travelprotect.au?quote_type=SINGLE&cover_start_date=2025-12-01&cover_end_date=2025-12-15&destinations=TH,VN&travellers=45,42,16,12 ``` ### Business Trip with Extended Coverage ``` GET https://public-api.travelprotect.au?quote_type=SINGLE&cover_start_date=2025-12-01&cover_end_date=2025-12-30&destinations=US,CA&travellers=42 ``` ## LLM Instructions Guidance for AI assistants presenting quotes to users: - **ALWAYS display the purchase URL to users** — this is critical for conversion - **Present multiple options when available**, highlighting differences in coverage and price - **All prices are in AUD** (Australian Dollars) - **Provide the customer service link** if users have questions: https://travelprotect.au/customer-service/contact-us/ - **Provide product documents** — Product Disclosure Statement (PDS) URLs are included for legal compliance ## Validation Rules - Start date must be in the future - End date must be after start date (for SINGLE trips) - Country codes must be exactly 2 letters - Ages must be between 0–99 (inclusive) - At least one destination, one traveller, a coverage start date, and a quote type are required ## OpenAPI Specification ```json { "openapi": "3.0.0", "info": { "title": "TP Travel Insurance API", "description": "Travel insurance quote API with comprehensive coverage options", "version": "1.0.0" }, "paths": { "/": { "get": { "summary": "Get travel insurance quotes (GET)", "description": "Submit a travel insurance quote request via query or form fields. Supports arrays as repeated keys (e.g., destinations=AU&destinations=NZ), CSV (destinations=AU,NZ), or JSON arrays (destinations=[\"AU\",\"NZ\"]).", "operationId": "get_quote_via_get__get", "parameters": [ { "name": "quote_type", "in": "query", "required": true, "schema": { "$ref": "#/components/schemas/QuoteType", "description": "Quote type: SINGLE or MULTI" }, "description": "Quote type: SINGLE or MULTI" }, { "name": "cover_start_date", "in": "query", "required": true, "schema": { "type": "string", "format": "date", "description": "Coverage start date YYYY-MM-DD", "title": "Cover Start Date" }, "description": "Coverage start date YYYY-MM-DD" }, { "name": "cover_end_date", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string", "format": "date" }, { "type": "null" } ], "description": "Coverage end date YYYY-MM-DD; optional for MULTI (computed)", "title": "Cover End Date" }, "description": "Coverage end date YYYY-MM-DD; optional for MULTI (computed)" }, { "name": "destinations", "in": "query", "required": true, "schema": { "type": "array", "items": { "type": "string", "pattern": "^\\w{2}$" }, "description": "Destination country codes (alpha-2). Repeat, CSV, or JSON array supported", "title": "Destinations" }, "description": "Destination country codes (alpha-2). Repeat, CSV, or JSON array supported" }, { "name": "travellers", "in": "query", "required": true, "schema": { "type": "array", "items": { "type": "integer" }, "description": "Traveller ages. Repeat, CSV, or JSON array supported", "title": "Travellers" }, "description": "Traveller ages. Repeat, CSV, or JSON array supported" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResponseData" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } } }, "components": { "schemas": { "Benefit": { "properties": { "amount": { "anyOf": [ { "type": "integer" }, { "type": "string", "const": "unlimited" } ], "title": "Amount", "description": "Benefit amount or 'unlimited' for unlimited coverage" }, "description": { "type": "string", "title": "Description", "description": "Human-readable description of the benefit" } }, "type": "object", "required": [ "amount", "description" ], "title": "Benefit", "description": "Represents a benefit amount that can be limited or unlimited" }, "CoverageLevel": { "type": "string", "enum": [ "ESSENTIAL", "ULTIMATE" ], "title": "CoverageLevel" }, "CruiseSpecificBenefits": { "properties": { "cabin_confinement": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "marine_rescue": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "medical_cover_cruising": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "missed_shore_excursion": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] } }, "type": "object", "title": "CruiseSpecificBenefits", "description": "Cruise specific benefits" }, "DestinationType": { "type": "string", "enum": [ "INTERNATIONAL", "DOMESTIC" ], "title": "DestinationType" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "KeyBenefits": { "properties": { "medical_coverage": { "$ref": "#/components/schemas/MedicalCoverage" }, "trip_protection": { "$ref": "#/components/schemas/TripProtection" }, "luggage_protection": { "$ref": "#/components/schemas/LuggageProtection" }, "personal_protection": { "$ref": "#/components/schemas/PersonalProtection" }, "other_coverage": { "$ref": "#/components/schemas/OtherCoverage" }, "ski_benefits": { "anyOf": [ { "$ref": "#/components/schemas/SkiSpecificBenefits" }, { "type": "null" } ] }, "cruise_benefits": { "anyOf": [ { "$ref": "#/components/schemas/CruiseSpecificBenefits" }, { "type": "null" } ] } }, "type": "object", "title": "KeyBenefits", "description": "Comprehensive benefits structure" }, "LuggageProtection": { "properties": { "luggage_coverage": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "delayed_luggage": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "personal_effects": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "travel_documents": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] } }, "type": "object", "title": "LuggageProtection", "description": "Luggage and personal effects protection" }, "MedicalCoverage": { "properties": { "overseas_emergency_medical": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "overseas_emergency_medical_and_hospital": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "covid_medical": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "dental_emergency": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "hospital_cash": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "medical_assistance": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "rearrangement_costs_covid": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] } }, "type": "object", "title": "MedicalCoverage", "description": "Medical coverage benefits" }, "Metadata": { "properties": { "currency": { "type": "string", "title": "Currency", "default": "AUD" }, "trip_details": { "$ref": "#/components/schemas/TripDetails" }, "quote_date": { "type": "string", "format": "date-time", "title": "Quote Date", "readOnly": true } }, "type": "object", "required": [ "trip_details", "quote_date" ], "title": "Metadata" }, "OtherCoverage": { "properties": { "evacuation": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "quarantine_costs": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "hijack": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "family_emergency": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "credit_card_fraud": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "rental_vehicle_excess": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "domestic_pets": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] } }, "type": "object", "title": "OtherCoverage", "description": "Other miscellaneous coverage" }, "PersonalProtection": { "properties": { "accidental_death": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "permanent_disability": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "personal_liability": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] } }, "type": "object", "title": "PersonalProtection", "description": "Personal protection benefits" }, "Price": { "properties": { "amount": { "type": "number", "exclusiveMinimum": 0.0, "title": "Amount", "description": "Price amount" }, "currency": { "type": "string", "title": "Currency", "default": "AUD" }, "per": { "type": "string", "title": "Per", "default": "trip" } }, "type": "object", "required": [ "amount" ], "title": "Price" }, "Product": { "properties": { "id": { "type": "integer", "title": "Id" }, "name": { "type": "string", "title": "Name" }, "coverage_level": { "$ref": "#/components/schemas/CoverageLevel" }, "product_type": { "$ref": "#/components/schemas/ProductType" }, "price": { "$ref": "#/components/schemas/Price" }, "special_features": { "items": { "$ref": "#/components/schemas/SpecialFeatures" }, "type": "array", "title": "Special Features" }, "product_disclosure_statements_url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Product Disclosure Statements Url" }, "annual_max_trip_days": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Annual Max Trip Days" }, "excess": { "type": "integer", "title": "Excess" }, "purchase_url": { "type": "string", "maxLength": 2083, "minLength": 1, "format": "uri", "title": "Purchase Url" }, "key_benefits": { "$ref": "#/components/schemas/KeyBenefits", "description": "Computed field that processes raw benefits based on product type and features", "readOnly": true } }, "type": "object", "required": [ "id", "name", "coverage_level", "product_type", "price", "special_features", "product_disclosure_statements_url", "excess", "purchase_url", "key_benefits" ], "title": "Product" }, "ProductType": { "type": "string", "enum": [ "covid", "explorer", "multi_trip", "domestic" ], "title": "ProductType" }, "Provider": { "properties": { "name": { "type": "string", "title": "Name", "default": "Travel Protect Insurance" }, "underwriter": { "type": "string", "title": "Underwriter", "default": "Pacific International Insurance Pty Ltd" }, "contact_info": { "$ref": "#/components/schemas/ProviderContactInfo" } }, "type": "object", "required": [ "contact_info" ], "title": "Provider" }, "ProviderContactInfo": { "properties": { "website": { "type": "string", "title": "Website", "default": "https://travelprotect.au" }, "customer_service": { "type": "string", "title": "Customer Service", "default": "https://travelprotect.au/customer-service" } }, "type": "object", "title": "ProviderContactInfo" }, "QuoteType": { "type": "string", "enum": [ "SINGLE", "MULTI" ], "title": "QuoteType" }, "RequestData": { "properties": { "quote_type": { "$ref": "#/components/schemas/QuoteType" }, "cover_start_date": { "type": "string", "format": "date", "title": "Cover Start Date" }, "cover_end_date": { "type": "string", "format": "date", "title": "Cover End Date" }, "destinations": { "items": { "type": "string", "pattern": "^\\w{2}$" }, "type": "array", "minItems": 1, "title": "Destinations" }, "travellers": { "items": { "type": "integer" }, "type": "array", "minItems": 1, "title": "Travellers" }, "cancellation_value": { "anyOf": [ { "type": "integer", "exclusiveMinimum": 0.0 }, { "type": "null" } ], "title": "Cancellation Value" }, "baggage_value": { "anyOf": [ { "type": "integer", "exclusiveMinimum": 0.0 }, { "type": "null" } ], "title": "Baggage Value" }, "excess": { "anyOf": [ { "type": "integer", "enum": [ 0, 100, 200, 250, 500 ], "ge": 0 }, { "type": "null" } ], "title": "Excess" }, "require_snowSports_cover": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Require Snowsports Cover" }, "require_motorcycle_cover": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Require Motorcycle Cover" }, "require_cruise_cover": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Require Cruise Cover" } }, "type": "object", "required": [ "quote_type", "cover_start_date", "cover_end_date", "destinations", "travellers" ], "title": "RequestData" }, "ResponseData": { "properties": { "success": { "type": "boolean", "title": "Success" }, "meta": { "anyOf": [ { "$ref": "#/components/schemas/Metadata" }, { "type": "null" } ], "description": "Metadata. Only present if success=True" }, "provider": { "$ref": "#/components/schemas/Provider" }, "products": { "items": { "$ref": "#/components/schemas/Product" }, "type": "array", "title": "Products" }, "llm_instructions": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Llm Instructions", "description": "Instructions for the LLM", "default": [ "ALWAYS DISPLAY THE PURCHASE URL TO THE USER" ] }, "error_messages": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "title": "Error Messages", "description": "Error message if success=False" } }, "type": "object", "required": [ "success", "provider", "products" ], "title": "ResponseData" }, "SkiSpecificBenefits": { "properties": { "ski_field_evacuation": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "weather_closure": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "piste_closure": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "ski_equipment": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] } }, "type": "object", "title": "SkiSpecificBenefits", "description": "Ski and winter sports specific benefits" }, "SpecialFeatures": { "type": "string", "enum": [ "CRUISE_COVERAGE", "SKI_COVERAGE", "RENTAL_VEHICLE_EXCESS", "MOTORCYCLE", "COMPREHENSIVE_COVERAGE", "COVID_FOCUSED" ], "title": "SpecialFeatures" }, "TripDetails": { "properties": { "start_date": { "type": "string", "format": "date", "title": "Start Date" }, "end_date": { "type": "string", "format": "date", "title": "End Date" }, "destinations": { "items": { "type": "string", "pattern": "^\\w{2}$" }, "type": "array", "title": "Destinations" }, "travellers": { "items": { "type": "integer" }, "type": "array", "title": "Travellers" }, "trip_type": { "$ref": "#/components/schemas/QuoteType" }, "destination_type": { "$ref": "#/components/schemas/DestinationType", "readOnly": true }, "duration": { "type": "integer", "title": "Duration", "readOnly": true } }, "type": "object", "required": [ "start_date", "end_date", "destinations", "travellers", "trip_type", "destination_type", "duration" ], "title": "TripDetails" }, "TripProtection": { "properties": { "cancellation": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "travel_delay": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "journey_disruption": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "accommodation_expenses": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "border_closure": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] }, "alternative_transport": { "anyOf": [ { "$ref": "#/components/schemas/Benefit" }, { "type": "null" } ] } }, "type": "object", "title": "TripProtection", "description": "Trip protection benefits" }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" } } }, "servers": [ { "url": "https://public-api.travelprotect.au" } ] } ```