{"openapi":"3.0.0","paths":{"/health":{"get":{"operationId":"HealthController_getHealthStatus","parameters":[],"responses":{"200":{"description":"Returns the health status of the service"}},"summary":"Get health status","tags":["health"]}},"/public/address/autocomplete":{"get":{"operationId":"AddressController_autocomplete","parameters":[{"name":"query","required":true,"in":"query","description":"Address search query text. Must be at least 3 characters.","schema":{"minLength":3,"maxLength":100,"example":"123 Main St","type":"string"}},{"name":"country","required":true,"in":"query","description":"ISO 3166-1 alpha-2 country code","schema":{"example":"US","type":"string"}}],"responses":{"200":{"description":"List of address suggestions matching the query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressAutocompleteResponseDto"}}}}},"summary":"Search for address suggestions by query text","tags":["public"]}},"/recommended-care":{"get":{"operationId":"RecommendedCareController_getOwnerRecommendedCareConfig","parameters":[{"name":"pims","required":true,"in":"query","description":"The PIMS type name","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"The practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"branch","required":true,"in":"query","description":"The practice branch ID","schema":{"example":"1","type":"string"}}],"responses":{"200":{"description":"Returns the recommended care configuration with animal data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRecommendedCareConfigResponseDto"}}}},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"},"403":{"description":"Permission denied"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get recommended care configuration for animals","tags":["recommended-care"]}},"/recommended-care/asset":{"get":{"operationId":"RecommendedCareController_getAsset","parameters":[{"name":"animalSpecies","required":true,"in":"query","description":"Animal species","schema":{"example":"canine","type":"string","enum":["canine","feline","other"]}},{"name":"assetLocationPrefix","required":true,"in":"query","description":"Asset location prefix","schema":{"example":"images/backgrounds/rotatable","type":"string"}},{"name":"format","required":true,"in":"query","description":"Image format","schema":{"example":"jpg","type":"string","enum":["jpg"]}},{"name":"imageId","required":true,"in":"query","description":"Image identifier","schema":{"example":"00001","type":"string"}}],"responses":{"200":{"description":"Returns the asset as a base64 data URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAssetResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Asset not found"}},"security":[{"JWT-auth":[]}],"summary":"Get asset from S3","tags":["recommended-care"]}},"/recommended-care/education-materials":{"get":{"operationId":"RecommendedCareController_findAll","parameters":[],"responses":{"200":{"description":"List of all recommended care education materials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindAllRecommendedCareEducationMaterialsResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get all recommended care education materials","tags":["recommended-care"]},"post":{"operationId":"RecommendedCareController_bulkCreate","parameters":[],"requestBody":{"required":true,"description":"Array of education materials to create","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateRecommendedCareEducationMaterialArrayRequestBodyDto"}}}},"responses":{"204":{"description":"Successfully created all education materials"},"400":{"description":"Validation error or database error"}},"security":[{"X-API-KEY":[]}],"summary":"Bulk create recommended care education materials","tags":["recommended-care"]},"delete":{"operationId":"RecommendedCareController_removeAll","parameters":[],"responses":{"200":{"description":"All recommended care education materials removed"}},"security":[{"X-API-KEY":[]}],"summary":"Delete all recommended care education materials","tags":["recommended-care"]}},"/recommended-care/education-material/{id}":{"get":{"operationId":"RecommendedCareController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID of the recommended care education material","schema":{"type":"string"}}],"responses":{"200":{"description":"The recommended care education material","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindSingleRecommendedCareEducationMaterialResponseDto"}}}},"404":{"description":"Recommended care education material not found"}},"security":[{"X-API-KEY":[]}],"summary":"Get a recommended care education material by ID","tags":["recommended-care"]},"delete":{"operationId":"RecommendedCareController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID of the recommended care education material","schema":{"type":"string"}}],"responses":{"200":{"description":"Recommended care education material removed"},"404":{"description":"Recommended care education material not found"}},"security":[{"X-API-KEY":[]}],"summary":"Delete a recommended care education material by ID","tags":["recommended-care"]}},"/recommended-care/education-material":{"post":{"operationId":"RecommendedCareController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecommendedCareEducationMaterialRequestBodyDto"}}}},"responses":{"204":{"description":"Created recommended care education material"},"400":{"description":"Validation error"}},"security":[{"X-API-KEY":[]}],"summary":"Create a new recommended care education material","tags":["recommended-care"]}},"/practice/service-config":{"get":{"description":"Retrieve complete configuration including global and optional specific configs for a service type","operationId":"PracticeController_findServiceConfig","parameters":[{"name":"pims","required":true,"in":"query","description":"The PIMS type name","schema":{"example":"EZYVET","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"The practice organization ID","schema":{"example":"site_NTChG6U9KZEK73Ll3uCAR","type":"string"}},{"name":"branch","required":true,"in":"query","description":"The practice branch ID","schema":{"example":"ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn","type":"string"}},{"name":"service","required":true,"in":"query","description":"The service name","schema":{"example":"RecommendedCare","type":"string","enum":["RecommendedCare","ClientPermissions","PrescriptionConfig"]}}],"responses":{"200":{"description":"Practice service config retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeServiceConfigResponseDto"},"examples":{"default":{"summary":"Default Configuration","description":"If the configuration cannot be found","value":{"data":{"globalConfig":{"id":"","configData":{"enabled":false}},"specificConfigs":[]}}},"recommendedCare":{"summary":"Recommended Care Configuration","description":"Complete configuration with both global and specific configs","value":{"data":{"globalConfig":{"id":"e493ac24-e749-4737-a292-2ecc1057a418","configData":{"enabled":true,"showScore":false}},"specificConfigs":[{"id":"c3d4e5f6-789a-bcde-f012-3456789abcde","recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_9t9Tv8LzKKgdJJmF3Gx2t#","configData":{"serviceReminderTypeId":"socGroup_9t9Tv8LzKKgdJJmF3Gx2t","enabled":true,"addToCareScore":true,"clientFriendlyName":"Comprehensive Wellness Exam","cost":{"costType":"Range","minCost":"150","maxCost":"300"},"education":{"appointmentRequestEnabled":true,"educationContent":"Annual wellness exams help detect health issues early...","note":"Veterinarians recommend annual wellness exams for all pets"},"reason":"Comprehensive Wellness Exam"}},{"id":"d4e5f6g7-89ab-cdef-0123-456789abcdef","recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_GzEEf4gN9hflwJVjnlOdb#","configData":{"serviceReminderTypeId":"socGroup_GzEEf4gN9hflwJVjnlOdb","enabled":true,"addToCareScore":false,"clientFriendlyName":"Wellness Blood and Urine Screen","cost":{"costType":"Range","minCost":"80","maxCost":"150"},"education":{"appointmentRequestEnabled":false,"educationContent":"What to expect...","note":"Research suggests screening tests can identify issues in 40% of dogs and 60% of cats"},"reason":"Wellness Blood and Urine Screen"}}]}}},"clientPermissions":{"summary":"Client Permissions Configuration","description":"Global config with owner and animal specific configs - update types can be \"call\", \"request\", or \"direct\"","value":{"data":{"globalConfig":{"id":"f7b8c9d0-1234-5678-9abc-def012345678","configData":{"enabled":true}},"specificConfigs":[{"id":"a1b2c3d4-5678-9abc-def0-123456789abc","configData":{"configType":"ownerUpdate","permission":"direct"}},{"id":"a1b2c3d4-5678-9abc-def0-123456789abd","configData":{"enabled":true,"configType":"ownerCreate","permission":"direct","firstName":"required","lastName":"show"}},{"id":"b2c3d4e5-6789-abcd-ef01-23456789abcd","configData":{"configType":"animalUpdate","permission":"direct","deceased":"direct"}},{"id":"b2c3d4e5-6789-abcd-ef01-23456789abd","configData":{"enabled":true,"configType":"animalCreate","permission":"direct","name":"required","dob":"hidden","species":"required"}}]}}},"prescriptionConfig":{"summary":"Prescription Permission Configuration","description":"Only global config - option is \"enabled\" (boolean) to allow or disallow prescription refills","value":{"data":{"globalConfig":{"id":"global-config-prescription-permissions","configData":{"enabled":true}},"specificConfigs":[]}}}}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get a practice service config","tags":["practice"]}},"/practice/service-global-config":{"put":{"operationId":"PracticeController_upsertGlobalConfig","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutPracticeServiceGlobalConfigRequestBodyDto"},"examples":{"recommendedCare":{"summary":"Recommended Care Global Configuration","description":"Example for ServiceType.RecommendedCare","value":{"pims":"EZYVET","organization":"site_vwlu5JszEKw8ywYBdewOs","branch":"ownershipSeparation_bFSWnXIEDLSvnH3RjeaKQ","service":"RecommendedCare","configData":{"enabled":true,"showScore":false}}},"clientPermissions":{"summary":"Client Permissions Global Configuration","description":"Example for ServiceType.ClientPermissions","value":{"pims":"EZYVET","organization":"site_vwlu5JszEKw8ywYBdewOs","branch":"ownershipSeparation_bFSWnXIEDLSvnH3RjeaKQ","service":"ClientPermissions","configData":{"enabled":true}}},"prescriptionConfig":{"summary":"Prescription Client Permission Configuration","description":"Example for ServiceType.PrescriptionConfig","value":{"pims":"EZYVET","organization":"site_vwlu5JszEKw8ywYBdewOs","branch":"ownershipSeparation_bFSWnXIEDLSvnH3RjeaKQ","service":"PrescriptionConfig","configData":{"enabled":true}}}}}}},"responses":{"204":{"description":"The practice global config upserted successfully"},"400":{"description":"Validation error"}},"security":[{"X-API-KEY":[]}],"summary":"Upsert a practice global config","tags":["practice"]}},"/practice/service-specific-configs":{"put":{"operationId":"PracticeController_upsertSpecificConfigs","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutPracticeServiceSpecificConfigRequestBodyDto"},"examples":{"RecommendedCare":{"summary":"Recommended Care Specific Configuration","description":"Example for ServiceType.RecommendedCare specific configs","value":{"pims":"EZYVET","organization":"site_NTChG6U9KZEK73Ll3uCAR","branch":"ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn","service":"RecommendedCare","configList":[{"recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_9t9Tv8LzKKgdJJmF3Gx2t#","serviceReminderTypeId":"socGroup_9t9Tv8LzKKgdJJmF3Gx2t","enabled":true,"addToCareScore":true,"clientFriendlyName":"Comprehensive Wellness Exam","cost":{"costType":"Range","minCost":"150","maxCost":"300"},"education":{"appointmentRequestEnabled":true,"educationContent":"Annual wellness exams help detect health issues early...","note":"Veterinarians recommend annual wellness exams for all pets"},"reason":"Comprehensive Wellness Exam"},{"recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_GzEEf4gN9hflwJVjnlOdb#","serviceReminderTypeId":"socGroup_GzEEf4gN9hflwJVjnlOdb","enabled":true,"addToCareScore":false,"clientFriendlyName":"Wellness Blood and Urine Screen","cost":{"costType":"Range","minCost":"80","maxCost":"150"},"education":{"appointmentRequestEnabled":false,"educationContent":"What to expect...","note":"Research suggests screening tests can identify issues in 40% of dogs and 60% of cats"},"reason":"Wellness Blood and Urine Screen"}]}},"ClientPermissions":{"summary":"Client Permissions Specific Configuration","description":"Example for ServiceType.ClientPermissions specific configs (owner and animal permissions)","value":{"pims":"EZYVET","organization":"site_NTChG6U9KZEK73Ll3uCAR","branch":"ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn","service":"ClientPermissions","configList":[{"configType":"ownerUpdate","permission":"direct"},{"enabled":true,"configType":"ownerCreate","permission":"direct","firstName":"required","lastName":"show"},{"configType":"animalUpdate","permission":"direct","deceased":"direct"},{"enabled":true,"configType":"animalCreate","permission":"direct","name":"required","dob":"hidden","species":"required"}]}}}}}},"responses":{"204":{"description":"The practice specific configs upserted successfully"},"400":{"description":"Validation error"}},"security":[{"X-API-KEY":[]}],"summary":"Upsert practice specific configs","tags":["practice"]}},"/practice/enrollments":{"get":{"operationId":"PracticeController_enrollmentsFindAll","parameters":[],"responses":{"200":{"description":"List of all active practice enrollments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAllPracticeEnrollmentsResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get all active practice enrollments","tags":["practice"]}},"/practice/enrollment":{"get":{"operationId":"PracticeController_enrollmentFindOne","parameters":[{"name":"organization","required":true,"in":"query","description":"The practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"pims","required":true,"in":"query","description":"The PIMS type name","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"branch","required":true,"in":"query","description":"The practice branch ID","schema":{"example":"1","type":"string"}},{"name":"env","required":false,"in":"query","description":"Optional environment to filter by sourceEnv","schema":{"example":"qa","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"Get a practice enrollment based on organization, branch, and pims","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeEnrollmentResponseDto"}}}},"404":{"description":"Practice enrollment not found"}},"security":[{"X-API-KEY":[]}],"summary":"Get a practice enrollment","tags":["practice"]}},"/practice/enrollments/invalidate-cache":{"delete":{"operationId":"PracticeController_invalidateEnrollmentsCache","parameters":[],"responses":{"204":{"description":""}},"security":[{"X-API-KEY":[]}],"summary":"Invalidate cache for getting all practice enrollments from DB","tags":["practice"]}},"/practice/service-reminder-types":{"get":{"operationId":"PracticeController_findServiceReminderTypes","parameters":[{"name":"organization","required":true,"in":"query","description":"The practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"pims","required":true,"in":"query","description":"The PIMS type name","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"branch","required":true,"in":"query","description":"The practice branch ID","schema":{"example":"1","type":"string"}}],"responses":{"200":{"description":"Get a service reminder types based on organization, branch, and pims","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeServiceReminderTypesResponseDto"}}}},"404":{"description":"Service reminder types not found"}},"security":[{"X-API-KEY":[]}],"summary":"Get a service reminder types for a practice","tags":["practice"]},"put":{"operationId":"PracticeController_upsertServiceReminderTypes","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutPracticeServiceReminderTypesBodyDto"}}}},"responses":{"204":{"description":"The service reminder types upserted successfully"},"400":{"description":"Validation error"}},"security":[{"X-API-KEY":[]}],"summary":"Upsert a service reminder types","tags":["practice"]}},"/practice/recommended-care-config":{"get":{"operationId":"PracticeController_getRecommendedCareConfig","parameters":[{"name":"organization","required":true,"in":"query","description":"The practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"pims","required":true,"in":"query","description":"The PIMS type name","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"branch","required":true,"in":"query","description":"The practice branch ID","schema":{"example":"1","type":"string"}}],"responses":{"200":{"description":"Get recommended care config based on organization, branch, and pims","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeRecommendedCareConfigResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get recommended care config for a practice","tags":["practice"]},"put":{"operationId":"PracticeController_upsertRecommendedCareConfig","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutRecommendedCareConfigArrayRequestBodyDto"}}}},"responses":{"204":{"description":"The recommended care config upserted successfully"},"400":{"description":"Validation error"}},"security":[{"X-API-KEY":[]}],"summary":"Upsert recommended care config for a practice","tags":["practice"]}},"/pims/animals":{"get":{"description":"Retrieve animals from the datastore API using PIMS identifiers","operationId":"PimsAnimalController_getAnimals","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"include","required":false,"in":"query","description":"Include animals in the response by status","schema":{"example":["deceased"],"type":"array","items":{"type":"string","enum":["deceased"]}}}],"responses":{"200":{"description":"Animals retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAnimalsQueryResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Animals not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get PIMS animals","tags":["pims"]}},"/pims/animal":{"post":{"description":"Create a new animal in the PIMS system. Only Ezyvet and Neo are supported.","operationId":"PimsAnimalController_createAnimal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostPimsAnimalRequestDto"}}}},"responses":{"200":{"description":"Animal created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostPimsAnimalResponseDto"}}}},"400":{"description":"Invalid request parameters or feature not enabled"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Create a PIMS animal","tags":["pims"]},"patch":{"description":"Update animal information in the PIMS system. Only provided fields will be updated. Neo requires `branch` for API authentication; ezyVet uses organization-scoped auth and does not use `branch` on this endpoint.","operationId":"PimsAnimalController_patchAnimal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchPimsAnimalRequestDto"},"examples":{"ezyVet":{"summary":"ezyVet","value":{"pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","id":"animal_YmZ7yH7XhbFt1BJq0MHXE","name":"Buddy","dateOfBirth":"2011-02-11","isEstimatedDateOfBirth":false,"species":"1","breed":"10","sex":"2","animalcolor":"1","deceased":false}},"neo":{"summary":"Neo","value":{"pims":"NEO","organization":"600318","branch":"1","id":"12345","name":"Marley","dateOfBirth":"2021-02-21","species":"1","breed":"10","sex":"2","animalcolor":"Black","deceased":false}}}}}},"responses":{"204":{"description":"Animal patched successfully"},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Animal not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Patch a PIMS animal","tags":["pims"]}},"/pims/animal-owner":{"get":{"description":"Retrieve animal owner information from the datastore API using PIMS identifiers","operationId":"PimsAnimalOwnerController_getAnimalOwner","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"id","required":true,"in":"query","description":"Animal owner ID in the PIMS system","schema":{"example":"10","type":"string"}}],"responses":{"200":{"description":"Animal owner retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPimsAnimalOwnerResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Animal owner not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get PIMS animal owner","tags":["pims"]},"post":{"description":"Create a new animal owner in the PIMS system. Supports Ezyvet & Neo.","operationId":"PimsAnimalOwnerController_createAnimalOwner","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostPimsAnimalOwnerRequestDto"},"examples":{"Ezyvet - Create Owner":{"summary":"Create owner in ezyVet","value":{"pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","branch":"hospital_wqnM6WhWaDSLbPgAORQys","firstName":"John","lastName":"Doe","dateOfBirth":"1990-05-15","phone":"+15551234567","email":"john.doe@example.com","addressLine1":"123 Main St","addressLine2":"Apt 4B","city":"Springfield","region":"IL","postalCode":"62701","country":"US"}},"Neo - Create Owner":{"summary":"Create owner in Neo","value":{"pims":"NEO","organization":"600318","branch":"1","firstName":"John","lastName":"Doe","phone":"+14439648836","email":"john.doe@example.com","addressLine1":"123 Main St","addressLine2":"Apt 4B","city":"Portland","region":"ME","postalCode":"4101","country":"US"}}}}}},"responses":{"200":{"description":"Animal owner created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostPimsAnimalOwnerResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Create a PIMS animal owner","tags":["pims"]},"patch":{"description":"Update animal owner information in the PIMS system. Only provided fields will be updated.","operationId":"PimsAnimalOwnerController_patchAnimalOwner","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchPimsAnimalOwnerRequestDto"}}}},"responses":{"204":{"description":"Animal owner patched successfully"},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Animal owner not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Patch a PIMS animal owner","tags":["pims"]}},"/pims/medical-records":{"get":{"description":"Retrieve medical records (service reminders) from the datastore API using animal row keys","operationId":"PimsMedicalRecordsController_getMedicalRecords","parameters":[{"name":"animalRowKeys","required":true,"in":"query","description":"Array of animal row keys. Can be a single string or array of strings.","schema":{"example":["NEO#600318:2#22","NEO#600318:2#34"],"type":"array","items":{"type":"string"}}},{"name":"include","required":false,"in":"query","description":"Include animals in the response by status","schema":{"example":["deceased"],"type":"array","items":{"type":"string","enum":["deceased"]}}}],"responses":{"200":{"description":"Medical records retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPimsMedicalRecordsResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Medical records not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get PIMS medical records","tags":["pims"]}},"/pet-owner/feedback":{"post":{"operationId":"PetOwnerController_createFeedback","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePetOwnerFeedbackDto"}}}},"responses":{"204":{"description":"Feedback successfully submitted"},"400":{"description":"Invalid feedback content"}},"security":[{"JWT-auth":[]}],"summary":"Submit feedback from a pet owner","tags":["pet-owner"]}},"/pet-owner/practices":{"get":{"operationId":"PetOwnerController_getPractices","parameters":[{"name":"include","required":false,"in":"query","description":"Include additional data in the response. Currently only supports \"inactive\" to include inactive practices.","schema":{"enum":["inactive"],"type":"string"}}],"responses":{"200":{"description":"Returns practices with enrollment and appointment information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerPracticesResponseDto"}}}}},"security":[{"JWT-auth":[]}],"summary":"Get practices for the authenticated pet owner","tags":["pet-owner"]}},"/pet-owner/report-problem":{"post":{"operationId":"PetOwnerController_reportProblem","parameters":[{"name":"sendToSlack","required":false,"in":"query","description":"Whether to send the report to Slack. Defaults to \"enabled\" if not specified.","schema":{"enum":["enabled","disabled"],"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePetOwnerReportProblemDto"},"examples":{"Wrong Information - Web":{"value":{"issueType":"Information is wrong or missing","content":"The vaccination dates shown for my pet are incorrect.","os":"web"}},"Performance Issue - iOS":{"value":{"issueType":"Website/app is running slow or crashing","content":"The app is very slow when loading my pet's medical records.","os":"ios"}},"Other Issue - Android":{"value":{"issueType":"Something else","content":"I'm having trouble finding where to update my contact information.","os":"android"}},"With Custom CreatedAt":{"value":{"issueType":"Information is wrong or missing","content":"The vaccination dates shown for my pet are incorrect.","os":"web","createdAt":"2024-12-09T10:30:00.000Z"}}}}}},"responses":{"204":{"description":"Problem report successfully submitted"},"400":{"description":"Invalid problem report content"}},"security":[{"JWT-auth":[]}],"summary":"Submit a problem report from a pet owner","tags":["pet-owner"]}},"/pet-owner/generate-shortlink":{"post":{"operationId":"PetOwnerController_generateShortlink","parameters":[{"name":"env","required":true,"in":"query","description":"The vello environment (prod, demo, staging, qa4, qa3, qa2, qa)","schema":{"enum":["prod","demo","staging","qa4","qa3","qa2","qa"],"type":"string"}},{"name":"x-service-name","required":false,"in":"header","description":"Optional service name identifier for rate limiting and tracking","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateShortlinkRequestDto"},"examples":{"Appointment - View":{"summary":"Appointment View Shortlink","description":"Generate a shortlink for viewing an appointment","value":{"type":"Appointment","action":"view","medium":"email","pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","branch":"hospital_wqnM6WhWaDSLbPgAORQys","owner":"contact_R9fiF3oKec1HnveaHiYYr","email":"owner@example.com","phone":"+15551234567","appointment":"appointment_123","animal":"animal_456","appointmentDate":"2025-11-01T00:00:00"}},"Appointment - Confirm":{"summary":"Appointment Confirm Shortlink","description":"Generate a shortlink for confirming an appointment","value":{"type":"Appointment","action":"confirm","medium":"sms","pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","branch":"hospital_wqnM6WhWaDSLbPgAORQys","owner":"contact_R9fiF3oKec1HnveaHiYYr","email":"owner@example.com","phone":"+15559876543","appointment":"appointment_789","animal":"animal_012","appointmentDate":"2025-11-01T00:00:00"}},"Appointment - Book":{"summary":"Appointment Book Shortlink","description":"Generate a shortlink for booking a new appointment","value":{"type":"Appointment","action":"book","medium":"email","pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","branch":"hospital_wqnM6WhWaDSLbPgAORQys","owner":"contact_R9fiF3oKec1HnveaHiYYr","email":"owner@example.com","phone":"+15551234567","animal":"animal_456","sentDate":"2025-11-01T00:00:00"}},"Appointment - Form":{"summary":"Appointment Form Shortlink","description":"Generate a shortlink for a form associated with an appointment. Form and appointment expire together.","value":{"type":"Appointment","action":"form","medium":"sms","pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","branch":"hospital_wqnM6WhWaDSLbPgAORQys","owner":"contact_R9fiF3oKec1HnveaHiYYr","email":"owner@example.com","phone":"+15559876543","form":"form_789","appointment":"appointment_123","animal":"animal_456","appointmentDate":"2025-11-01T00:00:00"}},"Home - View":{"summary":"Home View Shortlink","description":"Generate a shortlink for viewing the home page","value":{"type":"Home","action":"view","medium":"sms","pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","branch":"hospital_wqnM6WhWaDSLbPgAORQys","owner":"contact_R9fiF3oKec1HnveaHiYYr","email":"owner@example.com","phone":"+15559876543","sentDate":"2025-11-01T00:00:00"}},"Form - View":{"summary":"Form View Shortlink","description":"Generate a shortlink for a form with no associated appointment. Optional animal ID.","value":{"type":"Form","action":"view","medium":"sms","pims":"EZYVET","organization":"site_cFtyNQRNNngN3wAybtLPK","branch":"hospital_wqnM6WhWaDSLbPgAORQys","owner":"contact_R9fiF3oKec1HnveaHiYYr","email":"owner@example.com","phone":"+15559876543","form":"form_789","animal":"animal_456","sentDate":"2025-11-01T00:00:00"}}}}}},"responses":{"201":{"description":"Shortlink successfully generated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateShortlinkResponseDto"}}}},"400":{"description":"Invalid request data"},"500":{"description":"Internal server error"}},"security":[{"X-API-KEY":[]}],"summary":"Generate a shortlink for a linkable item","tags":["pet-owner"]}},"/pet-owner/profile":{"get":{"description":"Retrieve the authenticated pet owner profile data from PetOwnerProfile table and appointment details from appointment service","operationId":"PetOwnerProfileController_getProfile","parameters":[],"responses":{"200":{"description":"Pet owner profile retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerProfileResponseDto"}}}},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner profile not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get pet owner profile","tags":["pet-owner-management"]},"put":{"description":"Create or update the authenticated pet owner profile data in RDS including accepted terms version, timezone, preferences, and other profile information","operationId":"PetOwnerProfileController_upsertProfile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerProfileRequestDto"},"examples":{"complete":{"summary":"Complete profile data","description":"Example with all possible fields","value":{"data":{"profile":{"acceptedTermsVersion":1,"timezone":"America/New_York","preferences":{}}}}}}}}},"responses":{"204":{"description":"Pet owner profile upserted successfully"},"400":{"description":"Bad request - Invalid payload"},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"User profile not found - missing cognito username"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Upsert pet owner profile","tags":["pet-owner-management"]}},"/pet-owner/profile/appointments":{"patch":{"description":"Update only the appointments data in the authenticated pet owner profile. Fetches the existing profile and overrides only the appointments field. If no existing profile is found, the update is skipped.","operationId":"PetOwnerProfileController_patchProfileAppointments","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchPetOwnerProfileAppointmentsRequestDto"},"examples":{"update":{"summary":"Update appointments","description":"Example updating appointment data","value":{"data":{"appointments":{"CORNERSTONE#417298:1#253747":{"confirmed":true,"bloodwork":false,"checklist":{"fecalSample":true}}}}}}}}}},"responses":{"204":{"description":"Pet owner profile appointments updated successfully"},"400":{"description":"Bad request - Invalid payload"},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"User profile not found - missing cognito username"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Update pet owner profile appointments","tags":["pet-owner-management"]}},"/admin/pet-owners":{"get":{"description":"If authProviderUserId or authProviderUserName is provided, other parameters are ignored","operationId":"AdminPetOwnerController_getAdminPetOwnerList","parameters":[{"name":"authProviderUserId","required":false,"in":"query","description":"The Cognito user ID (if provided, other parameters are ignored)","schema":{"example":"c669dcb4-09de-4859-9eef-56879c918863","type":"string"}},{"name":"authProviderUserName","required":false,"in":"query","description":"The auth provider user name","schema":{"example":"c89455c5-2539-48e1-a2e4-987a921131e3","type":"string"}},{"name":"loginEmail","required":false,"in":"query","description":"The login email address","schema":{"example":"example@example.com","type":"string"}},{"name":"loginPhoneNumber","required":false,"in":"query","description":"The login phone number in E.164 format","schema":{"example":"+1234567890","type":"string"}},{"name":"include","required":false,"in":"query","description":"Include related resources","schema":{"example":["group","pimslink","profile"],"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Returns an array of pet owners matching the query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnersResponseDto"}}}},"404":{"description":"Pet owners not found"}},"security":[{"X-API-KEY":[]}],"summary":"Get pet owners by query parameters","tags":["admin"]}},"/admin/pet-owner":{"get":{"description":"Retrieves the details of a specific pet owner. Exactly one of 'id', 'authProviderUserId', or 'authProviderUserName' must be provided.","operationId":"AdminPetOwnerController_getSingleAdminPetOwner","parameters":[{"name":"id","required":false,"in":"query","description":"Pet owner id","schema":{"example":"e493ac24-e749-4737-a292-2ecc1057a418","type":"string"}},{"name":"authProviderUserId","required":false,"in":"query","description":"Auth provider user id","schema":{"example":"c669dcb4-09de-4859-9eef-56879c918863","type":"string"}},{"name":"authProviderUserName","required":false,"in":"query","description":"Auth provider user name","schema":{"example":"c89455c5-2539-48e1-a2e4-987a921131e3","type":"string"}},{"name":"include","required":false,"in":"query","description":"Include related resources","schema":{"example":["group","pimslink","profile"],"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Returns a pet owner","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get a pet owner","tags":["admin"]},"put":{"operationId":"AdminPetOwnerController_upsertAdminPetOwner","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerDto"},"examples":{"create":{"summary":"Upsert a pet owner","value":{"authProviderUserId":"c669dcb4-09de-4859-9eef-56879c918863","authProvider":"cognito","authProviderUserName":"c89455c5-2539-48e1-a2e4-987a921131e3","userPoolId":"us-east-1_example","loginEmail":"john.doe@example.com","emailVerified":true,"loginPhoneNumber":"+15551234567","phoneNumberVerified":true,"enabled":true,"status":"CONFIRMED"}}}}}},"responses":{"200":{"description":"Returns the created or updated pet owner","content":{"application/json":{"example":{"data":{"petOwner":{"id":"e493ac24-e749-4737-a292-2ecc1057a418","authProviderUserId":"c669dcb4-09de-4859-9eef-56879c918863","authProvider":"cognito","loginEmail":"john.doe@example.com","emailVerified":true,"loginPhoneNumber":"+15551234567","phoneNumberVerified":true,"updatedAt":"2025-04-07T22:28:55.726Z","authProviderCreatedAt":"2024-12-17T18:13:53.582Z","authProviderLastModifiedAt":"2025-04-07T22:28:55.726Z","enabled":true,"status":"CONFIRMED"}}}}}}},"security":[{"X-API-KEY":[]}],"summary":"Create or update a pet owner","tags":["admin"]},"delete":{"description":"Deletes a specific pet owner. Exactly one of 'id', 'authProviderUserId', or 'authProviderUserName' must be provided.","operationId":"AdminPetOwnerController_deleteAdminPetOwner","parameters":[{"name":"id","required":false,"in":"query","description":"Pet owner id","schema":{"example":"e493ac24-e749-4737-a292-2ecc1057a418","type":"string"}},{"name":"authProviderUserId","required":false,"in":"query","description":"Auth provider user id","schema":{"example":"c669dcb4-09de-4859-9eef-56879c918863","type":"string"}},{"name":"authProviderUserName","required":false,"in":"query","description":"Auth provider user name","schema":{"example":"c89455c5-2539-48e1-a2e4-987a921131e3","type":"string"}}],"responses":{"204":{"description":"Pet owner successfully deleted"},"400":{"description":"Bad request - exactly one parameter must be provided"},"404":{"description":"Pet owner not found"}},"security":[{"X-API-KEY":[]}],"summary":"Delete a pet owner","tags":["admin"]}},"/admin/pet-owner/invalid-cognito-users":{"get":{"operationId":"AdminPetOwnerController_findAllInvalidAdminPetOwners","parameters":[],"responses":{"200":{"description":"Returns an array of auth provider user IDs for invalid pet owners","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetInvalidPetOwnersResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get all invalid cognito user id for pet owners (with no PIMS links)","tags":["admin"]}},"/admin/pet-owner/feedback":{"get":{"operationId":"AdminPetOwnerController_getAllAdminFeedback","parameters":[],"responses":{"200":{"description":"Returns an array of feedback entries that have ratings (excludes entries with null/undefined ratings)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerFeedbackResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get all pet owner feedback entries with ratings","tags":["admin"]}},"/admin/pet-owner/report-problem":{"get":{"operationId":"AdminPetOwnerController_getAllAdminReportProblems","parameters":[],"responses":{"200":{"description":"Returns an array of report problem entries with monthly analysis by issue type and OS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerReportProblemResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get all pet owner report problem entries with analysis","tags":["admin"]}},"/admin/pet-owner/shortlink-cleanup":{"delete":{"description":"Deletes expired shortlinks from the database in batches.","operationId":"AdminPetOwnerController_cleanupShortlinks","parameters":[],"responses":{"204":{"description":"Successfully cleaned up expired shortlinks"}},"security":[{"X-API-KEY":[]}],"summary":"Clean up expired shortlinks","tags":["admin"]}},"/admin/pet-owner/pims-link":{"get":{"description":"Retrieves all matching PIMS links along with pet owner authentication information by PIMS (required), organization (required), branch (optional), and animalOwnerId (optional)","operationId":"AdminPetOwnerController_getPetOwnerByPimsLink","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Organization ID","schema":{"example":"6001","type":"string"}},{"name":"branch","required":false,"in":"query","description":"Branch ID (optional)","schema":{"example":"1","type":"string"}},{"name":"animalOwnerId","required":false,"in":"query","description":"Animal owner ID in PIMS (optional)","schema":{"example":"1","type":"string"}}],"responses":{"200":{"description":"Returns an array of PIMS links with pet owner information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerByPimsLinkResponseDto"}}}},"404":{"description":"No PIMS links found"}},"security":[{"X-API-KEY":[]}],"summary":"Get PIMS link data by PIMS identifiers","tags":["admin"]},"put":{"operationId":"AdminPetOwnerController_upsertAdminPimsLink","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertAdminPetOwnerPimsLinkInputDto"},"examples":{"create":{"summary":"Upsert PIMS link","value":{"petOwnerId":"e493ac24-e749-4737-a292-2ecc1057a418","pims":"NEO","organization":"6001","branch":"1","animalOwnerId":"1"}}}}}},"responses":{"200":{"description":"Returns the created or updated PIMS link ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerPimsLinkResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Upsert a PIMS link","tags":["admin"]},"delete":{"description":"Idempotent delete operation - returns 204 even if the PIMS link does not exist.","operationId":"AdminPetOwnerController_deleteAdminPimsLink","parameters":[{"name":"id","required":true,"in":"query","description":"PIMS link ID","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"X-API-KEY":[]}],"summary":"Delete a PIMS link","tags":["admin"]}},"/admin/pet-owner/pims-link/cleanup":{"post":{"description":"Finds all inactive practices (isVelloActive = false), queries their PIMS links, and queues them for deletion via SQS. This endpoint is called by a scheduled Github Action. Returns immediately without waiting for completion.","operationId":"AdminPetOwnerController_triggerPimsLinkCleanup","parameters":[],"responses":{"204":{"description":"Cleanup process triggered successfully. Process runs in background."}},"security":[{"X-API-KEY":[]}],"summary":"Trigger PIMS link cleanup for offboarded practices","tags":["admin"]}},"/admin/pet-owner/group":{"put":{"operationId":"AdminPetOwnerController_upsertAdminGroup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupInputDto"},"examples":{"basic":{"summary":"Create group","value":{"name":"Simpsons Family","settings":{}}}}}}},"responses":{"200":{"description":"Returns the created or updated group ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Upsert a pet owner group","tags":["admin"]},"delete":{"operationId":"AdminPetOwnerController_deleteAdminGroup","parameters":[{"name":"id","required":true,"in":"query","description":"Group ID","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"X-API-KEY":[]}],"summary":"Delete a pet owner group","tags":["admin"]}},"/admin/pet-owner/group/member":{"put":{"operationId":"AdminPetOwnerController_upsertAdminGroupMember","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupMemberInputDto"},"examples":{"basic":{"summary":"Create group member","value":{"groupId":"e493ac24-e749-4737-a292-2ecc1057a418","petOwnerId":"f593bc34-f859-5847-b392-3fdd2068b529","role":"member"}}}}}},"responses":{"200":{"description":"Returns the created or updated group member ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupMemberResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Upsert a pet owner group member","tags":["admin"]},"delete":{"operationId":"AdminPetOwnerController_deleteAdminGroupMember","parameters":[{"name":"groupId","required":true,"in":"query","description":"Group ID","schema":{"type":"string"}},{"name":"petOwnerId","required":true,"in":"query","description":"Pet Owner ID","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"X-API-KEY":[]}],"summary":"Delete a pet owner group member","tags":["admin"]}},"/admin/pet-owner/profile":{"put":{"operationId":"AdminPetOwnerController_upsertAdminProfilePetOwner","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerProfileInputDto"},"examples":{"upsert":{"summary":"Upsert pet owner profile","value":{"id":"c669dcb4-09de-4859-9eef-56879c918863","timezone":"America/New_York","acceptedTermsVersion":"1","preferences":{}}}}}}},"responses":{"200":{"description":"Returns the created or updated profile ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerProfileResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Admin upsert a pet owner profile","tags":["admin"]},"delete":{"operationId":"AdminPetOwnerController_deleteAdminProfilePetOwner","parameters":[{"name":"id","required":true,"in":"query","description":"Pet owner ID","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"X-API-KEY":[]}],"summary":"Admin delete a pet owner profile","tags":["admin"]}},"/admin/pet-owner/signup-history":{"get":{"description":"Returns signup history records sorted by createdAt DESC. Optionally filter by date range and limit results. When id is provided, returns a single record with all fields (including externalApiStatusCode, externalApiResponse, externalApiUrl, metadata) and other query parameters (startDate, endDate, limit) are ignored.","operationId":"AdminPetOwnerSignupHistoryController_getSignupHistoryRecords","parameters":[{"name":"id","required":false,"in":"query","description":"Specific record ID to retrieve (UUID). When provided, returns a single record with all fields including externalApiStatusCode, externalApiResponse, externalApiUrl, and metadata.","schema":{"example":"e493ac24-e749-4737-a292-2ecc1057a418","type":"string"}},{"name":"startDate","required":false,"in":"query","description":"Start date filter (ISO date string). If not provided, returns all records.","schema":{"example":"2024-01-01","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date filter (ISO date string). If not provided, returns all records.","schema":{"example":"2024-12-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (default: 10000, max: 100000)","schema":{"minimum":1,"maximum":100000,"example":10000,"type":"number"}}],"responses":{"200":{"description":"Returns signup history records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSignupHistoryRecordsResponseDto"}}}},"404":{"description":"Record not found (when querying by id)"}},"security":[{"X-API-KEY":[]}],"summary":"Get pet owner signup history records","tags":["admin"]}},"/admin/pet-owner/signup-history/stats":{"get":{"description":"Returns aggregated statistics computed via SQL. All stats are calculated server-side for performance.","operationId":"AdminPetOwnerSignupHistoryController_getSignupHistoryStats","parameters":[{"name":"startDate","required":false,"in":"query","description":"Start date filter (ISO date string)","schema":{"example":"2024-01-01","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date filter (ISO date string)","schema":{"example":"2024-12-31","type":"string"}},{"name":"pims","required":false,"in":"query","description":"Filter by PIMS type","schema":{"enum":["NEO","EZYVET","CORNERSTONE"],"type":"string"}},{"name":"organization","required":false,"in":"query","description":"Filter by organization ID","schema":{"example":"600274","type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by status","schema":{"enum":["SUCCESS","ERROR"],"type":"string"}},{"name":"topOrganizationsLimit","required":false,"in":"query","description":"Limit for top organizations ranking (default: 10, max: 50)","schema":{"minimum":1,"maximum":50,"example":10,"type":"number"}},{"name":"minAttemptsForRanking","required":false,"in":"query","description":"Minimum attempts required for an organization to appear in error rate ranking (default: 5, max: 1000)","schema":{"minimum":1,"maximum":1000,"example":5,"type":"number"}}],"responses":{"200":{"description":"Returns aggregated signup history statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSignupHistoryStatsResponseDto"}}}}},"security":[{"X-API-KEY":[]}],"summary":"Get aggregated pet owner signup history statistics","tags":["admin"]}},"/pet-owner/practice-config":{"get":{"description":"Retrieve a practice configuration for a service type","operationId":"PetOwnerPracticeConfigController_getServiceGlobalConfig","parameters":[{"name":"pims","required":true,"in":"query","description":"The PIMS type name","schema":{"example":"EZYVET","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"The practice organization ID","schema":{"example":"site_NTChG6U9KZEK73Ll3uCAR","type":"string"}},{"name":"branch","required":true,"in":"query","description":"The practice branch ID","schema":{"example":"ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn","type":"string"}},{"name":"service","required":true,"in":"query","description":"The service name","schema":{"example":"RecommendedCare","type":"string","enum":["RecommendedCare","ClientPermissions","PrescriptionConfig"]}}],"responses":{"200":{"description":"Practice service global config retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeServiceConfigResponseDto"},"examples":{"default":{"summary":"Default Configuration","description":"If the configuration cannot be found","value":{"data":{"globalConfig":{"id":"","configData":{"enabled":false}},"specificConfigs":[]}}},"recommendedCare":{"summary":"Recommended Care Configuration","description":"Complete configuration with both global and specific configs","value":{"data":{"globalConfig":{"id":"e493ac24-e749-4737-a292-2ecc1057a418","configData":{"enabled":true,"showScore":false}},"specificConfigs":[{"id":"c3d4e5f6-789a-bcde-f012-3456789abcde","recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_9t9Tv8LzKKgdJJmF3Gx2t#","configData":{"serviceReminderTypeId":"socGroup_9t9Tv8LzKKgdJJmF3Gx2t","enabled":true,"addToCareScore":true,"clientFriendlyName":"Comprehensive Wellness Exam","cost":{"costType":"Range","minCost":"150","maxCost":"300"},"education":{"appointmentRequestEnabled":true,"educationContent":"Annual wellness exams help detect health issues early...","note":"Veterinarians recommend annual wellness exams for all pets"},"reason":"Comprehensive Wellness Exam"}},{"id":"d4e5f6g7-89ab-cdef-0123-456789abcdef","recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_GzEEf4gN9hflwJVjnlOdb#","configData":{"serviceReminderTypeId":"socGroup_GzEEf4gN9hflwJVjnlOdb","enabled":true,"addToCareScore":false,"clientFriendlyName":"Wellness Blood and Urine Screen","cost":{"costType":"Range","minCost":"80","maxCost":"150"},"education":{"appointmentRequestEnabled":false,"educationContent":"What to expect...","note":"Research suggests screening tests can identify issues in 40% of dogs and 60% of cats"},"reason":"Wellness Blood and Urine Screen"}}]}}},"clientPermissions":{"summary":"Client Permissions Configuration","description":"Global config with owner and animal specific configs - update types can be \"call\", \"request\", or \"direct\"","value":{"data":{"globalConfig":{"id":"f7b8c9d0-1234-5678-9abc-def012345678","configData":{"enabled":true}},"specificConfigs":[{"id":"a1b2c3d4-5678-9abc-def0-123456789abc","configData":{"configType":"ownerUpdate","permission":"direct"}},{"id":"a1b2c3d4-5678-9abc-def0-123456789abd","configData":{"enabled":true,"configType":"ownerCreate","permission":"direct","firstName":"required","lastName":"show"}},{"id":"b2c3d4e5-6789-abcd-ef01-23456789abcd","configData":{"configType":"animalUpdate","permission":"direct","deceased":"direct"}},{"id":"b2c3d4e5-6789-abcd-ef01-23456789abd","configData":{"enabled":true,"configType":"animalCreate","permission":"direct","name":"required","dob":"hidden","species":"required"}}]}}},"prescriptionConfig":{"summary":"Prescription Permission Configuration","description":"Only global config - option is \"enabled\" (boolean) to allow or disallow prescription refills","value":{"data":{"globalConfig":{"id":"global-config-prescription-permissions","configData":{"enabled":true}},"specificConfigs":[]}}}}}}},"401":{"description":"Unauthorized"},"404":{"description":"Practice service global config not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get a practice service config","tags":["pet-owner"]}},"/pet-owner/pims-link":{"get":{"description":"Retrieve all PIMS links for the authenticated pet owner","operationId":"PetOwnerPimsLinkController_getPimsLinks","parameters":[],"responses":{"200":{"description":"Returns the pet owner PIMS links","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerPimsLinksResponseDto"}}}},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner not found"}},"security":[{"JWT-auth":[]}],"summary":"Get pet owner PIMS links","tags":["pet-owner-management"]},"put":{"description":"Create or update a PIMS link for the authenticated pet owner. If id is provided, updates existing PIMS link. If id is not provided, creates a new PIMS link.","operationId":"PetOwnerPimsLinkController_upsertPimsLink","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerPimsLinkInputDto"},"examples":{"create":{"summary":"Upsert PIMS link","value":{"pims":"NEO","organization":"6001","branch":"1","animalOwnerId":"1"}}}}}},"responses":{"200":{"description":"Returns the created or updated PIMS link ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerPimsLinkResponseDto"}}}},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner not found"}},"security":[{"JWT-auth":[]}],"summary":"Upsert a PIMS link","tags":["pet-owner-management"]},"delete":{"description":"Delete a PIMS link for the authenticated pet owner. Only the pet owner can delete their own PIMS links.","operationId":"PetOwnerPimsLinkController_deletePimsLink","parameters":[{"name":"id","required":true,"in":"query","description":"PIMS link ID to delete","schema":{"example":"e493ac24-e749-4737-a292-2ecc1057a418","type":"string"}}],"responses":{"204":{"description":"PIMS link successfully deleted"},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner or PIMS link not found"}},"security":[{"JWT-auth":[]}],"summary":"Delete a PIMS link","tags":["pet-owner-management"]}},"/pet-owner/group":{"get":{"description":"Retrieve all pet owner groups that the authenticated pet owner is a member of","operationId":"PetOwnerGroupController_getGroups","parameters":[],"responses":{"200":{"description":"Returns the pet owner groups","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerGroupsResponseDto"}}}},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner not found"}},"security":[{"JWT-auth":[]}],"summary":"Get pet owner groups","tags":["pet-owner-management"]},"put":{"description":"Create or update a pet owner group. If id is provided, updates existing group (only owners/admins can update). If id is not provided, creates a new group and adds the authenticated pet owner as owner.","operationId":"PetOwnerGroupController_upsertGroup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupInputDto"},"examples":{"basic":{"summary":"Create group","value":{"name":"Simpsons Family","settings":{}}}}}}},"responses":{"200":{"description":"Returns the created or updated group ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupResponseDto"}}}},"400":{"description":"Bad Request - Group not found when updating"},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner not found"}},"security":[{"JWT-auth":[]}],"summary":"Upsert a pet owner group","tags":["pet-owner-management"]},"delete":{"description":"Delete a pet owner group. Only group owners can delete the group. Deleting a group will also delete all pet owner members belonging to it.","operationId":"PetOwnerGroupController_deleteGroup","parameters":[{"name":"id","required":true,"in":"query","description":"Group ID to delete","schema":{"example":"e493ac24-e749-4737-a292-2ecc1057a418","type":"string"}}],"responses":{"204":{"description":"Group successfully deleted"},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner or group not found, or insufficient permissions (owner role required)"}},"security":[{"JWT-auth":[]}],"summary":"Delete a pet owner group","tags":["pet-owner-management"]}},"/pet-owner/group/member-list":{"get":{"description":"Retrieve all pet owner members of groups that the authenticated pet owner belongs to, including member details","operationId":"PetOwnerGroupMemberController_getGroupMemberList","parameters":[],"responses":{"200":{"description":"Returns all pet owner members of groups the authenticated pet owner belongs to","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetOwnerGroupMembershipsResponseDto"}}}},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner not found"}},"security":[{"JWT-auth":[]}],"summary":"Get pet owner group member list","tags":["pet-owner-management"]}},"/pet-owner/group/member":{"put":{"description":"Create or update a pet owner group membership for any pet owner. Only owners or admins can add/update pet owner members in the group. If membership exists, updates existing membership. If membership does not exist, creates a new membership.","operationId":"PetOwnerGroupMemberController_upsertGroupMember","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupMemberInputDto"},"examples":{"basic":{"summary":"Create group member","value":{"groupId":"e493ac24-e749-4737-a292-2ecc1057a418","petOwnerId":"f593bc34-f859-5847-b392-3fdd2068b529","role":"member"}}}}}},"responses":{"200":{"description":"Returns the created or updated group member ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPetOwnerGroupMemberResponseDto"}}}},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"Pet owner not found"}},"security":[{"JWT-auth":[]}],"summary":"Upsert a pet owner group membership","tags":["pet-owner-management"]},"delete":{"description":"Remove a pet owner from a group. Pet owners can remove themselves, or owners/admins can remove other pet owner members. If a group owner removes themselves, the entire group is deleted. Admins cannot remove owners.","operationId":"PetOwnerGroupMemberController_deleteGroupMember","parameters":[{"name":"groupId","required":true,"in":"query","description":"Group ID","schema":{"example":"e493ac24-e749-4737-a292-2ecc1057a418","type":"string"}},{"name":"petOwnerId","required":false,"in":"query","description":"Pet Owner ID to remove (optional - defaults to authenticated user)","schema":{"example":"f593bc34-f859-5847-b392-3fdd2068b529","type":"string"}}],"responses":{"204":{"description":"Group membership successfully deleted"},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"403":{"description":"Forbidden - Admin cannot remove owner from group"},"404":{"description":"Pet owner or group membership not found"}},"security":[{"JWT-auth":[]}],"summary":"Delete a pet owner group membership","tags":["pet-owner-management"]}},"/pet-photo":{"get":{"operationId":"PetPhotoController_getPetPhoto","parameters":[{"name":"pims","required":true,"in":"query","description":"The PIMS type","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"The organization ID","schema":{"example":"600274","type":"string"}},{"name":"owner","required":true,"in":"query","description":"The pet owner ID","schema":{"example":"5","type":"string"}},{"name":"animal","required":true,"in":"query","description":"The animal ID","schema":{"example":"5","type":"string"}}],"responses":{"200":{"description":"Returns the pet photo as a base64 data URL or empty object if not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPetPhotoResponseDto"}}}},"401":{"description":"Unauthorized"},"403":{"description":"Permission denied"}},"security":[{"JWT-auth":[]}],"summary":"Get pet photo from S3","tags":["pet-photo"]},"post":{"operationId":"PetPhotoController_uploadPetPhoto","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadPetPhotoDto"}}}},"responses":{"204":{"description":"Pet photo uploaded successfully"},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"},"403":{"description":"Permission denied"}},"security":[{"JWT-auth":[]}],"summary":"Upload pet photo to S3","tags":["pet-photo"]},"delete":{"operationId":"PetPhotoController_deletePetPhoto","parameters":[{"name":"pims","required":true,"in":"query","description":"The PIMS type","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"The organization ID","schema":{"example":"600274","type":"string"}},{"name":"owner","required":true,"in":"query","description":"The pet owner ID","schema":{"example":"5","type":"string"}},{"name":"animal","required":true,"in":"query","description":"The animal ID","schema":{"example":"5","type":"string"}}],"responses":{"204":{"description":"Pet photo deleted successfully"},"401":{"description":"Unauthorized"},"403":{"description":"Permission denied"},"404":{"description":"Pet photo not found"}},"security":[{"JWT-auth":[]}],"summary":"Delete pet photo from S3","tags":["pet-photo"]}},"/pet-owner/registration":{"post":{"operationId":"PetOwnerRegistrationController_createOrGetDraft","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRegistrationDto"}}}},"responses":{"204":{"description":"Registration draft created or returned"},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"}},"security":[{"JWT-auth":[]}],"summary":"Create a new draft registration or return existing draft","tags":["pet-owner-registration"]},"get":{"operationId":"PetOwnerRegistrationController_getRegistration","parameters":[{"name":"status","required":true,"in":"query","schema":{"enum":["draft","processing","completed","failed"],"type":"string"}},{"name":"pims","required":true,"in":"query","schema":{"enum":["EZYVET","NEO","CORNERSTONE"],"type":"string"}},{"name":"organization","required":true,"in":"query","schema":{"example":"site_cFtyNQRNNngN3wAybtLPK","type":"string"}}],"responses":{"200":{"description":"Registration found or null if not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRegistrationResponseDto"}}}},"401":{"description":"Unauthorized"}},"security":[{"JWT-auth":[]}],"summary":"Get a registration by status, pims, and organization","tags":["pet-owner-registration"]},"patch":{"operationId":"PetOwnerRegistrationController_updateRegistration","parameters":[{"name":"id","required":true,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRegistrationDto"}}}},"responses":{"204":{"description":"Registration updated"},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"},"404":{"description":"Registration not found"},"409":{"description":"Registration is not in draft status"}},"security":[{"JWT-auth":[]}],"summary":"Update a registration's pet info","tags":["pet-owner-registration"]}},"/pet-owner/registration/attachment":{"post":{"operationId":"PetOwnerRegistrationController_uploadAttachment","parameters":[{"name":"registrationId","required":true,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadAttachmentDto"}}}},"responses":{"200":{"description":"Attachment uploaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadAttachmentResponseDto"}}}},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"},"404":{"description":"Registration not found"},"409":{"description":"Registration is not in draft status"}},"security":[{"JWT-auth":[]}],"summary":"Upload a photo attachment to a registration","tags":["pet-owner-registration"]},"delete":{"operationId":"PetOwnerRegistrationController_deleteAttachment","parameters":[{"name":"registrationId","required":true,"in":"query","schema":{"type":"string"}},{"name":"attachmentId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"204":{"description":"Attachment deleted"},"400":{"description":"Attachment does not belong to the specified registration"},"401":{"description":"Unauthorized"},"404":{"description":"Registration or attachment not found"},"409":{"description":"Registration is not in draft status"}},"security":[{"JWT-auth":[]}],"summary":"Delete an attachment from a registration","tags":["pet-owner-registration"]}},"/pet-owner/registration/trigger-writeback":{"post":{"operationId":"PetOwnerRegistrationController_triggerWriteback","parameters":[{"name":"registrationId","required":true,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerWritebackDto"}}}},"responses":{"204":{"description":"Writeback triggered"},"400":{"description":"No ready attachments to process"},"401":{"description":"Unauthorized"},"404":{"description":"Registration not found"},"409":{"description":"Registration is not in draft status"}},"security":[{"JWT-auth":[]}],"summary":"Submit registration and trigger attachment writeback to PIMS","tags":["pet-owner-registration"]}},"/admin/pet-owner/registration/pims-attachment-writeback":{"post":{"operationId":"PetOwnerRegistrationAdminController_processAttachmentWriteback","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WritebackAttachmentDto"}}}},"responses":{"204":{"description":"Attachment processed (synced)"},"401":{"description":"Invalid or missing API key"},"404":{"description":"S3 object not found"},"500":{"description":"Retryable error — Lambda should re-enqueue via SQS"}},"security":[{"X-API-KEY":[]}],"summary":"Process a single attachment writeback to PIMS (called by Lambda)","tags":["pet-owner-registration"]}},"/public/practice-finder":{"get":{"operationId":"PublicController_practiceSearch","parameters":[{"name":"search_string","required":true,"in":"query","description":"The search string (practice name, practice address, city, postal/ZIP code). Must contain at least 3 alphanumeric characters.","schema":{"example":"my neo clinic","type":"string"}},{"name":"env","required":false,"in":"query","description":"Non-prod environment","schema":{"example":"qa4","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"List of all active practice enrollments that fuzzy match the search string or postal code and removes values that are not public facing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeFinderQueryResponseDto"}}}}},"summary":"Search practice enrollments by search string or postal code","tags":["public"]}},"/public/practice-shortlink":{"get":{"operationId":"PublicController_practiceShortlink","parameters":[{"name":"practice_shortlink","required":true,"in":"query","description":"The practice shortlink","schema":{"example":"myneoclinic","type":"string"}},{"name":"env","required":false,"in":"query","description":"Non-prod environment","schema":{"example":"qa4","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"Gets the active practice enrollment by shortlink","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeByShortlinkResponseDto"}}}}},"tags":["public"]}},"/public/practice-config":{"get":{"operationId":"PublicController_practiceConfig","parameters":[{"name":"pims","required":true,"in":"query","description":"The PIMS type name","schema":{"example":"EZYVET","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"The practice organization ID","schema":{"example":"site_cFtyNQRNNngN3wAybtLPK","type":"string"}},{"name":"branch","required":true,"in":"query","description":"The practice branch ID","schema":{"example":"hospital_wqnM6WhWaDSLbPgAORQys","type":"string"}},{"name":"env","required":false,"in":"query","description":"Non-prod environment","schema":{"example":"qa4","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"Practice config permissions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPracticeConfigResponseDto"}}}}},"summary":"Get practice config permissions for contact create and pet create","tags":["public"]}},"/public/owner-finder":{"get":{"operationId":"PublicController_ownerSearch","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"EZYVET","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"site_pc8JNIdLofX0ZBmQuKbk9","type":"string"}},{"name":"phoneNumber","required":true,"in":"query","description":"The user phone number in E.164 format","schema":{"example":"+19792482003","type":"string"}},{"name":"email","required":false,"in":"query","description":"The user email address (we check this but does not affect the return response)","schema":{"type":"string"}},{"name":"env","required":false,"in":"query","description":"Non-prod environment","schema":{"example":"qa4","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"Search an animalownerId by phoneNumber and organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOwnerFinderQueryResponseDto"}}}},"400":{"description":"Invalid request parameters"},"404":{"description":"No matching owner found"},"409":{"description":"More than one owner found"},"500":{"description":"Internal server error"}},"summary":"Search animal owner by phoneNumber","tags":["public"]}},"/public/owner-shortlink":{"get":{"description":"Retrieves owner shortlink parameters including auth code, path, and appointment details. Supports different shortlink types: Appointment View, Appointment Confirm, Appointment Book, and Home View.","operationId":"PublicController_ownerShortlink","parameters":[{"name":"shortlink","required":true,"in":"query","description":"The owner shortlink","schema":{"example":"abc123xyz","type":"string"}},{"name":"env","required":false,"in":"query","description":"Non-prod environment","schema":{"example":"qa4","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"Gets the params for the owner shortlink","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnerShortlinkDto"}}}},"400":{"description":"Missing required query params: shortlink"},"401":{"description":"This link has expired"},"404":{"description":"No linkable item found for shortlink"}},"summary":"Fetch owner params by shortlink","tags":["public"]}},"/pims/appointment":{"get":{"description":"Retrieve appointment information from the datastore API using PIMS identifiers","operationId":"PimsAppointmentController_getAppointment","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"branch","required":true,"in":"query","description":"Practice branch ID","schema":{"example":"1","type":"string"}},{"name":"owner","required":true,"in":"query","description":"Animal owner ID in the PIMS system","schema":{"example":"10","type":"string"}},{"name":"id","required":true,"in":"query","description":"Appointment ID in the PIMS system","schema":{"example":"10","type":"string"}}],"responses":{"200":{"description":"Appointment retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPimsAppointmentResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Appointment not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get PIMS appointment","tags":["pims"]},"patch":{"description":"Update appointment information in the PIMS system.","operationId":"PimsAppointmentController_patchAppointment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchAppointmentRequestDto"}}}},"responses":{"204":{"description":"Appointment patched successfully"},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Appointment not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Patch a PIMS appointment","tags":["pims"]}},"/pims/appointments":{"get":{"description":"Retrieve a list of appointments for all active animals of the owner, or a filtered list by animal IDs.","operationId":"PimsAppointmentController_getAppointmentList","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"animals","required":false,"in":"query","description":"Optional array of animal IDs to filter appointments","schema":{"example":["1","2"],"type":"array","items":{"type":"string"}}},{"name":"range","required":false,"in":"query","description":"Optional range filter for appointments. Only accepts 'future' or 'past'.","schema":{"example":"future","type":"string","enum":["future","past"]}},{"name":"include","required":false,"in":"query","description":"Include animals in the response by status","schema":{"example":["deceased"],"type":"array","items":{"type":"string","enum":["deceased"]}}}],"responses":{"200":{"description":"Appointments retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPimsAppointmentListResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get PIMS appointment list","tags":["pims"]}},"/pims/practice-config":{"get":{"description":"Fetch pims practice config for a practice from the PIMS. Only ezyVet and Neo are supported at present.","operationId":"PimsPracticeConfigController_getPracticeConfig","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"EZYVET","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"site_cFtyNQRNNngN3wAybtLPK","type":"string"}},{"name":"branch","required":true,"in":"query","description":"Practice branch ID","schema":{"example":"hospital_wqnM6WhWaDSLbPgAORQys","type":"string"}},{"name":"include","required":false,"in":"query","description":"Animal color (animalcolor) is not supported when pims is NEO. (only included if requested).","schema":{"type":"string","enum":["species","breeds","sexes","animalcolor"]}},{"name":"species","required":false,"in":"query","description":"Species ID (only required when breeds are included).","schema":{"example":"2","type":"string"}},{"name":"env","required":false,"in":"query","description":"Non-prod environment","schema":{"example":"qa4","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"Practice config fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPimsPracticeConfigResponseDto"},"examples":{"default":{"summary":"Default Response","description":"Response when no include parameter is provided. Returns an empty object.","value":{}},"species":{"summary":"Species","description":"Response when requesting species. Returns all available species for the practice.","value":{"species":[{"id":"1","name":"Canine"},{"id":"2","name":"Feline"},{"id":"3","name":"Avian"},{"id":"4","name":"Equine"},{"id":"5","name":"Bovine"}]}},"breeds":{"summary":"Breeds","description":"Response when requesting breeds for a specific species. Requires species parameter in query.","value":{"breeds":[{"id":"1","name":"Labrador Retriever"},{"id":"2","name":"Golden Retriever"},{"id":"3","name":"German Shepherd"},{"id":"4","name":"French Bulldog"},{"id":"5","name":"Bulldog"},{"id":"6","name":"Beagle"},{"id":"7","name":"Poodle"},{"id":"8","name":"Rottweiler"}]}},"sexes":{"summary":"Sexes","description":"Response when requesting sexes. Returns a practice-wide sex list; the species query parameter is not required or used (including for Neo PIMS).","value":{"sexes":[{"id":"1","name":"Male"},{"id":"2","name":"Male Neutered"},{"id":"3","name":"Female"},{"id":"4","name":"Female Spayed"},{"id":"5","name":"Unknown Sex"}]}},"animalColors":{"summary":"Animal Colors","description":"Response when requesting animal colors. Returns all available animal colors for the practice.","value":{"animalColors":[{"id":"1","name":"Black"},{"id":"2","name":"White"},{"id":"3","name":"Brown"},{"id":"4","name":"Gray"},{"id":"5","name":"Red"}]}}}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"500":{"description":"Internal error"}},"security":[{"JWT-auth":[]}],"summary":"Get pims practice config","tags":["pims"]}},"/admin/pims/practice-config":{"get":{"description":"Fetch pims practice config for a practice from the PIMS. Only ezyVet and Neo are supported at present.","operationId":"AdminPimsPracticeConfigController_getPracticeConfig","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"EZYVET","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"site_cFtyNQRNNngN3wAybtLPK","type":"string"}},{"name":"branch","required":true,"in":"query","description":"Practice branch ID","schema":{"example":"hospital_wqnM6WhWaDSLbPgAORQys","type":"string"}},{"name":"include","required":false,"in":"query","description":"Animal color (animalcolor) is not supported when pims is NEO. (only included if requested).","schema":{"type":"string","enum":["species","breeds","sexes","animalcolor"]}},{"name":"species","required":false,"in":"query","description":"Species ID (only required when breeds are included).","schema":{"example":"2","type":"string"}},{"name":"env","required":false,"in":"query","description":"Non-prod environment","schema":{"example":"qa4","type":"string","enum":["demo","staging","qa4","qa3","qa2","qa"]}}],"responses":{"200":{"description":"Practice config fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPimsPracticeConfigResponseDto"},"examples":{"default":{"summary":"Default Response","description":"Response when no include parameter is provided. Returns an empty object.","value":{}},"species":{"summary":"Species","description":"Response when requesting species. Returns all available species for the practice.","value":{"species":[{"id":"1","name":"Canine"},{"id":"2","name":"Feline"},{"id":"3","name":"Avian"},{"id":"4","name":"Equine"},{"id":"5","name":"Bovine"}]}},"breeds":{"summary":"Breeds","description":"Response when requesting breeds for a specific species. Requires species parameter in query.","value":{"breeds":[{"id":"1","name":"Labrador Retriever"},{"id":"2","name":"Golden Retriever"},{"id":"3","name":"German Shepherd"},{"id":"4","name":"French Bulldog"},{"id":"5","name":"Bulldog"},{"id":"6","name":"Beagle"},{"id":"7","name":"Poodle"},{"id":"8","name":"Rottweiler"}]}},"sexes":{"summary":"Sexes","description":"Response when requesting sexes. Returns a practice-wide sex list; the species query parameter is not required or used (including for Neo PIMS).","value":{"sexes":[{"id":"1","name":"Male"},{"id":"2","name":"Male Neutered"},{"id":"3","name":"Female"},{"id":"4","name":"Female Spayed"},{"id":"5","name":"Unknown Sex"}]}},"animalColors":{"summary":"Animal Colors","description":"Response when requesting animal colors. Returns all available animal colors for the practice.","value":{"animalColors":[{"id":"1","name":"Black"},{"id":"2","name":"White"},{"id":"3","name":"Brown"},{"id":"4","name":"Gray"},{"id":"5","name":"Red"}]}}}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"500":{"description":"Internal error"}},"security":[{"X-API-KEY":[]}],"summary":"Get pims practice config","tags":["admin"]}},"/pims/prescriptions":{"get":{"description":"Retrieve a list of prescriptions from the datastore API using PIMS type, organization, and optional animal IDs.","operationId":"PimsPrescriptionController_getPrescriptionList","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"animals","required":true,"in":"query","description":"Array of animal IDs to fetch prescriptions for","schema":{"minItems":1,"example":["1","2"],"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Prescriptions retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPimsPrescriptionListResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get PIMS prescription list","tags":["pims"]}},"/prescription/refill-request":{"post":{"description":"Send prescription refill request to TwoWayMessaging","operationId":"PrescriptionRefillRequestController_postPrescriptionRefill","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrescriptionRefillRequest"},"examples":{"complete":{"summary":"push twoWay message to request prescription refill data","description":"Example with all possible fields","value":{"pims":"NEO","organization":"600318","branch":"1","animal":"51","animalName":"Beepo","owner":"24","ownerName":"testOwner","phone":"+16090396922","notes":"test notes","prescriptions":["rx-123455","rx-123456"]}}}}}},"responses":{"400":{"description":"Bad request - Invalid payload"},"401":{"description":"Unauthorized - Invalid or missing JWT token"},"404":{"description":"User profile not found - missing cognito username"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Post prescription refill request","tags":["prescription"]}},"/appointment-request/providers":{"get":{"deprecated":true,"description":"⚠️ DEPRECATED: This endpoint is deprecated and will be removed in a future version. Please use the new ProxyAppointmentsController instead. Retrieve a list of providers available for appointment requests.","operationId":"AppointmentRequestController_getProviders","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"branch","required":true,"in":"query","description":"Practice branch ID","schema":{"example":"1","type":"string"}},{"name":"appointmentCategory","required":true,"in":"query","description":"Appointment category to get providers for","schema":{"example":"WELLNESS_VISIT","type":"string"}}],"responses":{"200":{"description":"Returns the list of available providers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProvidersResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get appointment request providers","tags":["appointment-request (DEPRECATED)"]}},"/appointment-request/availability":{"get":{"deprecated":true,"description":"⚠️ DEPRECATED: This endpoint is deprecated and will be removed in a future version. Please use the new ProxyAppointmentsController instead. Retrieve a list of availability slots available for a provider. If no passed in provider then it will use all available providers","operationId":"AppointmentRequestController_getAvailability","parameters":[{"name":"pims","required":true,"in":"query","description":"PIMS type identifier","schema":{"example":"NEO","type":"string","enum":["NEO","EZYVET","CORNERSTONE"]}},{"name":"organization","required":true,"in":"query","description":"Practice organization ID","schema":{"example":"6001","type":"string"}},{"name":"branch","required":true,"in":"query","description":"Practice branch ID","schema":{"example":"1","type":"string"}},{"name":"provider","required":false,"in":"query","description":"Provider ID","schema":{"example":"2","type":"string"}},{"name":"start","required":true,"in":"query","description":"Start date for slots","schema":{"example":"2025-07-10","type":"string"}},{"name":"end","required":true,"in":"query","description":"End date for slots","schema":{"example":"2025-07-11","type":"string"}},{"name":"appointmentCategory","required":true,"in":"query","description":"Appointment category","schema":{"example":"WELLNESS_VISIT","type":"string"}}],"responses":{"200":{"description":"Returns the list of availability for a provider","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAvailabilityResponseDto"}}}},"400":{"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"404":{"description":"Availability not found"},"500":{"description":"Internal server error"}},"security":[{"JWT-auth":[]}],"summary":"Get appointment request availability slots","tags":["appointment-request (DEPRECATED)"]}},"/appointment-request":{"post":{"deprecated":true,"description":"⚠️ DEPRECATED: This endpoint is deprecated and will be removed in a future version. Please use the new ProxyAppointmentsController instead.","operationId":"AppointmentRequestController_requestAppointment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAppointmentRequestDto"}}}},"responses":{"201":{"description":"Returns appointment request booking id"},"400":{"description":"Invalid request data"},"401":{"description":"Unauthorized"},"403":{"description":"Permission denied"}},"security":[{"JWT-auth":[]},{"JWT-auth":[]}],"summary":"Submit an appointment request","tags":["appointment-request (DEPRECATED)"]}},"/proxy/appointments/{path}":{"get":{"operationId":"ProxyAppointmentsController_proxy_get","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]},"post":{"operationId":"ProxyAppointmentsController_proxy_post","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]},"put":{"operationId":"ProxyAppointmentsController_proxy_put","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]},"delete":{"operationId":"ProxyAppointmentsController_proxy_delete","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]},"patch":{"operationId":"ProxyAppointmentsController_proxy_patch","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]},"options":{"operationId":"ProxyAppointmentsController_proxy_options","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]},"head":{"operationId":"ProxyAppointmentsController_proxy_head","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]},"search":{"operationId":"ProxyAppointmentsController_proxy_search","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"tags":["proxy/appointments"]}},"/proxy/admin/appointments/{path}":{"get":{"operationId":"ProxyAppointmentsAdminController_proxy_get","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]},"post":{"operationId":"ProxyAppointmentsAdminController_proxy_post","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]},"put":{"operationId":"ProxyAppointmentsAdminController_proxy_put","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]},"delete":{"operationId":"ProxyAppointmentsAdminController_proxy_delete","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]},"patch":{"operationId":"ProxyAppointmentsAdminController_proxy_patch","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]},"options":{"operationId":"ProxyAppointmentsAdminController_proxy_options","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]},"head":{"operationId":"ProxyAppointmentsAdminController_proxy_head","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]},"search":{"operationId":"ProxyAppointmentsAdminController_proxy_search","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-KEY":[]}],"tags":["proxy/admin/appointments"]}}},"info":{"title":"Client Portal Service API","description":"API documentation for the Client Portal Service API(CPS API)","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"X-API-KEY":{"type":"apiKey","in":"header","name":"X-API-KEY"},"JWT-auth":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Enter AWS Cognito JWT token (access token)"}},"schemas":{"AddressAutocompleteResponseDto":{"type":"object","properties":{"data":{"type":"object","example":{"suggestions":[{"placeId":"AQAAAFAAjExample123","label":"123 Main St, Springfield, IL 62701, USA","addressLine1":"123 Main St","addressLine2":"","city":"Springfield","region":"IL","postalCode":"62701","country":"US"}]}}},"required":["data"]},"RecommendedCareItemDto":{"type":"object","properties":{"animal":{"type":"string","description":"Animal ID associated with this medical record","example":"animal_VIKhbqfhZzWlIJ3i0xhdP"},"maskedServiceReminderId":{"type":"string","description":"Masked service reminder ID (SHA-256 hash)","example":"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"},"dueDate":{"type":"string","description":"Due date of the medical record","example":"2025-04-02T17:14"},"lastCompletedDate":{"type":"string","description":"Last completed date of the medical record","example":"2024-04-02T17:14"},"status":{"type":"string","description":"Due status of the medical record","enum":["OVERDUE","COMING DUE","UP TO DATE"],"example":"COMING DUE"},"clientFriendlyName":{"type":"string","description":"Client-friendly name for this care item","example":"Annual Wellness Exam"},"cost":{"type":"object","description":"Cost information for this care item","example":{"costType":"Range","minCost":"80","maxCost":"100"}},"education":{"type":"object","description":"Education information for this care item","example":{"appointmentRequestEnabled":true,"educationContent":"Annual wellness examination","note":"This is an annual well visit examination performed by one of our veterinarians"}},"reason":{"type":"string","description":"Reason for this care item","example":"Annual Wellness Exam"}},"required":["animal","maskedServiceReminderId","status","clientFriendlyName","cost","education","reason"]},"AnimalStatusItemDto":{"type":"object","properties":{"label":{"type":"string","description":"Medical record status key","enum":["OVERDUE","COMING DUE","UP TO DATE"],"example":"COMING DUE"},"careItems":{"description":"Array of care items for this status","type":"array","items":{"$ref":"#/components/schemas/RecommendedCareItemDto"}}},"required":["label","careItems"]},"AnimalCareItemDto":{"type":"object","properties":{"animal":{"type":"string","description":"Animal ID","example":"animal_VIKhbqfhZzWlIJ3i0xhdP"},"enabled":{"type":"boolean","description":"Whether this animal has recommended care items","example":true},"careScore":{"type":"number","description":"Care score percentage (0-100)","example":85},"statusItems":{"description":"Array of animal status items grouped by medical record status","type":"array","items":{"$ref":"#/components/schemas/AnimalStatusItemDto"}}},"required":["animal","enabled","careScore","statusItems"]},"RecommendedCareConfigDto":{"type":"object","properties":{"recommendedCare":{"type":"boolean","description":"Whether recommended care is enabled","example":true},"showScore":{"type":"boolean","description":"Whether to show care scores","example":true},"animalCareList":{"description":"Array of animal data with recommended care information","type":"array","items":{"$ref":"#/components/schemas/AnimalCareItemDto"}}},"required":["recommendedCare","showScore","animalCareList"]},"GetRecommendedCareConfigResponseDto":{"type":"object","properties":{"data":{"description":"Response data containing recommended care configuration","allOf":[{"$ref":"#/components/schemas/RecommendedCareConfigDto"}]}},"required":["data"]},"AssetResponseDto":{"type":"object","properties":{"assetData":{"type":"string","description":"The asset as a base64 data URL","example":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="}},"required":["assetData"]},"GetAssetResponseDto":{"type":"object","properties":{"data":{"description":"The asset data","allOf":[{"$ref":"#/components/schemas/AssetResponseDto"}]}},"required":["data"]},"RecommendedCareEducationMaterialContentDto":{"type":"object","properties":{}},"RecommendedCareEducationMaterialDto":{"type":"object","properties":{"id":{"type":"string","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"service":{"type":"string","example":"Annual Wellness Exam","description":"Service"},"content":{"example":{"description":"Preventive Care\nA comprehensive check-up performed at least once a year, including a physical exam (eyes, ears, mouth, skin, coat), listening to the heart and lungs, assessing weight, and discussing behavioral or dietary concerns. Bloodwork and urinalysis may be recommended to establish a baseline of health. \nHelps in early detection of diseases"},"description":"Content description","allOf":[{"$ref":"#/components/schemas/RecommendedCareEducationMaterialContentDto"}]}},"required":["id","service","content"]},"FindAllRecommendedCareEducationMaterialsResponseDto":{"type":"object","properties":{"data":{"example":{"recommendedCareEducationMaterials":[{"id":"e493ac24-e749-4737-a292-2ecc1057a418","service":"Annual Wellness Exam","content":{"description":"Preventive Care\nA comprehensive check-up performed at least once a year, including a physical exam (eyes, ears, mouth, skin, coat), listening to the heart and lungs, assessing weight, and discussing behavioral or dietary concerns. Bloodwork and urinalysis may be recommended to establish a baseline of health. \nHelps in early detection of diseases"}}]},"type":"array","items":{"$ref":"#/components/schemas/RecommendedCareEducationMaterialDto"}}},"required":["data"]},"FindSingleRecommendedCareEducationMaterialResponseDto":{"type":"object","properties":{"data":{"example":{"recommendedCareEducationMaterial":{"id":"e493ac24-e749-4737-a292-2ecc1057a418","service":"Annual Wellness Exam","content":{"description":"Preventive Care\nA comprehensive check-up performed at least once a year, including a physical exam (eyes, ears, mouth, skin, coat), listening to the heart and lungs, assessing weight, and discussing behavioral or dietary concerns. Bloodwork and urinalysis may be recommended to establish a baseline of health. \nHelps in early detection of diseases"}}},"allOf":[{"$ref":"#/components/schemas/RecommendedCareEducationMaterialDto"}]}},"required":["data"]},"CreateRecommendedCareEducationMaterialRequestBodyDto":{"type":"object","properties":{"service":{"type":"string","example":"Annual Wellness Exam","description":"Service"},"content":{"type":"object","example":{"description":"Preventive Care\nA comprehensive check-up performed at least once a year, including a physical exam (eyes, ears, mouth, skin, coat), listening to the heart and lungs, assessing weight, and discussing behavioral or dietary concerns. Bloodwork and urinalysis may be recommended to establish a baseline of health. \nHelps in early detection of diseases"},"description":"Content description"}},"required":["service","content"]},"BulkCreateRecommendedCareEducationMaterialArrayRequestBodyDto":{"type":"object","properties":{"items":{"description":"Array of education materials to create","example":[{"service":"Annual Wellness Exam","content":{"description":"Preventive Care\nA comprehensive check-up performed at least once a year, including a physical exam (eyes, ears, mouth, skin, coat), listening to the heart and lungs, assessing weight, and discussing behavioral or dietary concerns. Bloodwork and urinalysis may be recommended to establish a baseline of health. \nHelps in early detection of diseases"}},{"service":"Rabies Vaccine","content":{"description":"Preventive (Vaccination)\nA mandatory vaccine protecting against rabies, a deadly virus affecting the central nervous system of mammals (including humans). Administered annually or every three years based on local regulations and vaccine type.\nIt's a legal requirement in most areas and crucial for public health, preventing a fatal disease that can spread to humans."}}],"type":"array","items":{"$ref":"#/components/schemas/CreateRecommendedCareEducationMaterialRequestBodyDto"}}},"required":["items"]},"GetPracticeServiceConfigDataType":{"type":"object","properties":{}},"GetPracticeServiceConfigResponseDto":{"type":"object","properties":{"data":{"example":{"globalConfig":{"id":"e493ac24-e749-4737-a292-2ecc1057a418","configData":{"enabled":true,"showScore":true}},"specificConfigList":[{"id":"e493ac24-e749-4737-a292-2ecc1057a418","recordRowKey":"EZYVET#site_vwlu5JszEKw8ywYBdewOs:ownershipSeparation_bFSWnXIEDLSvnH3RjeaKQ#SERVICEREMINDERTYPE:socGroup_H0mRjUDLgwzilPp6D21oo#","configData":{"serviceReminderTypeId":"socGroup_H0mRjUDLgwzilPp6D21oo","enabled":true,"addToCareScore":true,"clientFriendlyName":"Rabies","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"educationContent":"Rabies is a core vaccine.","note":"This service is recommended for your pet."},"reason":"Rabies"}}]},"allOf":[{"$ref":"#/components/schemas/GetPracticeServiceConfigDataType"}]}},"required":["data"]},"PutPracticeServiceGlobalConfigRequestBodyDto":{"type":"object","properties":{"organization":{"type":"string","description":"The practice organization ID","example":"site_vwlu5JszEKw8ywYBdewOs"},"pims":{"type":"string","description":"The PIMS type name","enum":["NEO","EZYVET","CORNERSTONE"],"example":"EZYVET"},"branch":{"type":"string","description":"The practice branch ID","example":"ownershipSeparation_bFSWnXIEDLSvnH3RjeaKQ"},"service":{"type":"string","description":"The service name","enum":["RecommendedCare","ClientPermissions","PrescriptionConfig"],"example":"RecommendedCare"},"configData":{"type":"object","description":"Configuration data that varies by service type."}},"required":["organization","pims","branch","service","configData"]},"PutPracticeServiceSpecificConfigRequestBodyDto":{"type":"object","properties":{"organization":{"type":"string","description":"The practice organization ID","example":"site_vwlu5JszEKw8ywYBdewOs"},"pims":{"type":"string","description":"The PIMS type name","enum":["NEO","EZYVET","CORNERSTONE"],"example":"EZYVET"},"branch":{"type":"string","description":"The practice branch ID","example":"ownershipSeparation_bFSWnXIEDLSvnH3RjeaKQ"},"service":{"type":"string","description":"The service name","enum":["RecommendedCare","ClientPermissions","PrescriptionConfig"],"example":"RecommendedCare"},"configList":{"example":[{"recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_9t9Tv8LzKKgdJJmF3Gx2t#","serviceReminderTypeId":"socGroup_9t9Tv8LzKKgdJJmF3Gx2t","enabled":true,"addToCareScore":true,"clientFriendlyName":"Comprehensive Wellness Exam","cost":{"costType":"Range","minCost":"150","maxCost":"300"},"education":{"appointmentRequestEnabled":true,"educationContent":"Annual wellness exams help detect health issues early...","note":"Veterinarians recommend annual wellness exams for all pets"},"reason":"Comprehensive Wellness Exam"},{"recordRowKey":"EZYVET#site_NTChG6U9KZEK73Ll3uCAR:ownershipSeparation_BnDsVPsM4Aq81Px7AHPzn#SERVICEREMINDERTYPE:socGroup_GzEEf4gN9hflwJVjnlOdb#","serviceReminderTypeId":"socGroup_GzEEf4gN9hflwJVjnlOdb","enabled":true,"addToCareScore":false,"clientFriendlyName":"Wellness Blood and Urine Screen","cost":{"costType":"Range","minCost":"80","maxCost":"150"},"education":{"appointmentRequestEnabled":false,"educationContent":"What to expect...","note":"Research suggests screening tests can identify issues in 40% of dogs and 60% of cats"},"reason":"Wellness Blood and Urine Screen"}],"description":"Config data array - RecommendedCareConfigItem for RecommendedCare, OwnerConfigItem or AnimalConfigItem for ClientPermissions","type":"array","items":{"type":"string"}}},"required":["organization","pims","branch","service","configList"]},"PracticeEnrollmentDto":{"type":"object","properties":{"sourceEnv":{"type":"string","example":"qa","description":"Source environment for the enrollment record","enum":["prod","demo","staging","qa4","qa3","qa2","qa"]},"id":{"type":"string","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"organization":{"type":"string","example":"6001","description":"Organization ID"},"pims":{"type":"string","example":"NEO","description":"PIMS type"},"branch":{"type":"string","example":"1","description":"Branch ID"},"practiceRowKey":{"type":"string","example":"NEO#6001:1#","description":"Practice row key"},"practiceName":{"type":"string","example":"Advanced Pet Care","description":"Practice name"},"practiceVoicePhone":{"type":"string","example":"+12345678900","description":"E.164 Formatted Voice capable Phone number"},"practiceTextNumber":{"type":"string","example":"+12223334444","description":"E.164 Formatted SMS capable Phone number"},"practiceEmailAddress":{"type":"string","example":"test@test.com","description":"General practice inquiry e-mail address"},"practiceWebsite":{"type":"string","example":"https://www.happypaws.com","description":"Practice website URL"},"imageId":{"type":"string","example":"019dbc5b-256a-7f2e-888c-d8c6bb243efb","description":"Practice logo image ID"},"enrollmentDate":{"type":"string","example":"2025-01-20","description":"Enrollment date. It is used by billing and sales and should indicate when a practice activated Vello, even if they postpone their startDate for automated communications"},"isVelloActive":{"type":"boolean","example":true,"description":"Flag which is true for practices with a live Vello subscription, and false if the practice has offboarded"},"billingSapId":{"type":"string","example":"123456","description":"Billing SAP ID"},"deactivationDate":{"type":"string","example":"2025-01-20","description":"The date a practice offboards and should no longer be billed for Vello"},"primaryContactName":{"type":"string","example":"John Doe","description":"Primary contact name"},"primaryContactEmail":{"type":"string","example":"test@test.com","description":"Primary contact email"},"lastModified":{"type":"string","example":"2025-01-20","description":"Last modified date"},"practiceAddressLine1":{"type":"string","example":"123 Main St","description":"Practice address line 1"},"practiceAddressLine2":{"type":"string","example":"Apt 1","description":"Practice address line 2"},"practiceAddressLine3":{"type":"string","example":"Floor 2","description":"Practice address line 3"},"practiceAddressCity":{"type":"string","example":"New York","description":"Practice address city"},"practiceAddressState":{"type":"string","example":"NY","description":"Practice address state"},"practiceAddressPostalCode":{"type":"string","example":"10001","description":"Practice address postal code"},"practiceAddressCountryCode":{"type":"string","example":"US","description":"Practice address country code"},"practiceIanaZone":{"type":"string","example":"America/New_York","description":"IANA Time Zone Database"},"dataPointSiteId":{"type":"number","example":12345,"description":"Data point site ID. Only for Cornerstone practices"},"twoWayMessagingCampaignEnrollmentEnabledAt":{"type":"string","example":"2025-01-24T15:47:13.381Z","description":"Two way messaging campaign enrollment enabled at timestamp"}},"required":["sourceEnv","id","organization","pims","branch","practiceRowKey","practiceName","practiceVoicePhone","practiceEmailAddress","isVelloActive","lastModified","practiceAddressLine1","practiceAddressCity","practiceAddressState","practiceAddressPostalCode","practiceAddressCountryCode","practiceIanaZone"]},"GetAllPracticeEnrollmentsResponseDto":{"type":"object","properties":{"data":{"example":{"practiceEnrollments":[{"sourceEnv":"qa","id":"e493ac24-e749-4737-a292-2ecc1057a418","organization":"6001","pims":"NEO","branch":"1","practiceRowKey":"NEO#6001:1#","practiceName":"Advanced Pet Care","practiceVoicePhone":"+12345678900","practiceTextNumber":"+12223334444","practiceEmailAddress":"test@test.com","imageId":"019dbc5b-256a-7f2e-888c-d8c6bb243efb","enrollmentDate":"2025-01-20","isVelloActive":true,"billingSapId":"123456","deactivationDate":"2025-10-20","primaryContactName":"John Doe","primaryContactEmail":"test@test.com","lastModified":"2025-01-20T00:00:00.000Z","practiceFullAddress":"123 Main St, Apt 1, Floor 2, New York, NY 10001","practiceAddressLine1":"123 Main St","practiceAddressLine2":"Apt 1","practiceAddressLine3":"Floor 2","practiceAddressCity":"New York","practiceAddressState":"NY","practiceAddressPostalCode":"10001","practiceAddressCountryCode":"US","practiceIanaZone":"America/New_York","dataPointSiteId":12345,"twoWayMessagingCampaignEnrollmentEnabledAt":"2025-01-24T15:47:13.381Z","practiceShortlink":"myneoclinic","excludedServiceReminderTypeIds":[]}]},"allOf":[{"$ref":"#/components/schemas/PracticeEnrollmentDto"}]}},"required":["data"]},"GetPracticeEnrollmentResponseDto":{"type":"object","properties":{"data":{"example":{"practiceEnrollment":{"sourceEnv":"qa","id":"e493ac24-e749-4737-a292-2ecc1057a418","organization":"6001","pims":"NEO","branch":"1","practiceRowKey":"NEO#6001:1#","practiceName":"Advanced Pet Care","practiceVoicePhone":"+12345678900","practiceTextNumber":"+12223334444","practiceEmailAddress":"test@test.com","imageId":"019dbc5b-256a-7f2e-888c-d8c6bb243efb","enrollmentDate":"2025-01-20","isVelloActive":true,"billingSapId":"123456","deactivationDate":"2025-10-20","primaryContactName":"John Doe","primaryContactEmail":"test@test.com","lastModified":"2025-01-20T00:00:00.000Z","practiceFullAddress":"123 Main St, Apt 1, Floor 2, New York, NY 10001","practiceAddressLine1":"123 Main St","practiceAddressLine2":"Apt 1","practiceAddressLine3":"Floor 2","practiceAddressCity":"New York","practiceAddressState":"NY","practiceAddressPostalCode":"10001","practiceAddressCountryCode":"US","practiceIanaZone":"America/New_York","dataPointSiteId":12345,"twoWayMessagingCampaignEnrollmentEnabledAt":"2025-01-24T15:47:13.381Z","practiceShortlink":"myneoclinic","excludedServiceReminderTypeIds":[]}},"allOf":[{"$ref":"#/components/schemas/PracticeEnrollmentDto"}]}},"required":["data"]},"PracticeServiceReminderTypesDto":{"type":"object","properties":{"id":{"type":"string","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"organization":{"type":"string","example":"6001","description":"Organization ID"},"pims":{"type":"string","example":"NEO","description":"PIMS type"},"branch":{"type":"string","example":"1","description":"Branch ID"},"serviceReminderTypes":{"example":{"row_key":"NEO#6001:1#SERVICEREMINDERTYPE:1#","id":"1","reason":"service reminder type reason"},"description":"Service reminder types data","type":"array","items":{"type":"string"}}},"required":["id","organization","pims","branch","serviceReminderTypes"]},"GetPracticeServiceReminderTypesResponseDto":{"type":"object","properties":{"data":{"example":{"id":"e493ac24-e749-4737-a292-2ecc1057a418","organization":"6001","pims":"NEO","branch":"1","serviceReminderTypes":[{"row_key":"NEO#6001:1#SERVICEREMINDERTYPE:1#","id":"1","reason":"service reminder type reason"}]},"allOf":[{"$ref":"#/components/schemas/PracticeServiceReminderTypesDto"}]}},"required":["data"]},"PutPracticeServiceReminderTypesBodyDto":{"type":"object","properties":{"organization":{"type":"string","description":"The practice organization ID","example":"6001"},"pims":{"type":"string","description":"The PIMS type name","enum":["NEO","EZYVET","CORNERSTONE"],"example":"NEO"},"branch":{"type":"string","description":"The practice branch ID","example":"1"},"serviceReminderTypes":{"example":[{"row_key":"NEO#6001:1#SERVICEREMINDERTYPE:1#","id":"1","reason":"service reminder type reason"}],"description":"Service reminder types data","type":"array","items":{"type":"string"}}},"required":["organization","pims","branch","serviceReminderTypes"]},"PracticeRecommendedCareConfigDto":{"type":"object","properties":{"practiceRowKey":{"type":"string","example":"NEO#6001:1#","description":"Practice RowKey"},"recommendedCare":{"type":"boolean","example":true,"description":"Recommended Care enabled or not"},"showScore":{"type":"boolean","example":true,"description":"Recommended Care show score enabled or not"},"serviceData":{"example":[{"clientFriendlyName":"reason1","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"note":"This service is recommended for your pet.","educationContent":""},"enabled":true,"addToCareScore":true,"reason":"reason1","recordRowKey":"NEO#6001:1#SERVICEREMINDERTYPE:1#","serviceReminderTypeId":"1"},{"clientFriendlyName":"reason2","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"note":"This service is recommended for your pet.","educationContent":""},"enabled":true,"addToCareScore":true,"reason":"reason2","recordRowKey":"NEO#6001:1#SERVICEREMINDERTYPE:2#","serviceReminderTypeId":"2"}],"description":"Recommended Care service data","type":"array","items":{"type":"string"}}},"required":["practiceRowKey","recommendedCare","showScore","serviceData"]},"GetPracticeRecommendedCareConfigResponseDto":{"type":"object","properties":{"data":{"example":{"practiceRowKey":"NEO#6001:1#","recommendedCare":true,"showScore":true,"serviceData":[{"clientFriendlyName":"reason1","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"note":"This service is recommended for your pet.","educationContent":""},"enabled":true,"addToCareScore":true,"reason":"reason1","recordRowKey":"NEO#6001:1#SERVICEREMINDERTYPE:1#","serviceReminderTypeId":"1"},{"clientFriendlyName":"reason2","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"note":"This service is recommended for your pet.","educationContent":""},"enabled":true,"addToCareScore":true,"reason":"reason2","recordRowKey":"NEO#6001:1#SERVICEREMINDERTYPE:2#","serviceReminderTypeId":"2"}]},"allOf":[{"$ref":"#/components/schemas/PracticeRecommendedCareConfigDto"}]}},"required":["data"]},"PutPracticeRecommendedCareConfigRequestBodyDto":{"type":"object","properties":{"organization":{"type":"string","description":"The practice organization ID","example":"6001"},"pims":{"type":"string","description":"The PIMS type name","enum":["NEO","EZYVET","CORNERSTONE"],"example":"NEO"},"branch":{"type":"string","description":"The practice branch ID","example":"1"},"recordRowKey":{"type":"string","example":"NEO#6001:1#SERVICEREMINDERTYPE:1#","description":"Record row key"},"recordType":{"type":"string","example":"RecommendedCare","description":"Record type","enum":["RecommendedCare","Data"]},"recommendedCare":{"type":"boolean","example":true,"description":"Recommended Care enabled or not"},"showScore":{"type":"boolean","example":true,"description":"Recommended Care show score enabled or not"},"serviceData":{"type":"object","example":[{"clientFriendlyName":"reason1","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"note":"This service is recommended for your pet.","educationContent":""},"enabled":true,"addToCareScore":true,"reason":"reason1","recordRowKey":"NEO#6001:1#SERVICEREMINDERTYPE:1#","serviceReminderTypeId":"1"},{"clientFriendlyName":"reason2","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"note":"This service is recommended for your pet.","educationContent":""},"enabled":true,"addToCareScore":true,"reason":"reason2","recordRowKey":"NEO#6001:1#SERVICEREMINDERTYPE:2#","serviceReminderTypeId":"2"}],"description":"Recommended Care service data"}},"required":["organization","pims","branch","recordRowKey","recordType"]},"PutRecommendedCareConfigArrayRequestBodyDto":{"type":"object","properties":{"items":{"description":"Array of recommended care config to upsert","example":[{"organization":"600186","pims":"NEO","branch":"1","recordRowKey":"NEO#600186:1#SERVICEREMINDERTYPE:1WK#","recordType":"Data","serviceData":{"enabled":true,"addToCareScore":true,"reason":"1 Week Reminder Call","clientFriendlyName":"1 Week Reminder Call","serviceReminderTypeId":"1WK","recordRowKey":"NEO#600186:1#SERVICEREMINDERTYPE:1WK#","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"educationContent":"","note":"This service is recommended for your pet."}}},{"organization":"600186","pims":"NEO","branch":"1","recordRowKey":"NEO#600186:1#SERVICEREMINDERTYPE:2#","recordType":"Data","serviceData":{"enabled":true,"addToCareScore":false,"reason":"Bordetella Vaccination Inject  1 Year","clientFriendlyName":"Bordetella Vaccination Inject  1 Year","serviceReminderTypeId":"2","recordRowKey":"NEO#600186:1#SERVICEREMINDERTYPE:2#","cost":{"costType":"Don't Show Cost","maxCost":"","minCost":""},"education":{"appointmentRequestEnabled":true,"educationContent":"","note":"This service is recommended for your pet."}}},{"organization":"600186","pims":"NEO","branch":"1","recordRowKey":"NEO#600186:1#RecommendedCare","recordType":"RecommendedCare","recommendedCare":true,"showScore":true}],"type":"array","items":{"$ref":"#/components/schemas/PutPracticeRecommendedCareConfigRequestBodyDto"}}},"required":["items"]},"PimsAnimalResponseDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","example":"NEO"},"organization":{"type":"string","description":"PIMS organization identifier","example":"123"},"active":{"type":"boolean","description":"Animal status","example":true},"species":{"type":"string","description":"Animal species","example":"Feline"},"sex":{"type":"string","description":"Animal sex","example":"Male Neutered"},"weightAmount":{"type":"number","description":"Animal weight amount","example":5},"weightUnit":{"type":"string","description":"Animal weight unit","example":"lbs"},"deceased":{"type":"boolean","description":"Animal deceased","example":false},"breed":{"type":"string","description":"Animal breed","example":"Tabby"},"color":{"type":"string","description":"Animal color","example":"Black & Brown"},"birthDate":{"type":"string","description":"Animal birthdate","example":"2011-03-11"},"microchipId":{"type":"string","description":"Animal microchip id","example":"123"},"id":{"type":"string","description":"Animal id","example":"1"},"owner":{"type":"string","description":"Animal owner id","example":"2"},"name":{"type":"string","description":"Animal name","example":"Burger"},"modified":{"type":"string","description":"Last modified timestamp","example":"2024-01-15T10:30:00Z"}},"required":["pims","organization","active","species","sex","weightAmount","weightUnit","deceased","breed","color","birthDate","microchipId","id","owner","name","modified"]},"GetAnimalsQueryResponseDto":{"type":"object","properties":{"data":{"example":{"animals":[{"pims":"NEO","organization":"1234","active":true,"species":"Canine","sex":"Female Spayed","weightAmount":42.3,"weightUnit":"lbs","deceased":false,"breed":"Labrador","color":"Brown","birthDate":"2022-01-01","id":"1","owner":"456DEF","name":"Bella","modified":"2024-01-15T10:30:00Z"}]},"allOf":[{"$ref":"#/components/schemas/PimsAnimalResponseDto"}]}},"required":["data"]},"PostPimsAnimalRequestDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","enum":["NEO","EZYVET","CORNERSTONE"],"example":"EZYVET"},"organization":{"type":"string","description":"Practice organization ID","example":"site_cFtyNQRNNngN3wAybtLPK"},"branch":{"type":"string","description":"Practice branch ID","example":"hospital_wqnM6WhWaDSLbPgAORQys"},"owner":{"type":"string","description":"Animal owner ID in the PIMS system","example":"contact_R9fiF3oKec1HnveaHiYYr"},"name":{"type":"string","description":"Animal name","example":"Buddy"},"dateOfBirth":{"type":"number","description":"Animal date of birth as ISO date string (YYYY-MM-DD)","example":"2011-02-11"},"isEstimatedDateOfBirth":{"type":"boolean","description":"Whether the date of birth is estimated (true) or exact (false). Required for Ezyvet PIMS.","example":false},"species":{"type":"string","description":"Species ID from PIMS","example":"1"},"breed":{"type":"string","description":"Breed ID from PIMS","example":"1"},"sex":{"type":"string","description":"Sex ID from PIMS","example":"1"},"animalcolor":{"type":"string","description":"Color ID from PIMS","example":"1"}},"required":["pims","organization","branch","owner","name","dateOfBirth","species","breed","sex","animalcolor"]},"PostPimsAnimal":{"type":"object","properties":{"id":{"type":"string","description":"Created animal ID","example":"animal_YmZ7yH7XhbFt1BJq0MHXE"},"name":{"type":"string","description":"Animal name","example":"Potato"}},"required":["id","name"]},"PostPimsAnimalData":{"type":"object","properties":{"animal":{"description":"Created animal information","allOf":[{"$ref":"#/components/schemas/PostPimsAnimal"}]}},"required":["animal"]},"PostPimsAnimalResponseDto":{"type":"object","properties":{"data":{"description":"The response data","allOf":[{"$ref":"#/components/schemas/PostPimsAnimalData"}]}},"required":["data"]},"PatchPimsAnimalRequestDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","enum":["NEO","EZYVET","CORNERSTONE"],"example":"EZYVET"},"organization":{"type":"string","description":"Practice organization ID","example":"site_vwlu5JszEKw8ywYBdewOs"},"branch":{"type":"string","description":"Practice branch ID. Required when patching Neo animals (API key resolution); ignored for ezyVet and other PIMS that authenticate at organization scope.","example":"1"},"id":{"type":"string","description":"Animal ID in the PIMS system. ezyVet: animal UID string. Neo: numeric patient ID as a string (e.g. \"12345\").","example":"animal_YmZ7yH7XhbFt1BJq0MHXE"},"name":{"type":"string","description":"Animal name","example":"Buddy"},"dateOfBirth":{"type":"number","description":"Animal date of birth as ISO date string (YYYY-MM-DD)","example":"2011-02-11"},"isEstimatedDateOfBirth":{"type":"boolean","description":"Whether the date of birth is estimated (true) or exact (false)","example":false},"species":{"type":"string","description":"Species ID from PIMS","example":"1"},"breed":{"type":"string","description":"Breed ID from PIMS","example":"1"},"sex":{"type":"string","description":"Sex ID from PIMS","example":"1"},"animalcolor":{"type":"string","description":"Color ID from PIMS","example":"1"},"deceased":{"type":"boolean","description":"The animal is deceased (true) or alive (false)","example":false}},"required":["pims","organization","id"]},"PimsAnimalOwnerResponseDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","example":"NEO"},"organization":{"type":"string","description":"Practice organization ID","example":"6001"},"branch":{"type":"string","description":"Practice branch ID","example":"1"},"id":{"type":"string","description":"Animal owner ID","example":"1"},"active":{"type":"boolean","description":"Owner active status","example":true},"title":{"type":"string","description":"Owner title (Mr., Mrs., Dr., etc.)","example":"Mr."},"firstName":{"type":"string","description":"Owner first name","example":"John"},"lastName":{"type":"string","description":"Owner last name","example":"Doe"},"addressLine1":{"type":"string","description":"Address line 1","example":"123 Main St"},"addressLine2":{"type":"string","description":"Address line 2","example":"Apt 4B"},"addressLine3":{"type":"string","description":"Address line 3","example":""},"postalCode":{"type":"string","description":"Postal code","example":"12345"},"city":{"type":"string","description":"City","example":"Anytown"},"region":{"type":"string","description":"State/Region","example":"CA"},"country":{"type":"string","description":"Country","example":"US"},"phone":{"type":"string","description":"Phone number","example":"+1-555-123-4567"},"email":{"type":"string","description":"Email address","example":"john.doe@example.com"},"fullAddress":{"type":"string","description":"Full formatted address","example":"123 Main St, Apt 4B, Anytown, CA 12345"},"modified":{"type":"string","description":"Last modified timestamp","example":"2024-01-15T10:30:00Z"}},"required":["pims","organization","id","active","firstName","lastName","fullAddress","modified"]},"PimsAnimalOwnerType":{"type":"object","properties":{"animalOwner":{"$ref":"#/components/schemas/PimsAnimalOwnerResponseDto"}},"required":["animalOwner"]},"GetPimsAnimalOwnerResponseDto":{"type":"object","properties":{"data":{"description":"The data object containing animalOwners","example":{"animalOwner":{"pims":"NEO","organization":"6001","branch":"1","id":"1","active":true,"title":"Mr.","firstName":"John","lastName":"Doe","addressLine1":"123 Main St","addressLine2":"Apt 4B","postalCode":"12345","city":"Anytown","region":"CA","country":"US","phone":"+1-555-123-4567","email":"john.doe@example.com","fullAddress":"123 Main St, Apt 4B, Anytown, CA 12345","modified":"2024-01-15T10:30:00Z"}},"allOf":[{"$ref":"#/components/schemas/PimsAnimalOwnerType"}]}},"required":["data"]},"PostPimsAnimalOwnerRequestDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","enum":["NEO","EZYVET","CORNERSTONE"],"example":"EZYVET"},"organization":{"type":"string","description":"Practice organization ID","example":"site_cFtyNQRNNngN3wAybtLPK"},"branch":{"type":"string","description":"Practice branch ID","example":"hospital_wqnM6WhWaDSLbPgAORQys"},"firstName":{"type":"string","description":"Owner first name","example":"John"},"lastName":{"type":"string","description":"Owner last name","example":"Doe"},"dateOfBirth":{"type":"number","description":"Owner date of birth as ISO date string (YYYY-MM-DD). Required for EZYVET.","example":"2011-02-11"},"phone":{"type":"string","description":"Phone number","example":"+15551234567"},"email":{"type":"string","description":"Email address","example":"john.doe@example.com"},"addressLine1":{"type":"string","description":"Street address line 1","example":"123 Main St"},"addressLine2":{"type":"string","description":"Street address line 2 (apartment, suite, etc.)","example":"Apt 4B"},"city":{"type":"string","description":"City","example":"Springfield"},"region":{"type":"string","description":"State, province, or region","example":"IL"},"postalCode":{"type":"string","description":"Postal or ZIP code","example":"62701"},"country":{"type":"string","description":"Country (ISO 3166-1 alpha-2 code or full name)","examples":{"iso":{"value":"US"},"fullName":{"value":"United States"}}}},"required":["pims","organization","branch","firstName","lastName","phone","email"]},"PostPimsAnimalOwner":{"type":"object","properties":{"id":{"type":"string","description":"Created animal owner ID","example":"contact_R9fiF3oKec1HnveaHiYYr"},"firstName":{"type":"string","description":"Owner first name","example":"John"},"lastName":{"type":"string","description":"Owner last name","example":"Doe"}},"required":["id","firstName","lastName"]},"PostPimsAnimalOwnerData":{"type":"object","properties":{"animalOwner":{"description":"Created animal owner information","allOf":[{"$ref":"#/components/schemas/PostPimsAnimalOwner"}]}},"required":["animalOwner"]},"PostPimsAnimalOwnerResponseDto":{"type":"object","properties":{"data":{"description":"The response data","allOf":[{"$ref":"#/components/schemas/PostPimsAnimalOwnerData"}]}},"required":["data"]},"PatchPimsAnimalOwnerRequestDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","enum":["NEO","EZYVET","CORNERSTONE"],"example":"EZYVET"},"organization":{"type":"string","description":"Practice organization ID","example":"site_vwlu5JszEKw8ywYBdewOs"},"id":{"type":"string","description":"Animal owner ID in the PIMS system","example":"contact_R9fiF3oKec1HnveaHiYYr"},"firstName":{"type":"string","description":"Owner first name","example":"John"},"lastName":{"type":"string","description":"Owner last name","example":"Doe"}},"required":["pims","organization","id"]},"MedicalRecordDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","example":"EZYVET"},"organization":{"type":"string","description":"Organization identifier","example":"site_pc8JNIdLofX0ZBmQuKbk9"},"branch":{"type":"string","description":"Branch identifier","example":"ownershipSeparation_kpgs9AgfzKt3WCqT7iVRE"},"owner":{"type":"string","description":"Owner identifier","example":"contact_2Gjd8uHiQlE6kRJCNGOt3"},"animal":{"type":"string","description":"Animal identifier","example":"animal_VIKhbqfhZzWlIJ3i0xhdP"},"id":{"type":"string","description":"Medical record ID","example":"standardOfCare_3N1S2Dz45vYvfwO0nE3cu"},"typeId":{"type":"string","description":"Type ID","example":"socGroup_7CxG5vIpfkd359SPpUhhP"},"itemClassId":{"type":"object","description":"Item class identifier","example":null,"nullable":true},"medicalRecordDueDate":{"type":"object","description":"Due date for the medical record","example":"2025-04-02T17:14","nullable":true},"lastRemindedDate":{"type":"object","description":"Last reminded date","example":null,"nullable":true},"status":{"type":"string","description":"Status of the medical record","example":"active"},"reason":{"type":"string","description":"Reason for the medical record","example":"Heartworm Prevention"},"lastCompletedDate":{"type":"string","description":"Last completed date (last_given_date or UNKNOWN)","example":"2025-01-08T16:14"},"modified":{"type":"string","description":"Last modified timestamp","example":"2025-06-02T15:15:20.000Z"}},"required":["pims","organization","branch","owner","animal","id","typeId","itemClassId","medicalRecordDueDate","lastRemindedDate","status","reason","lastCompletedDate","modified"]},"MedicalRecordSectionDto":{"type":"object","properties":{"title":{"type":"string","description":"Section title","example":"Overdue"},"data":{"description":"Medical records in this section","type":"array","items":{"$ref":"#/components/schemas/MedicalRecordDto"}}},"required":["title","data"]},"GetPimsMedicalRecords":{"type":"object","properties":{"medicalRecords":{"description":"All medical records sorted by date","type":"array","items":{"$ref":"#/components/schemas/MedicalRecordDto"}},"dueData":{"description":"Medical records that are due (overdue + coming due)","type":"array","items":{"$ref":"#/components/schemas/MedicalRecordDto"}},"sections":{"description":"Medical records organized by sections","type":"array","items":{"$ref":"#/components/schemas/MedicalRecordSectionDto"}}},"required":["medicalRecords","dueData","sections"]},"GetPimsMedicalRecordsResponseDto":{"type":"object","properties":{"data":{"description":"The data object containing medical records response","allOf":[{"$ref":"#/components/schemas/GetPimsMedicalRecords"}]}},"required":["data"]},"CreatePetOwnerFeedbackDto":{"type":"object","properties":{"content":{"type":"string","description":"The content of the feedback","example":"I really like the new appointment booking feature!"},"rating":{"type":"number","description":"The rating given by the pet owner (1-5 stars)","example":5,"minimum":1,"maximum":5}}},"AlternativeBooking":{"type":"object","properties":{"method":{"type":"string","example":"CallToSchedule","description":"The alternative booking method"},"details":{"type":"string","example":"+1-555-123-4567","description":"Additional details for the booking method"}},"required":["method"]},"Categories":{"type":"object","properties":{"id":{"type":"number","example":1,"description":"The ID of the category"},"visitTypeName":{"type":"string","example":"Wellness Visit","description":"The name of the visit type"},"enabled":{"type":"boolean","example":true,"description":"Whether the practice supports this category"},"description":{"type":"string","example":"My pet is healthy and needs a general checkup or service","description":"The description of the category"}},"required":["id","visitTypeName","enabled","description"]},"AppointmentCategories":{"type":"object","properties":{"requestsEnabled":{"type":"boolean","example":true,"description":"Whether the practice supports appointment booking"},"categories":{"description":"The categories of the practice","type":"array","items":{"$ref":"#/components/schemas/Categories"}}},"required":["requestsEnabled","categories"]},"PracticeInfoDto":{"type":"object","properties":{"pims":{"type":"string","example":"NEO","description":"The PIMS type of the practice"},"organization":{"type":"string","example":"600274","description":"The organization ID of the practice"},"branch":{"type":"string","example":"1","description":"The branch ID of the practice"},"practiceRowKey":{"type":"string","example":"NEO#600274:1#","description":"The row key of the practice"},"practiceName":{"type":"string","example":"Happy Paws Veterinary Clinic","description":"The name of the practice"},"practiceFullAddress":{"type":"string","example":"123 Main St, Chicago, IL 10001","description":"The full formatted address of the practice"},"practiceAddress1":{"type":"string","example":"123 Main St","description":"The address line 1 of the practice"},"practiceAddress2":{"type":"string","description":"The address line 2 of the practice"},"practiceAddress3":{"type":"string","description":"The address line 3 of the practice"},"practiceCity":{"type":"string","example":"Chicago","description":"The city of the practice"},"practiceState":{"type":"string","example":"IL","description":"The state of the practice"},"practicePostalCode":{"type":"string","example":"10001","description":"The postal code of the practice"},"practiceCountryCode":{"type":"string","example":"US","description":"The country code of the practice"},"practiceTimezone":{"type":"string","example":"America/Chicago","description":"The timezone of the practice"},"practiceMainPhone":{"type":"string","example":"+1-555-123-4567","description":"The main phone number of the practice"},"practiceTextNumber":{"type":"string","example":"+1-555-123-4567","description":"The assigned SMS text number of the practice"},"practiceEmailAddress":{"type":"string","example":"info@happypaws.com","description":"The main email address of the practice"},"practiceWebsite":{"type":"string","example":"https://www.happypaws.com","description":"The website URL of the practice"},"bookable":{"type":"boolean","example":true,"description":"Whether the practice supports appointment booking"},"alternativeBooking":{"description":"Alternative booking methods configured for the practice","type":"array","items":{"$ref":"#/components/schemas/AlternativeBooking"}},"twoWayMessagingEnabled":{"type":"boolean","example":true,"description":"Whether the practice supports two-way messaging"},"isVelloActive":{"type":"boolean","example":true,"description":"Whether the practice is actively enrolled in Vello"},"dataPointSiteId":{"type":"number","example":12345,"description":"DataPoint site ID for the practice"},"appointmentCategories":{"description":"Appointment categories configuration for the practice","nullable":true,"example":{"requestsEnabled":true,"categories":[{"id":1,"visitTypeName":"Wellness Visit","enabled":true,"description":"My pet is healthy and needs a general checkup or service"},{"id":2,"visitTypeName":"Sick Visit","enabled":false,"description":"My pet is showing signs of illness or discomfort"}]},"allOf":[{"$ref":"#/components/schemas/AppointmentCategories"}]}},"required":["pims","organization","branch","practiceRowKey","practiceName","practiceFullAddress","practiceAddress1","practiceAddress2","practiceAddress3","practiceCity","practiceState","practicePostalCode","practiceCountryCode","practiceTimezone","practiceMainPhone","practiceTextNumber","practiceEmailAddress","bookable","twoWayMessagingEnabled","isVelloActive","appointmentCategories"]},"GetPetOwnerPracticesDto":{"type":"object","properties":{"practices":{"description":"List of practices for the authenticated user","type":"array","items":{"$ref":"#/components/schemas/PracticeInfoDto"}}},"required":["practices"]},"GetPetOwnerPracticesResponseDto":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GetPetOwnerPracticesDto"}},"required":["data"]},"CreatePetOwnerReportProblemDto":{"type":"object","properties":{"issueType":{"type":"string","description":"The type of issue being reported","enum":["Information is wrong or missing","Website/app is running slow or crashing","Something else"],"example":"Information is wrong or missing"},"content":{"type":"string","description":"Detailed description of the problem","example":"The vaccination dates shown for my pet are incorrect."},"os":{"type":"string","description":"The operating system or platform where the issue occurred","enum":["web","ios","android"],"example":"web"},"createdAt":{"format":"date-time","type":"string","description":"Optional timestamp for when the problem was reported. Defaults to current time if not provided. Used primarily for data migration scenarios. Cannot be a future date.","example":"2024-12-09T10:30:00.000Z"}},"required":["issueType","content","os"]},"GenerateShortlinkRequestDto":{"type":"object","properties":{"type":{"type":"string","description":"The type of linkable item.","enum":["Appointment","Home","Form"],"example":"Appointment"},"action":{"type":"string","description":"The action to perform on the link.","enum":["view","confirm","book","form"],"example":"view"},"medium":{"type":"string","description":"The medium through which the link was shared.","enum":["email","sms"],"example":"email"},"pims":{"type":"string","description":"The PIMS type for the practice.","enum":["NEO","EZYVET","CORNERSTONE"],"example":"NEO"},"organization":{"type":"string","description":"The organization ID for the practice.","example":"site_cFtyNQRNNngN3wAybtLPK"},"branch":{"type":"string","description":"The branch ID for the practice. Optional.","example":"hospital_wqnM6WhWaDSLbPgAORQys"},"owner":{"type":"string","description":"The contact ID for the pet owner.","example":"contact_R9fiF3oKec1HnveaHiYYr"},"email":{"type":"string","description":"The email for the pet owner. Required when medium is email or when phone is not provided.","example":"owner@example.com"},"phone":{"type":"string","description":"The phone number for the pet owner. Required when medium is sms or when email is not provided.","example":"+15551234567"},"appointment":{"type":"string","description":"The appointment ID. Required for APPOINTMENT type with VIEW, CONFIRM, or FORM actions.","example":"appointment_123"},"animal":{"type":"string","description":"The animal ID. Required when appointment is provided.","example":"animal_456"},"appointmentDate":{"type":"string","description":"The date of the appointment. Required when appointment is provided. Used for shortlink expiry.","example":"2024-10-19T15:20"},"sentDate":{"type":"string","description":"The date the link was sent. Required when no appointment is provided. Used for shortlink expiry.","example":"2024-10-19T15:20"},"form":{"type":"string","description":"The form ID. Required for FORM type or APPOINTMENT type with FORM action.","example":"form_789"}},"required":["type","action","medium","pims","organization","owner"]},"GenerateShortlinkResponseDto":{"type":"object","properties":{"url":{"type":"string","description":"The full shortlink URL","example":"https://app.vello.idexx.com/auth/abc123xyz"}},"required":["url"]},"PetOwnerProfile":{"type":"object","properties":{"updatedAt":{"type":"string","description":"Date when the user profile was updated","example":"2025-06-22T21:56:22.195Z"},"acceptedTermsVersion":{"type":"number","description":"Accepted terms version number","example":1},"timezone":{"type":"string","description":"Pet owner timezone","example":"America/New_York"},"preferences":{"type":"object","description":"Pet owner preferences and settings"},"appointments":{"type":"object","description":"User appointments data with appointment keys as object keys","example":{"CORNERSTONE#417298:1#253747":{"confirmed":true,"bloodwork":false,"checklist":{"fecalSample":true}}}}}},"PetOwnerProfileResponse":{"type":"object","properties":{"petOwnerProfile":{"description":"Pet owner profile information","allOf":[{"$ref":"#/components/schemas/PetOwnerProfile"}]}},"required":["petOwnerProfile"]},"GetPetOwnerProfileResponseDto":{"type":"object","properties":{"data":{"description":"Response data wrapper","allOf":[{"$ref":"#/components/schemas/PetOwnerProfileResponse"}]}},"required":["data"]},"UpsertPetOwnerProfileDto":{"type":"object","properties":{"acceptedTermsVersion":{"type":"number","description":"Accepted terms version number","example":1},"timezone":{"type":"string","description":"Pet owner timezone","example":"America/New_York"},"preferences":{"type":"object","description":"Pet owner preferences","example":{}}}},"UpsertPetOwnerProfileDataDto":{"type":"object","properties":{"profile":{"description":"Profile metadata","allOf":[{"$ref":"#/components/schemas/UpsertPetOwnerProfileDto"}]}}},"UpsertPetOwnerProfileRequestDto":{"type":"object","properties":{"data":{"description":"Pet owner profile data to upsert","allOf":[{"$ref":"#/components/schemas/UpsertPetOwnerProfileDataDto"}]}},"required":["data"]},"PatchPetOwnerProfileAppointmentsDataDto":{"type":"object","properties":{"appointments":{"type":"object","description":"Appointments data to update with appointment keys as object keys","example":{"CORNERSTONE#417298:1#253747":{"confirmed":true,"bloodwork":false,"checklist":{"fecalSample":true}}}}},"required":["appointments"]},"PatchPetOwnerProfileAppointmentsRequestDto":{"type":"object","properties":{"data":{"description":"Pet owner profile appointments data to patch","allOf":[{"$ref":"#/components/schemas/PatchPetOwnerProfileAppointmentsDataDto"}]}},"required":["data"]},"PetOwnerProfileDto":{"type":"object","properties":{"petOwnerId":{"type":"string"},"timezone":{"type":"string"},"acceptedTermsVersion":{"type":"string"},"preferences":{"type":"object"},"updatedAt":{"format":"date-time","type":"string"}},"required":["petOwnerId","updatedAt"]},"PetOwnerGroupDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"settings":{"type":"object"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","settings","updatedAt"]},"PetOwnerPimsLinkDto":{"type":"object","properties":{"id":{"type":"string"},"petOwnerId":{"type":"string"},"pims":{"type":"string"},"organization":{"type":"string"},"branch":{"type":"string"},"animalOwnerId":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","petOwnerId","pims","organization","branch","animalOwnerId","updatedAt"]},"PetOwnerDto":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier for the pet owner","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"authProviderUserId":{"type":"string","description":"The auth provider user ID","example":"c669dcb4-09de-4859-9eef-56879c918863"},"authProvider":{"type":"string","description":"The authentication provider","example":"cognito"},"userPoolId":{"type":"string","description":"User pool id"},"authProviderUserName":{"type":"string","description":"Auth provider user name"},"loginEmail":{"type":"string","description":"The login email address","example":"example@example.com"},"emailVerified":{"type":"boolean","description":"Whether the email is verified","example":true},"loginPhoneNumber":{"type":"string","description":"The login phone number in E.164 format","example":"+15551234567"},"phoneNumberVerified":{"type":"boolean","description":"Whether the phone number is verified","example":true},"updatedAt":{"format":"date-time","type":"string","description":"The last modification timestamp","example":"2025-04-07T22:28:55.726Z"},"enabled":{"type":"boolean"},"status":{"type":"string"},"authProviderCreatedAt":{"format":"date-time","type":"string"},"authProviderLastModifiedAt":{"format":"date-time","type":"string"},"lastLoginAt":{"format":"date-time","type":"string"},"profile":{"$ref":"#/components/schemas/PetOwnerProfileDto"},"groups":{"type":"array","items":{"$ref":"#/components/schemas/PetOwnerGroupDto"}},"pimsLinks":{"type":"array","items":{"$ref":"#/components/schemas/PetOwnerPimsLinkDto"}}},"required":["id","authProviderUserId","authProvider","updatedAt"]},"GetPetOwnersResponseDto":{"type":"object","properties":{"data":{"example":{"petOwners":[{"id":"e493ac24-e749-4737-a292-2ecc1057a418","authProviderUserId":"c669dcb4-09de-4859-9eef-56879c918863","authProvider":"cognito","loginEmail":"john.doe@example.com","emailVerified":true,"loginPhoneNumber":"+15551234567","phoneNumberVerified":true,"updatedAt":"2025-04-07T22:28:55.726Z","authProviderCreatedAt":"2024-12-17T18:13:53.582Z","authProviderLastModifiedAt":"2025-04-07T22:28:55.726Z","enabled":true,"status":"CONFIRMED"}]},"allOf":[{"$ref":"#/components/schemas/PetOwnerDto"}]}},"required":["data"]},"GetPetOwnerResponseDto":{"type":"object","properties":{"data":{"example":{"petOwner":{"id":"e493ac24-e749-4737-a292-2ecc1057a418","authProviderUserId":"c669dcb4-09de-4859-9eef-56879c918863","authProvider":"cognito","loginEmail":"john.doe@example.com","emailVerified":true,"loginPhoneNumber":"+15551234567","phoneNumberVerified":true,"updatedAt":"2025-04-07T22:28:55.726Z","authProviderCreatedAt":"2024-12-17T18:13:53.582Z","authProviderLastModifiedAt":"2025-04-07T22:28:55.726Z","enabled":true,"status":"CONFIRMED"}},"allOf":[{"$ref":"#/components/schemas/PetOwnerDto"}]}},"required":["data"]},"UpsertPetOwnerDto":{"type":"object","properties":{"id":{"type":"string","description":"The pet owner ID","example":"c669dcb4-09de-4859-9eef-56879c918863"},"authProviderUserId":{"type":"string","description":"The auth provider user ID","example":"c669dcb4-09de-4859-9eef-56879c918863"},"authProvider":{"type":"string","description":"The authentication provider","example":"cognito"},"authProviderUserName":{"type":"string","description":"The auth provider user name","example":"c89455c5-2539-48e1-a2e4-987a921131e3"},"userPoolId":{"type":"string","description":"The user pool id","example":"us-east-1_XXXXXXX"},"loginEmail":{"type":"string","description":"The login email address","example":"john.doe@example.com"},"emailVerified":{"type":"boolean","description":"Whether the email is verified","example":true},"loginPhoneNumber":{"type":"string","description":"The login phone number in E.164 format","example":"+15551234567"},"phoneNumberVerified":{"type":"boolean","description":"Whether the phone number is verified","example":true},"enabled":{"type":"boolean","description":"Whether the pet owner is enabled","example":true},"status":{"type":"string","description":"The status of the pet owner","example":"CONFIRMED"},"authProviderCreatedAt":{"format":"date-time","type":"string","description":"The creation timestamp from the auth provider","example":"2024-12-17T18:13:53.582Z"},"authProviderLastModifiedAt":{"format":"date-time","type":"string","description":"The last modification timestamp from the auth provider","example":"2025-04-07T22:28:55.726Z"},"lastLoginAt":{"format":"date-time","type":"string","description":"The last login timestamp","example":"2025-04-07T22:28:55.726Z"}},"required":["authProviderUserId"]},"GetInvalidPetOwnersResponseDto":{"type":"object","properties":{"data":{"description":"Array of auth provider user IDs for invalid pet owners (no PIMS links)","example":["c669dcb4-09de-4859-9eef-56879c918863","a123bcde-45fg-6789-hijk-lmnopqrstuvw"],"type":"array","items":{"type":"string"}}},"required":["data"]},"PetOwnerFeedbackDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the feedback entry","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"authProviderUserId":{"type":"string","description":"The Cognito user ID of the pet owner who submitted the feedback","example":"c669dcb4-09de-4859-9eef-56879c918863"},"content":{"type":"string","description":"The content of the feedback","example":"Great service, very satisfied with the experience."},"rating":{"type":"number","description":"The rating given by the pet owner (1-5 stars)","example":5},"createdAt":{"format":"date-time","type":"string","description":"When the feedback was created","example":"2024-12-17T18:13:53.582Z"}},"required":["id","authProviderUserId","createdAt"]},"MonthlyRatingAnalysisDto":{"type":"object","properties":{"year":{"type":"number","description":"Year of the analysis","example":2024},"month":{"type":"number","description":"Month of the analysis (1-12)","example":3},"averageRating":{"type":"number","description":"Average rating for the month","example":4.25},"totalFeedback":{"type":"number","description":"Total number of feedback entries for the month","example":8},"byPimsType":{"type":"object","description":"Breakdown of feedback by PIMS type (based on linked pet owner accounts)","example":{"NEO":4,"EZYVET":2,"CORNERSTONE":2}}},"required":["year","month","averageRating","totalFeedback","byPimsType"]},"GetPetOwnerFeedbackDataDto":{"type":"object","properties":{"feedback":{"description":"Array of feedback entries","type":"array","items":{"$ref":"#/components/schemas/PetOwnerFeedbackDto"}},"analysis":{"description":"Monthly rating analysis","type":"array","items":{"$ref":"#/components/schemas/MonthlyRatingAnalysisDto"}}},"required":["feedback","analysis"]},"GetPetOwnerFeedbackResponseDto":{"type":"object","properties":{"data":{"description":"The response data containing feedback entries and analysis","allOf":[{"$ref":"#/components/schemas/GetPetOwnerFeedbackDataDto"}]}},"required":["data"]},"PetOwnerReportProblemDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the report problem entry","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"authProviderUserId":{"type":"string","description":"The Cognito user ID of the pet owner who submitted the report","example":"c669dcb4-09de-4859-9eef-56879c918863"},"issueType":{"type":"string","description":"The type of issue being reported","enum":["Information is wrong or missing","Website/app is running slow or crashing","Something else"],"example":"Information is wrong or missing"},"content":{"type":"string","description":"Detailed description of the problem","example":"The vaccination dates shown for my pet are incorrect."},"os":{"type":"string","description":"The operating system or platform where the issue occurred","enum":["web","ios","android"],"example":"web"},"createdAt":{"format":"date-time","type":"string","description":"When the report problem was created","example":"2024-12-17T18:13:53.582Z"}},"required":["id","authProviderUserId","issueType","content","os","createdAt"]},"MonthlyIssueTypeAnalysisDto":{"type":"object","properties":{"year":{"type":"number","description":"Year of the analysis","example":2024},"month":{"type":"number","description":"Month of the analysis (1-12)","example":3},"totalReports":{"type":"number","description":"Total number of report problems for the month","example":8},"byIssueType":{"type":"object","description":"Breakdown of reports by issue type","example":{"Information is wrong or missing":3,"Website/app is running slow or crashing":2,"Something else":3}},"byOS":{"type":"object","description":"Breakdown of reports by operating system","example":{"web":4,"ios":2,"android":2}},"byPimsType":{"type":"object","description":"Breakdown of reports by PIMS type (based on linked pet owner accounts)","example":{"NEO":3,"EZYVET":2,"CORNERSTONE":1}}},"required":["year","month","totalReports","byIssueType","byOS","byPimsType"]},"GetPetOwnerReportProblemDataDto":{"type":"object","properties":{"reportProblems":{"description":"Array of report problem entries","type":"array","items":{"$ref":"#/components/schemas/PetOwnerReportProblemDto"}},"analysis":{"description":"Monthly report problem analysis","type":"array","items":{"$ref":"#/components/schemas/MonthlyIssueTypeAnalysisDto"}}},"required":["reportProblems","analysis"]},"GetPetOwnerReportProblemResponseDto":{"type":"object","properties":{"data":{"description":"The response data containing report problem entries and analysis","allOf":[{"$ref":"#/components/schemas/GetPetOwnerReportProblemDataDto"}]}},"required":["data"]},"PetOwnerPimsLinkWithAuthDto":{"type":"object","properties":{"id":{"type":"string","description":"PIMS link ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"petOwnerId":{"type":"string","description":"Pet owner ID","example":"f593bc34-f859-5847-b392-3fdd2068b529"},"pims":{"type":"string","description":"PIMS type","example":"NEO"},"organization":{"type":"string","description":"Organization","example":"6001"},"branch":{"type":"string","description":"Branch","example":"1"},"animalOwnerId":{"type":"string","description":"Animal owner ID","example":"12345"},"updatedAt":{"format":"date-time","type":"string","description":"Last updated timestamp","example":"2025-04-07T22:28:55.726Z"},"authProviderUserName":{"type":"string","description":"Auth provider user name (UUID)","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","nullable":true},"authProviderUserId":{"type":"string","description":"Auth provider user ID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"required":["id","petOwnerId","pims","organization","branch","animalOwnerId","updatedAt","authProviderUserName","authProviderUserId"]},"GetPetOwnerByPimsLinkDataDto":{"type":"object","properties":{"pimsLinks":{"description":"Array of PIMS links with pet owner information","type":"array","items":{"$ref":"#/components/schemas/PetOwnerPimsLinkWithAuthDto"}}},"required":["pimsLinks"]},"GetPetOwnerByPimsLinkResponseDto":{"type":"object","properties":{"data":{"description":"Response data containing PIMS links and pet owner information","allOf":[{"$ref":"#/components/schemas/GetPetOwnerByPimsLinkDataDto"}]}},"required":["data"]},"UpsertAdminPetOwnerPimsLinkInputDto":{"type":"object","properties":{"petOwnerId":{"type":"string","description":"Pet owner id"},"pims":{"type":"string","description":"PIMS type","enum":["NEO","EZYVET","CORNERSTONE"]},"organization":{"type":"string","description":"Organization"},"branch":{"type":"string","description":"Branch"},"animalOwnerId":{"type":"string","description":"Animal owner id"}},"required":["petOwnerId","pims","organization","branch","animalOwnerId"]},"PetOwnerPimsLinkData":{"type":"object","properties":{"id":{"type":"string","description":"The pet owner PIMS link ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"}},"required":["id"]},"UpsertPetOwnerPimsLinkData":{"type":"object","properties":{"petOwnerPimsLink":{"description":"Pet owner PIMS link information","allOf":[{"$ref":"#/components/schemas/PetOwnerPimsLinkData"}]}},"required":["petOwnerPimsLink"]},"UpsertPetOwnerPimsLinkResponseDto":{"type":"object","properties":{"data":{"description":"The response data","allOf":[{"$ref":"#/components/schemas/UpsertPetOwnerPimsLinkData"}]}},"required":["data"]},"UpsertPetOwnerGroupInputDto":{"type":"object","properties":{"id":{"type":"string","description":"Group ID"},"name":{"type":"string","description":"Group name"},"settings":{"type":"object","description":"Group settings"}}},"PetOwnerGroupData":{"type":"object","properties":{"id":{"type":"string","description":"The pet owner group ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"}},"required":["id"]},"UpsertPetOwnerGroupData":{"type":"object","properties":{"petOwnerGroup":{"description":"Pet owner group information","allOf":[{"$ref":"#/components/schemas/PetOwnerGroupData"}]}},"required":["petOwnerGroup"]},"UpsertPetOwnerGroupResponseDto":{"type":"object","properties":{"data":{"description":"The response data","allOf":[{"$ref":"#/components/schemas/UpsertPetOwnerGroupData"}]}},"required":["data"]},"UpsertPetOwnerGroupMemberInputDto":{"type":"object","properties":{"groupId":{"type":"string","description":"Group ID"},"petOwnerId":{"type":"string","description":"Pet Owner ID to add/update in the group"},"role":{"type":"string","description":"Member role in the group","enum":["owner","admin","member"],"default":"member"}},"required":["groupId","petOwnerId"]},"PetOwnerGroupMemberData":{"type":"object","properties":{"petOwnerId":{"type":"string","description":"The pet owner group member ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"}},"required":["petOwnerId"]},"UpsertPetOwnerGroupMemberData":{"type":"object","properties":{"petOwnerGroupMember":{"description":"Pet owner group member information","allOf":[{"$ref":"#/components/schemas/PetOwnerGroupMemberData"}]}},"required":["petOwnerGroupMember"]},"UpsertPetOwnerGroupMemberResponseDto":{"type":"object","properties":{"data":{"description":"The response data","allOf":[{"$ref":"#/components/schemas/UpsertPetOwnerGroupMemberData"}]}},"required":["data"]},"UpsertPetOwnerProfileInputDto":{"type":"object","properties":{"id":{"type":"string","description":"Pet owner ID"},"timezone":{"type":"string","description":"Timezone, e.g., America/New_York"},"acceptedTermsVersion":{"type":"string","description":"Accepted terms version"},"preferences":{"type":"object","description":"Profile preferences"}},"required":["id"]},"PetOwnerProfileData":{"type":"object","properties":{"petOwnerId":{"type":"string","description":"The pet owner profile ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"}},"required":["petOwnerId"]},"UpsertPetOwnerProfileData":{"type":"object","properties":{"petOwnerProfile":{"description":"Pet owner profile information","allOf":[{"$ref":"#/components/schemas/PetOwnerProfileData"}]}},"required":["petOwnerProfile"]},"UpsertPetOwnerProfileResponseDto":{"type":"object","properties":{"data":{"description":"The response data","allOf":[{"$ref":"#/components/schemas/UpsertPetOwnerProfileData"}]}},"required":["data"]},"GetSignupHistoryRecordsDataDto":{"type":"object","properties":{"signupHistoryRecords":{"description":"Array of signup history records. When querying by id, returns SignupHistoryFullRecordDto with additional fields (externalApiStatusCode, externalApiResponse, externalApiUrl, metadata).","items":{"type":"array","items":{"type":"a"}},"type":"array"},"totalRecords":{"type":"number","description":"Total number of records returned","example":5432}},"required":["signupHistoryRecords","totalRecords"]},"GetSignupHistoryRecordsResponseDto":{"type":"object","properties":{"data":{"description":"Response data","allOf":[{"$ref":"#/components/schemas/GetSignupHistoryRecordsDataDto"}]}},"required":["data"]},"DateRangeDto":{"type":"object","properties":{"start":{"format":"date-time","type":"string","description":"Start date of the data","example":"2024-01-01T00:00:00.000Z"},"end":{"format":"date-time","type":"string","description":"End date of the data","example":"2024-12-31T23:59:59.999Z"}},"required":["start","end"]},"SignupHistoryOverviewStatsDto":{"type":"object","properties":{"totalAttempts":{"type":"number","description":"Total number of signup attempts","example":10000},"successCount":{"type":"number","description":"Number of successful signups","example":8500},"errorCount":{"type":"number","description":"Number of failed signups","example":1500},"successRate":{"type":"number","description":"Success rate percentage (0-100)","example":85},"uniqueOrganizations":{"type":"number","description":"Number of unique pims+organization combinations","example":150},"dateRange":{"description":"Date range of the data","allOf":[{"$ref":"#/components/schemas/DateRangeDto"}]}},"required":["totalAttempts","successCount","errorCount","successRate","uniqueOrganizations","dateRange"]},"MonthlySignupAnalysisDto":{"type":"object","properties":{"year":{"type":"number","description":"Year","example":2024},"month":{"type":"number","description":"Month (1-12)","example":12},"successCount":{"type":"number","description":"Number of successful signups","example":800},"errorCount":{"type":"number","description":"Number of failed signups","example":150},"totalCount":{"type":"number","description":"Total number of signup attempts","example":950},"successRate":{"type":"number","description":"Success rate percentage (0-100)","example":84.21}},"required":["year","month","successCount","errorCount","totalCount","successRate"]},"SignupFunnelStepDto":{"type":"object","properties":{"source":{"type":"string","description":"Source/step in the signup flow","enum":["DATASTORE_OWNER_SEARCH","EZYVET_CONTACT_DETAIL_SEARCH","EZYVET_NO_CONTACT_DETAILS_FOUND","EZYVET_CONTACT_LOOKUP","EZYVET_NO_ACTIVE_CONTACT_FOUND","NO_MATCHING_OWNER_IN_RESULTS","MULTIPLE_OWNERS_FOUND","NO_OWNER_FOUND","OWNER_FOUND","EZYVET_OWNER_FOUND"],"example":"OWNER_FOUND"},"successCount":{"type":"number","description":"Number of successful outcomes from this source","example":500},"errorCount":{"type":"number","description":"Number of failed outcomes from this source","example":100},"totalCount":{"type":"number","description":"Total count for this source","example":600}},"required":["source","successCount","errorCount","totalCount"]},"TopErrorMessageDto":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"No matching owner found"},"count":{"type":"number","description":"Number of occurrences","example":250}},"required":["message","count"]},"SignupErrorBreakdownDto":{"type":"object","properties":{"byErrorType":{"type":"object","description":"Breakdown by error type","example":{"NOT_FOUND":1000,"CONFLICT":300,"API_ERROR":200}},"topErrorMessages":{"description":"Top 10 error messages","type":"array","items":{"$ref":"#/components/schemas/TopErrorMessageDto"}}},"required":["byErrorType","topErrorMessages"]},"PimsSignupStatsDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type","enum":["NEO","EZYVET","CORNERSTONE"],"example":"NEO"},"successCount":{"type":"number","description":"Number of successful signups","example":5000},"errorCount":{"type":"number","description":"Number of failed signups","example":800},"totalCount":{"type":"number","description":"Total count","example":5800},"successRate":{"type":"number","description":"Success rate percentage (0-100)","example":86.21}},"required":["pims","successCount","errorCount","totalCount","successRate"]},"OrganizationErrorRateDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type","enum":["NEO","EZYVET","CORNERSTONE"],"example":"NEO"},"organization":{"type":"string","description":"Organization ID","example":"600274"},"successCount":{"type":"number","description":"Number of successful signups","example":50},"errorCount":{"type":"number","description":"Number of failed signups","example":150},"totalCount":{"type":"number","description":"Total count","example":200},"errorRate":{"type":"number","description":"Error rate percentage (0-100), sorted descending","example":75}},"required":["pims","organization","successCount","errorCount","totalCount","errorRate"]},"GetSignupHistoryStatsDataDto":{"type":"object","properties":{"overview":{"description":"Overview statistics","allOf":[{"$ref":"#/components/schemas/SignupHistoryOverviewStatsDto"}]},"monthly":{"description":"Monthly breakdown","type":"array","items":{"$ref":"#/components/schemas/MonthlySignupAnalysisDto"}},"funnel":{"description":"Funnel analysis by source","type":"array","items":{"$ref":"#/components/schemas/SignupFunnelStepDto"}},"errorBreakdown":{"description":"Error breakdown","allOf":[{"$ref":"#/components/schemas/SignupErrorBreakdownDto"}]},"byPims":{"description":"Statistics by PIMS type","type":"array","items":{"$ref":"#/components/schemas/PimsSignupStatsDto"}},"topOrganizationsByErrorRate":{"description":"Top organizations by error rate (minimum 5 attempts)","type":"array","items":{"$ref":"#/components/schemas/OrganizationErrorRateDto"}}},"required":["overview","monthly","funnel","errorBreakdown","byPims","topOrganizationsByErrorRate"]},"GetSignupHistoryStatsResponseDto":{"type":"object","properties":{"data":{"description":"Response data","allOf":[{"$ref":"#/components/schemas/GetSignupHistoryStatsDataDto"}]}},"required":["data"]},"PetOwnerPimsLinkResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"PIMS link ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"petOwnerId":{"type":"string","description":"Pet owner ID","example":"f593bc34-f859-5847-b392-3fdd2068b529"},"pims":{"type":"string","description":"PIMS type","example":"NEO"},"organization":{"type":"string","description":"Organization","example":"6001"},"branch":{"type":"string","description":"Branch","example":"1"},"animalOwnerId":{"type":"string","description":"Animal owner ID","example":"1"},"updatedAt":{"format":"date-time","type":"string","description":"Last updated timestamp","example":"2025-04-07T22:28:55.726Z"}},"required":["id","petOwnerId","pims","organization","branch","animalOwnerId","updatedAt"]},"GetPetOwnerPimsLinksDataDto":{"type":"object","properties":{"pimsLinks":{"description":"Array of PIMS links","type":"array","items":{"$ref":"#/components/schemas/PetOwnerPimsLinkResponseDto"}}},"required":["pimsLinks"]},"GetPetOwnerPimsLinksResponseDto":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GetPetOwnerPimsLinksDataDto"}},"required":["data"]},"UpsertPetOwnerPimsLinkInputDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type","enum":["NEO","EZYVET","CORNERSTONE"]},"organization":{"type":"string","description":"Organization"},"branch":{"type":"string","description":"Branch"},"animalOwnerId":{"type":"string","description":"Animal owner id"}},"required":["pims","organization","branch","animalOwnerId"]},"PetOwnerGroupResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Group ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"name":{"type":"string","description":"Group name","example":"Family Group"},"settings":{"type":"object","description":"Group settings"},"updatedAt":{"format":"date-time","type":"string","description":"Last updated timestamp","example":"2025-04-07T22:28:55.726Z"}},"required":["id","settings","updatedAt"]},"GetPetOwnerGroupsDataDto":{"type":"object","properties":{"groups":{"description":"Array of groups","type":"array","items":{"$ref":"#/components/schemas/PetOwnerGroupResponseDto"}}},"required":["groups"]},"GetPetOwnerGroupsResponseDto":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GetPetOwnerGroupsDataDto"}},"required":["data"]},"PetOwnerGroupMembershipResponseDto":{"type":"object","properties":{"groupId":{"type":"string","description":"Group ID","example":"e493ac24-e749-4737-a292-2ecc1057a418"},"petOwnerId":{"type":"string","description":"Pet owner ID","example":"f593bc34-f859-5847-b392-3fdd2068b529"},"role":{"type":"string","description":"Member role","example":"member","enum":["owner","admin","member"]},"updatedAt":{"format":"date-time","type":"string","description":"Last updated timestamp","example":"2025-04-07T22:28:55.726Z"}},"required":["groupId","petOwnerId","role","updatedAt"]},"GetPetOwnerGroupMembershipsDataDto":{"type":"object","properties":{"groupMemberships":{"description":"Array of group memberships","type":"array","items":{"$ref":"#/components/schemas/PetOwnerGroupMembershipResponseDto"}}},"required":["groupMemberships"]},"GetPetOwnerGroupMembershipsResponseDto":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GetPetOwnerGroupMembershipsDataDto"}},"required":["data"]},"PetPhotoResponseDto":{"type":"object","properties":{"imageData":{"type":"string","description":"The image as a base64 data URL","example":"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="}}},"GetPetPhotoResponseDto":{"type":"object","properties":{"data":{"description":"The pet photo data. Empty object when no photo is found.","allOf":[{"$ref":"#/components/schemas/PetPhotoResponseDto"}]}},"required":["data"]},"UploadPetPhotoDto":{"type":"object","properties":{"pims":{"type":"string","description":"The PIMS type","example":"NEO","enum":["NEO","EZYVET","CORNERSTONE"]},"organization":{"type":"string","description":"The organization ID","example":"600274"},"owner":{"type":"string","description":"The pet owner ID","example":"5"},"animal":{"type":"string","description":"The animal ID","example":"5"},"imageData":{"type":"string","description":"The image file content as a base64 data URL","example":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="},"contentType":{"type":"string","description":"The content type of the image","example":"image/jpeg"}},"required":["pims","organization","owner","animal","imageData","contentType"]},"CreateRegistrationDto":{"type":"object","properties":{"pims":{"type":"string","description":"The PIMS type","enum":["EZYVET","NEO","CORNERSTONE"],"example":"EZYVET"},"organization":{"type":"string","description":"The organization ID","example":"site_cFtyNQRNNngN3wAybtLPK"},"branch":{"type":"string","description":"The branch ID","example":"hospital_wqnM6WhWaDSLbPgAORQys"},"animalOwnerId":{"type":"string","description":"The PIMS animal owner ID (e.g., EzyVet contact UID)","example":"contact_qQV13H4uZStNDLIXJ728W"},"sourceEnv":{"type":"string","description":"The source Vello environment (e.g., qa4, staging, prod). Used for EzyVet API routing in nonprod.","example":"qa4"}},"required":["pims","organization","branch","animalOwnerId"]},"RegistrationAttachmentResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Attachment UUID","example":"f5e6d7c8-uuid-uuid-uuid"},"fileName":{"type":"string","description":"Generated file name","example":"Bella_record_1.jpeg"},"contentType":{"type":"string","description":"Content type of the file","example":"image/jpeg"},"fileSize":{"type":"number","description":"File size in bytes","example":1200000},"status":{"type":"string","description":"Attachment status","example":"ready"},"createdAt":{"format":"date-time","type":"string","description":"Record creation timestamp"}},"required":["id","fileName","contentType","fileSize","status","createdAt"]},"RegistrationResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Registration UUID"},"petOwnerId":{"type":"string","description":"Pet owner UUID"},"animalOwnerId":{"type":"string","description":"PIMS animal owner ID","example":"contact_qQV13H4uZStNDLIXJ728W"},"pims":{"type":"string","description":"PIMS type","enum":["EZYVET","NEO","CORNERSTONE"],"example":"EZYVET"},"organization":{"type":"string","description":"Organization ID","example":"site_cFtyNQRNNngN3wAybtLPK"},"branch":{"type":"string","description":"Branch ID","example":"hospital_wqnM6WhWaDSLbPgAORQys"},"petInfo":{"type":"object","description":"Pet information as JSON","nullable":true},"status":{"type":"string","description":"Registration status","enum":["draft","processing","completed","failed"],"example":"draft"},"sourceEnv":{"type":"string","description":"Source Vello environment","example":"qa4"},"attachments":{"description":"Attachments","type":"array","items":{"$ref":"#/components/schemas/RegistrationAttachmentResponseDto"}},"createdAt":{"format":"date-time","type":"string","description":"Record creation timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"Record last update timestamp"}},"required":["id","petOwnerId","animalOwnerId","pims","organization","branch","status","attachments","createdAt","updatedAt"]},"GetRegistrationResponseDto":{"type":"object","properties":{"data":{"description":"Registration data (null if not found)","nullable":true,"allOf":[{"$ref":"#/components/schemas/RegistrationResponseDto"}]}},"required":["data"]},"UpdateRegistrationDto":{"type":"object","properties":{"petInfo":{"type":"object","description":"Pet information. Must include petName and species at minimum.","example":{"petName":"Bella","dateOfBirth":"2022-02-02","species":"Canine","breed":"Goldendoodle","sex":"Spayed","color":"Golden"}}},"required":["petInfo"]},"UploadAttachmentDto":{"type":"object","properties":{"imageData":{"type":"string","description":"The image file content as a base64 data URL","example":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..."},"contentType":{"type":"string","description":"The content type of the image","example":"image/jpeg","enum":["image/jpeg","image/png"]}},"required":["imageData","contentType"]},"UploadAttachmentResponseDto":{"type":"object","properties":{"data":{"description":"Uploaded attachment data","allOf":[{"$ref":"#/components/schemas/RegistrationAttachmentResponseDto"}]}},"required":["data"]},"TriggerWritebackDto":{"type":"object","properties":{"animalId":{"type":"string","description":"The PIMS animal identifier to attach records to","example":"12345"}},"required":["animalId"]},"WritebackAttachmentDto":{"type":"object","properties":{"attachmentId":{"type":"string","description":"Attachment UUID","example":"b59ee6d0-1b97-4fd3-988c-c219c006a342"},"registrationId":{"type":"string","description":"Registration UUID","example":"14340ce1-ae5c-4113-8371-0f65218368a9"},"pims":{"type":"string","description":"PIMS type","enum":["NEO","EZYVET","CORNERSTONE"],"example":"EZYVET"},"organization":{"type":"string","description":"Organization ID (site UID)","example":"site_cFtyNQRNNngN3wAybtLPK"},"branch":{"type":"string","description":"Branch ID","example":"hospital_wqnM6WhWaDSLbPgAORQys"},"animalId":{"type":"string","description":"PIMS animal identifier (pet)","example":"12345"},"s3Key":{"type":"string","description":"S3 object key for the attachment file","example":"EZYVET/site_cFtyNQRNNngN3wAybtLPK/registration_id_14340ce1-ae5c-4113-8371-0f65218368a9/attachment_id_b59ee6d0-1b97-4fd3-988c-c219c006a342.jpeg"},"fileName":{"type":"string","description":"Generated file name","example":"Bella_record_1.jpeg"},"contentType":{"type":"string","description":"Content type","example":"image/jpeg"},"sourceEnv":{"type":"string","description":"Source Vello environment for EzyVet API routing","example":"qa4"}},"required":["attachmentId","registrationId","pims","organization","branch","animalId","s3Key","fileName","contentType"]},"GetPracticeFinderQueryResponseDto":{"type":"object","properties":{"data":{"example":{"practiceEnrollments":[{"pims":"NEO","organization":"6001","branch":"1","practiceName":"Advanced Pet Care","practiceFullAddress":"123 Main St, Apt 1, Floor 2, New York, NY 10001"}]},"type":"array","items":{"$ref":"#/components/schemas/PracticeInfoDto"}}},"required":["data"]},"GetPracticeByShortlinkResponseDto":{"type":"object","properties":{"data":{"example":{"practiceEnrollment":{"pims":"NEO","organization":"6001","branch":"1","practiceName":"Advanced Pet Care","practiceFullAddress":"123 Main St, Apt 1, Floor 2, New York, NY 10001"}},"allOf":[{"$ref":"#/components/schemas/PracticeInfoDto"}]}},"required":["data"]},"GetPracticeConfigResponseDto":{"type":"object","properties":{"data":{"type":"object","example":{"permissions":{"clientCreateEnabled":true,"petCreateEnabled":true},"practiceCountryCode":"US"}}},"required":["data"]},"GetOwnerFinderQueryResponseDto":{"type":"object","properties":{"data":{"type":"string","example":{"animalOwnerId":"12"}}},"required":["data"]},"OwnerShortlinkDto":{"type":"object","properties":{"pims":{"type":"string","example":"NEO","description":"PIMS type"},"organization":{"type":"string","example":"6001","description":"Organization ID"},"branch":{"type":"string","example":"1","description":"Branch ID"},"owner":{"type":"string","example":"3","description":"Owner ID"},"email":{"type":"string","example":"owner@email.com","description":"Owner email"},"phone":{"type":"string","example":"+1234567890","description":"Owner phone number"},"path":{"type":"string","example":"/appointment","description":"Deeplinked path for the shortlink"},"action":{"type":"string","example":"confirm","description":"Action for the shortlink"},"medium":{"type":"string","example":"email","description":"Medium through which the link was sent"},"authCode":{"type":"string","example":"abc123","description":"Authentication code for the shortlink"},"clickCount":{"type":"number","example":2,"description":"Number of times the link was clicked"},"appointment":{"type":"string","example":"1","description":"Appointment ID"},"animal":{"type":"string","example":"2","description":"Animal ID"},"form":{"type":"string","example":"form_123","description":"Form ID"}},"required":["pims","organization","branch","owner","email","phone","path","action","medium","authCode","clickCount"]},"PimsAppointmentResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Appointment ID","example":"1"},"rowKey":{"type":"string","description":"Appointment Rowkey","example":"NEO#6001:1#1"},"pims":{"type":"string","description":"PIMS type identifier","example":"NEO"},"organization":{"type":"string","description":"Practice organization ID","example":"6001"},"branch":{"type":"string","description":"Practice branch ID","example":"1"},"type":{"type":"string","description":"Appointment type","example":"1"},"staffFullName":{"type":"string","description":"Appointment staff name","example":"John Doe"},"status":{"type":"string","description":"Appointment status","example":"SCHEDULED"},"animal":{"type":"string","description":"Animal ID","example":"1"},"owner":{"type":"string","description":"Owner ID","example":"1"},"date":{"type":"string","description":"Appointment date","example":"2025-11-18T18:00"},"confirmed":{"type":"boolean","description":"Is confirmed","example":true},"customInstructions":{"type":"object","description":"Appointment custom instructions","example":{"text":"Custom instructions","format":"text/plain"}},"appointmentTimeDetails":{"type":"object","description":"Appointment time mode","example":{"mode":"UseCustomAppointmentTime","settings":{"dropOffTimeRange":{"startTime":"2022-10-01T10:00:00","endTime":"2022-10-01T11:00:00"},"notifyClientOfPickUpTime":false,"pickUpTimeRange":{"startTime":"2022-10-01T13:00:00","endTime":"2022-10-01T14:00:00"}}}},"bloodworkRecommendationSettings":{"type":"object","description":"Bloodwork recommendation settings","example":{"costType":"range","minCost":100,"maxCost":200}},"forms":{"description":"Forms to be filled out by the client","example":[{"id":"form1","name":"Consent Form"}],"type":"array","items":{"type":"string"}},"checklist":{"description":"Appointment checklist","example":[{"id":"fecalSample","label":"Bring in a fecal sample for parasite testing.","text":"•  No older than 24 hours.\n•  1 tablespoon in size.\n•  Store the sample at room temp (or refrigerated) until the appointment."}],"type":"array","items":{"type":"string"}},"modified":{"type":"string","description":"Last modified timestamp","example":"2024-01-15T10:30:00Z"}},"required":["id","pims","organization","type","staffFullName","status","date","confirmed","customInstructions","appointmentTimeDetails","bloodworkRecommendationSettings","forms","checklist","modified"]},"GetPimsAppointmentResponseDto":{"type":"object","properties":{"data":{"description":"The data object containing appointment","example":{"appointment":{"id":"1","rowKey":"NEO#6001:1#1","pims":"NEO","organization":"6001","branch":"1","type":"1","staffFullName":"John Doe","status":"SCHEDULED","animal":"1","owner":"1","date":"2025-11-18T18:00","confirmed":true,"customInstructions":{"text":"Custom instructions","format":"text/plain"},"appointmentTimeDetails":{"mode":"UseCustomAppointmentTime","settings":{"dropOffTimeRange":{"startTime":"2022-10-01T10:00:00","endTime":"2022-10-01T11:00:00"},"notifyClientOfPickUpTime":false,"pickUpTimeRange":{"startTime":"2022-10-01T13:00:00","endTime":"2022-10-01T14:00:00"}}},"bloodworkRecommendationSettings":{"costType":"range","minCost":100,"maxCost":200},"checklist":[{"id":"fecalSample","label":"Bring in a fecal sample for parasite testing.","text":"•  No older than 24 hours.\n•  1 tablespoon in size.\n•  Store the sample at room temp (or refrigerated) until the appointment."}],"modified":"2024-01-15T10:30:00Z"}},"allOf":[{"$ref":"#/components/schemas/PimsAppointmentResponseDto"}]}},"required":["data"]},"GetPimsAppointmentListResponseDto":{"type":"object","properties":{"data":{"description":"The data object containing the list of appointments","example":{"appointments":[{"id":"1","rowKey":"NEO#6001:1#1","pims":"NEO","organization":"6001","branch":"1","type":"1","staffFullName":"John Doe","status":"SCHEDULED","animal":"1","owner":"1","date":"2025-11-18T18:00","confirmed":true,"customInstructions":{"text":"Custom instructions","format":"text/plain"},"appointmentTimeDetails":{"mode":"UseCustomAppointmentTime","settings":{"dropOffTimeRange":{"startTime":"2022-10-01T10:00:00","endTime":"2022-10-01T11:00:00"},"notifyClientOfPickUpTime":false,"pickUpTimeRange":{"startTime":"2022-10-01T13:00:00","endTime":"2022-10-01T14:00:00"}}},"bloodworkRecommendationSettings":{"costType":"range","minCost":100,"maxCost":200},"checklist":[{"id":"fecalSample","label":"Bring in a fecal sample for parasite testing.","text":"•  No older than 24 hours.\n•  1 tablespoon in size.\n•  Store the sample at room temp (or refrigerated) until the appointment."}],"modified":"2024-01-15T10:30:00Z"}]},"type":"array","items":{"$ref":"#/components/schemas/PimsAppointmentResponseDto"}}},"required":["data"]},"PatchAppointmentRequestDto":{"type":"object","properties":{"pims":{"type":"string","description":"PIMS type identifier","enum":["NEO","EZYVET","CORNERSTONE"],"example":"NEO"},"organization":{"type":"string","description":"Practice organization ID","example":"6001"},"branch":{"type":"string","description":"Practice branch ID","example":"1"},"id":{"type":"string","description":"Appointment ID in the PIMS system","example":"10"},"bloodwork":{"type":"boolean","description":"Appointment bloodwork recommendation","example":true}},"required":["pims","organization","branch","id"]},"SpeciesDto":{"type":"object","properties":{"id":{"type":"string","example":"123","description":"Species ID from PIMS"},"name":{"type":"string","example":"Canine","description":"Species name from PIMS"}},"required":["id","name"]},"BreedsDto":{"type":"object","properties":{"id":{"type":"string","example":"3","description":"Breed ID from PIMS"},"name":{"type":"string","example":"Labrador","description":"Breed name from PIMS"}},"required":["id","name"]},"SexesDto":{"type":"object","properties":{"id":{"type":"string","example":"3","description":"Sex ID from PIMS"},"name":{"type":"string","example":"Male Neutered","description":"Sex name from PIMS"}},"required":["id","name"]},"AnimalColorsDto":{"type":"object","properties":{"id":{"type":"string","example":"3","description":"Animal color ID from PIMS"},"name":{"type":"string","example":"Black","description":"Animal color name from PIMS"}},"required":["id","name"]},"GetPimsPracticeConfigResponseDto":{"type":"object","properties":{"species":{"description":"Species available for this practice (only included if requested)","example":[{"id":"123","name":"Canine"}],"type":"array","items":{"$ref":"#/components/schemas/SpeciesDto"}},"breeds":{"description":"Breeds available for this practice (only included if requested)","example":[{"id":"3","name":"Labrador"}],"type":"array","items":{"$ref":"#/components/schemas/BreedsDto"}},"sexes":{"description":"Sexes available for this practice when (only included if requested). Neo pims does not support filtering by species.","example":[{"id":"3","name":"Male Neutered"}],"type":"array","items":{"$ref":"#/components/schemas/SexesDto"}},"animalColors":{"description":"Animal colors available for this practice (only included if requested). Not supported for Neo PIMS (requests return 400).","example":[{"id":"3","name":"Black"}],"type":"array","items":{"$ref":"#/components/schemas/AnimalColorsDto"}}}},"PimsPrescriptionResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Prescription ID","example":"prescriptionItem_J0Pae9jsDHbjcshPdbsB0"},"description":{"type":"string","description":"Prescription description","example":"Simparica Tiny 2.8-5.5lb"},"quantityAmount":{"type":"number","description":"Quantity amount","example":1},"date":{"type":"string","description":"Prescription date","example":"Dec 9, 2024"},"instructions":{"type":"object","description":"Prescription instructions","example":null},"animal":{"type":"string","description":"Animal ID","example":"animal_S81Dg3ewbzPoRx98mkJyA"},"rowKey":{"type":"string","description":"Row key in format pims#organization:branch#prescriptionId","example":"pims#org123:branch456#prescriptionItem_J0Pae9jsDHbjcshPdbsB0"}},"required":["id","description","quantityAmount","date","animal","rowKey"]},"PrescriptionSectionDto":{"type":"object","properties":{"title":{"type":"string","description":"Section title","example":"Prescribed"},"data":{"description":"Array of prescriptions in this section","type":"array","items":{"$ref":"#/components/schemas/PimsPrescriptionResponseDto"}}},"required":["title","data"]},"GetPimsPrescriptions":{"type":"object","properties":{"prescriptions":{"description":"All prescriptions sorted by date","type":"array","items":{"$ref":"#/components/schemas/PimsPrescriptionResponseDto"}},"sections":{"description":"Prescriptions organized by sections","type":"array","items":{"$ref":"#/components/schemas/PrescriptionSectionDto"}},"normalizedList":{"type":"object","description":"Normalized list of prescriptions keyed by prescription ID","additionalProperties":{"type":"object"},"example":{"prescriptionItem_J0Pae9jsDHbjcshPdbsB0":{"id":"prescriptionItem_J0Pae9jsDHbjcshPdbsB0","description":"Simparica Tiny 2.8-5.5lb","quantityAmount":1,"date":"2024-12-09","instructions":null,"animal":"animal_S81Dg3ewbzPoRx98mkJyA","rowKey":"pims#org123:branch456#prescriptionItem_J0Pae9jsDHbjcshPdbsB0"}}}},"required":["prescriptions","sections","normalizedList"]},"GetPimsPrescriptionListResponseDto":{"type":"object","properties":{"data":{"description":"The data object containing prescription list response","allOf":[{"$ref":"#/components/schemas/GetPimsPrescriptions"}]}},"required":["data"]},"PrescriptionRefillRequest":{"type":"object","properties":{"pims":{"type":"string","description":"The PIMS type","example":"NEO","enum":["NEO","EZYVET","CORNERSTONE"]},"organization":{"type":"string","description":"The organization ID","example":"600274"},"branch":{"type":"string","description":"The Branch/hospital ID","example":"2"},"animal":{"type":"string","description":"The animal ID","example":"5"},"animalName":{"type":"string","description":"The animal name","example":"Burger"},"owner":{"type":"string","description":"The pet owner ID","example":"5"},"ownerName":{"type":"string","description":"The pet owner full name","example":"Blake Danger"},"phone":{"type":"string","description":"The owner phone","example":"+15553334444"},"prescriptions":{"description":"The requested prescription Id array","example":["1234","prescription-1234"],"type":"array","items":{"type":"string"}},"notes":{"type":"string","description":"The pet owner ID","example":"5"}},"required":["pims","organization","branch","animal","animalName","owner","ownerName","phone","prescriptions","notes"]},"ProviderResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Provider id","example":"1"},"name":{"type":"string","description":"Provider name","example":"Dr Blake"}}},"ProvidersDataDto":{"type":"object","properties":{"providers":{"description":"An array of available providers","example":[{"id":"","name":"No Preference"},{"id":"1234","name":"Dr Blake"},{"id":"5678","name":"Dr Jane"}],"type":"array","items":{"$ref":"#/components/schemas/ProviderResponseDto"}}},"required":["providers"]},"GetProvidersResponseDto":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ProvidersDataDto"}},"required":["data"]},"Availablility":{"type":"object","properties":{"dates":{"description":"Availablility dates","example":["2025-07-21","2025-07-22","2025-07-23","2025-07-24","2025-07-25"],"type":"array","items":{"type":"string"}},"duration":{"type":"number","description":"Availablility duration for appointment category","example":10},"providers":{"description":"Providers available for the given dates","example":[],"type":"array","items":{"type":"string"}}},"required":["dates","duration","providers"]},"GetAvailabilityResponseDto":{"type":"object","properties":{"data":{"example":{"availability":{"dates":["2025-07-21","2025-07-22","2025-07-23","2025-07-24","2025-07-25"],"providers":[{"id":"4524","name":"Dr Blake","slots":[{"date":"2025-07-21","times":["08:00","08:10","08:20","08:30","08:40","08:50","09:00"]},{"date":"2025-07-22","times":["08:00","08:10","08:20","08:30","08:40","08:50","09:00"]}]}],"duration":10}},"allOf":[{"$ref":"#/components/schemas/Availablility"}]}},"required":["data"]},"PostAppointmentRequestDto":{"type":"object","properties":{"pims":{"type":"string","description":"The PIMS type","example":"NEO","enum":["NEO","EZYVET","CORNERSTONE"]},"organization":{"type":"string","description":"The organization ID","example":"600274"},"branch":{"type":"string","description":"Practice branch ID","example":"1"},"owner":{"type":"string","description":"The pet owner ID","example":"5"},"ownerName":{"type":"string","description":"The pet owner full name","example":"Blake Danger"},"animal":{"type":"string","description":"The animal ID","example":"5"},"animalName":{"type":"string","description":"The animal name","example":"Burger"},"provider":{"type":"string","description":"Provider ID","example":"2"},"email":{"type":"string","description":"The owner email","example":"blake-danger@gmail.com"},"phone":{"type":"string","description":"The owner phone","example":"+15553334444"},"date":{"type":"string","description":"Appointment requested date","example":"2025-07-21"},"time":{"type":"string","description":"Appointment requested time","example":"08:00"},"message":{"type":"string","description":"Appointment request message","example":"Burger is not feeling well"},"appointmentCategory":{"type":"string","description":"Appointment category","example":"WELLNESS_VISIT"}},"required":["pims","organization","branch","owner","ownerName","animal","animalName","phone","date","time","message","appointmentCategory"]}}}}