{"openapi":"3.0.3","info":{"title":"Susman Insurance Agency quote request API","version":"2026-10-31","description":"Read the questions of each quote request form and, for a customer who authorised it, submit their answers so a licensed Susman Insurance Agency agent can follow up. Phone and text (310) 820-5200, email service@susmaninsurance.com.","contact":{"name":"Susman Insurance Agency","email":"service@susmaninsurance.com","url":"https://www.susmaninsurance.com"}},"servers":[{"url":"https://forms.susmaninsurance.com"}],"paths":{"/api/forms/catalog":{"get":{"summary":"List the available forms","responses":{"200":{"description":"Array of forms","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CatalogItem"}}}}}}}},"/api/forms/{formType}/outline":{"get":{"summary":"Questions of one form (names, types, choices, required, visibility rules)","parameters":[{"name":"formType","in":"path","required":true,"schema":{"type":"string","enum":["auto-insurance","homeowners-insurance","flood-quote","landlord-form","course-of-construction","earthquake-insurance-quote","condo-insurance-proposal","renters-insurance-proposal","jewelry-fine-arts","life-form","disability-form","long-term-care-form","feedback-form","clue-property-report-request"]}}],"responses":{"200":{"description":"Outline","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outline"}}}},"404":{"description":"Unknown form"}}}},"/api/forms/{formType}/schema":{"get":{"summary":"Full SurveyJS definition of one form","parameters":[{"name":"formType","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"SurveyJS JSON"},"404":{"description":"Unknown form"}}}},"/api/agent/submissions":{"post":{"summary":"Submit a complete set of answers on behalf of an applicant who authorised it","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSubmission"}}}},"responses":{"201":{"description":"Received; the agency and the applicant are emailed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"400":{"description":"Validation failed; the body lists missing or invalid questions"},"429":{"description":"Rate limited (10 per hour per address, 3 per day per applicant)"}}}}},"components":{"schemas":{"CatalogItem":{"type":"object","properties":{"formType":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"estimatedMinutes":{"type":"integer"},"questionCount":{"type":"integer"},"wordpressUrl":{"type":"string"},"engineUrl":{"type":"string"}}},"Outline":{"type":"object","properties":{"formType":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"questionCount":{"type":"integer"},"requiredCount":{"type":"integer"},"questions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","description":"text, comment, radiogroup, checkbox, dropdown, file, ..."},"inputType":{"type":"string","description":"for text questions: tel, email, number, date (ISO 8601 YYYY-MM-DD)"},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string"}},"visibleIf":{"type":"string","description":"SurveyJS expression; the question only applies when it is true"},"section":{"type":"string"}}}}}},"AgentSubmission":{"type":"object","required":["formType","applicant","agent","consent","answers"],"properties":{"formType":{"type":"string"},"applicant":{"type":"object","required":["name","email"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"}}},"agent":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The AI agent or product submitting"},"url":{"type":"string"},"contact":{"type":"string"}}},"consent":{"type":"boolean","description":"Must be true: the applicant authorised this submission"},"answers":{"type":"object","additionalProperties":true,"description":"Keyed by question name from the outline. Choice questions take the choice text; checkbox questions take an array; dates are YYYY-MM-DD; file questions take [{name, type, content: \"data:<mime>;base64,...\"}]"}}},"Receipt":{"type":"object","properties":{"status":{"type":"string"},"applicationId":{"type":"integer"},"formType":{"type":"string"},"receivedAt":{"type":"string"},"ignoredFields":{"type":"array","items":{"type":"string"}},"nextSteps":{"type":"string"}}}}}}