Sign Up Flow. Step 4 for trainer
1. Get info for sub step "Personal Info"
Endpoint: GET /api/v1/sign_up/basic_info
Request Headers:
Authorization: Bearer your_generated_token
X-API-Key: your_api_key
Content-Type: application/json
Request Body (JSON):
{}
Expected Response:
{
"success": true,
"message": "Data retrieved successfully",
"data": {
"previous_step": "terms",
"current_step": "personal_info",
"next_step": "training_style_facility_info",
"order": 1,
"total": 4,
"step_data": {
"title": "Let’s get started with your basic info",
"registration_step": "personal_info",
"intro": "Welcome! We’re glad you’re here to help service dog handlers. To begin, just tell us a bit about yourself.",
"fields": [
{
"label": "First name",
"name": "first_name",
"type": "text",
"required": true,
"value": ""
},
{
"label": "Middle name",
"name": "middle_name",
"type": "text",
"required": false,
"value": ""
},
{
"label": "Last name",
"name": "last_name",
"type": "text",
"required": true,
"value": ""
},
{
"label": "Phone Number",
"name": "primary_phone",
"type": "text",
"required": true,
"value": ""
}
]
}
}
}
2. Send info for update user info for buttons continue on each sub step
Endpoint: PUT /api/v1/sign_up/update_user_info
Request Headers:
Authorization: Bearer your_generated_token
X-API-Key: your_api_key
Content-Type: application/json
Request Body (JSON) for step "personal_info":
{
"registration_step": "personal_info", //required field type string
"first_name": "Test",//required field
"middle_name": "New",//optional
"last_name": "Trainer",//required field
"primary_phone": "0731234567"//required field
}
Expected Response for step "personal_info":
{
"success": true,
"message": "User info updated successfully.",
"data": {
"user": {
"id": 182,
"full_name": "Test New Trainer",
"phone": "073-123-4567",
"email": "[email protected]",
"account_type": "trainer",
"registration_step": "training_style_facility_info",
"registration_status": {
"registrationFinished": false,
"profileFieldsFilled": false,
"animalAdded": false,
"emergencyContactAdded": false,
"profileCompletionPercentage": 0,
"overallCompletionPercentage": 0,
"sdsAgreementValid": false,
"sdsExpirationDate": null
},
"registration_completed": false,
"previous_step": "personal_info",
"next_step": "trainer_directory_settings",
"profile_photo_url": null
},
"next_step": "training_style_facility_info"
}
}
Request Body (JSON) for step "training_style_facility_info":
{
"registration_step": "training_style_facility_info",//required field type string
"training_styles": ["training_facility", "travel_to_clients", "transport_dogs", "other"],//optional field type array
"new_training_styles": ["Trening style 1", "Training style 2"],//optional (required if training_styles has "other") field type array of strings
"facility_address_line_1": "Address 1",//optional (required if training_styles has "training_facility" or "transport_dogs" or both) field type string
"facility_address_line_2": "Address 2",//optional (can be filled if training_styles has "training_facility" or "transport_dogs" or both) field type string
"facility_city": "Test city",//optional (required if training_styles has "training_facility" or "transport_dogs" or both) field type string
"facility_region": "Test region",//optional (required if training_styles has "training_facility" or "transport_dogs" or both) field type string
"facility_zip_code": "12345",//optional (required if training_styles has "training_facility" or "transport_dogs" or both) field type string
"facility_country": "test country"//optional (required if training_styles has "training_facility" or "transport_dogs" or both) field type string
}
Expected Response for step "personal_info":
{
"success": true,
"message": "User info updated successfully.",
"data": {
"user": {
"id": 182,
"full_name": "Test New Trainer",
"phone": "073-123-4567",
"email": "[email protected]",
"account_type": "trainer",
"registration_step": "trainer_directory_settings",
"registration_status": {
"registrationFinished": false,
"profileFieldsFilled": false,
"animalAdded": false,
"emergencyContactAdded": false,
"profileCompletionPercentage": 33,
"overallCompletionPercentage": 17,
"sdsAgreementValid": false,
"sdsExpirationDate": null
},
"registration_completed": false,
"previous_step": "training_style_facility_info",
"next_step": "agreements_step",
"profile_photo_url": null
},
"next_step": "trainer_directory_settings"
}
}
Request Body (JSON) for step "trainer_directory_settings":
{
"registration_step": "trainer_directory_settings",//required field type string
"appear_in_directory": true, //required field type boolean
"zip_code": "37821", //optional (required if appear_in_directory is true) field type string
"distance_option": "up_to_50_miles", //optional (required if appear_in_directory is true) field type string
"certifications": ["cpdt", "iacp", "other"], //optional field type array of strings
"new_certifications": ["Certificate 1", "Certificate 2"],//optional (required if certifications has "other") field type array of strings
"languages": ["english", "spanish"] //optional field type array of strings
}
Expected Response for step "trainer_directory_settings":
{
"success": true,
"message": "User info updated successfully.",
"data": {
"user": {
"id": 182,
"full_name": "Test New Trainer",
"phone": "073-123-4567",
"email": "[email protected]",
"account_type": "trainer",
"registration_step": "agreements_step",
"registration_status": {
"registrationFinished": false,
"profileFieldsFilled": false,
"animalAdded": false,
"emergencyContactAdded": false,
"profileCompletionPercentage": 33,
"overallCompletionPercentage": 17,
"sdsAgreementValid": false,
"sdsExpirationDate": null
},
"registration_completed": false,
"previous_step": "trainer_directory_settings",
"next_step": "registration_complete",
"profile_photo_url": null
},
"next_step": "agreements_step"
}
}
Request Body (JSON) for step "agreements_step":
{
"registration_step": "agreements_step"//required field type string
}
Expected Response for step "agreements_step":
{
"success": true,
"message": "User info updated successfully.",
"data": {
"user": {
"id": 182,
"full_name": "Test New Trainer",
"phone": "073-123-4567",
"email": "[email protected]",
"account_type": "trainer",
"registration_step": "registration_complete",
"registration_status": {
"registrationFinished": false,
"profileFieldsFilled": false,
"animalAdded": false,
"emergencyContactAdded": false,
"profileCompletionPercentage": 33,
"overallCompletionPercentage": 17,
"sdsAgreementValid": false,
"sdsExpirationDate": null
},
"registration_completed": false,
"previous_step": "agreements_step",
"next_step": null,
"profile_photo_url": null
},
"next_step": "registration_complete"
}
}
3. Get info for "training style facility info" sub step
Endpoint: GET /api/v1/sign_up/training_style_facility_info
Request Headers:
Authorization: Bearer your_generated_token
X-API-Key: your_api_key
Content-Type: application/json
Request Body (JSON):
{}
Expected Response:
{
"success": true,
"message": "Data retrieved successfully",
"data": {
"previous_step": "personal_info",
"current_step": "training_style_facility_info",
"next_step": "trainer_directory_settings",
"order": 2,
"total": 4,
"step_data": {
"title": "How do you work with service dogs?",
"registration_step": "training_style_facility_info",
"intro": "Everyone has their own way of helping. Please tell us what fits you best.",
"fields": [
{
"label": "How do you work with service dogs?",
"name": "training_styles",
"type": "checkbox_group",
"options": {
"training_facility": "I have a training facility where clients bring their dogs",
"travel_to_clients": "I travel to clients to train dogs on-site",
"transport_dogs": "I transport dogs, train them at my facility, then return them",
"other": "Other"
},
"required": true,
"value": ""
},
{
"label": "Please describe (you can add multiple)",
"name": "new_training_styles",
"type": "text_array",
"placeholder": "Enter your own training style",
"required": false,
"required_if": {
"training_styles": [
"other"
]
},
"visible_if": {
"training_styles": [
"other"
]
}
},
{
"type": "section",
"label": "Facility Information",
"visible_if": {
"training_styles": [
"training_facility",
"transport_dogs"
]
},
"fields": [
{
"label": "Facility Address Line 1",
"name": "facility_address_line_1",
"type": "text",
"required": false,
"required_if": {
"training_styles": [
"training_facility",
"transport_dogs"
]
},
"value": ""
},
{
"label": "Facility Address Line 2",
"name": "facility_address_line_2",
"type": "text",
"required": false,
"value": ""
},
{
"label": "City",
"name": "facility_city",
"type": "text",
"required": false,
"required_if": {
"training_styles": [
"training_facility",
"transport_dogs"
]
},
"value": ""
},
{
"label": "State/Province/Region",
"name": "facility_region",
"type": "text",
"required": false,
"required_if": {
"training_styles": [
"training_facility",
"transport_dogs"
]
},
"value": ""
},
{
"label": "ZIP / Postal Code",
"name": "facility_zip_code",
"type": "text",
"required": false,
"required_if": {
"training_styles": [
"training_facility",
"transport_dogs"
]
},
"value": ""
},
{
"label": "Country",
"name": "facility_country",
"type": "text",
"required": false,
"required_if": {
"training_styles": [
"training_facility",
"transport_dogs"
]
},
"value": ""
}
]
}
]
}
}
}
4. Get info for "trainer_directory_settings" sub step
Endpoint: GET /api/v1/sign_up/trainer_directory_settings
Request Headers:
Authorization: Bearer your_generated_token
X-API-Key: your_api_key
Content-Type: application/json
Request Body (JSON):
{}
Expected Response:
{
"success": true,
"message": "Data retrieved successfully",
"data": {
"previous_step": "training_style_facility_info",
"current_step": "trainer_directory_settings",
"next_step": "agreements_step",
"order": 3,
"total": 4,
"step_data": {
"title": "Help clients find you!",
"registration_step": "trainer_directory_settings",
"intro": "If you want to be listed in our trainer search, we’ll need a few more details.",
"fields": [
{
"label": "Would you like to appear in our directory?",
"name": "appear_in_directory",
"type": "checkbox",
"required": false,
"value": ""
},
{
"label": "ZIP / Postal Code",
"name": "zip_code",
"type": "text",
"required": false,
"required_if": {
"appear_in_directory": true
},
"visible_if": {
"appear_in_directory": true
},
"value": ""
},
{
"label": "Distance Willing to Travel",
"name": "distance_option",
"type": "select",
"options": {
"up_to_5_miles": "Up to 5 miles / 8 km",
"up_to_10_miles": "Up to 10 miles / 16 km",
"up_to_25_miles": "Up to 25 miles / 40 km",
"up_to_50_miles": "Up to 50 miles / 80 km",
"up_to_100_miles": "Up to 100 miles / 160 km",
"up_to_3_states": "Up to 3 states radius (~200 miles / 320 km)",
"anywhere_us": "Anywhere in the United States",
"international": "International"
},
"required": false,
"required_if": {
"appear_in_directory": true
},
"visible_if": {
"appear_in_directory": true
},
"value": ""
},
{
"label": "Certifications (select all that apply)",
"name": "certifications",
"type": "checkbox_group",
"options": {
"cpdt": "Certified Professional Dog Trainer (CPDT)",
"iacp": "International Association of Canine Professionals (IACP)",
"adi": "Assistance Dogs International (ADI)",
"iaadp": "International Association of Assistance Dog Partners (IAADP)",
"other": "Other"
},
"required": false,
"value": ""
},
{
"label": "Other certifications",
"name": "new_certifications",
"type": "text_array",
"placeholder": "Enter certification name",
"required": false,
"required_if": {
"certifications": [
"other"
]
},
"visible_if": {
"certifications": [
"other"
]
}
},
{
"label": "Languages spoken (select all that apply)",
"name": "languages",
"type": "multiple_select",
"options": {
"english": "English",
"spanish": "Spanish",
"french": "French",
"mandarin": "Mandarin",
"arabic": "Arabic",
"asl": "ASL (American Sign Language)"
},
"required": false,
"value": ""
}
]
}
}
}
5. Get info for Agreements sub step
Endpoint: GET /api/v1/sign_up/agreements_step
Request Headers:
Authorization: Bearer your_generated_token
X-API-Key: your_api_key
Content-Type: application/json
Request Body (JSON):
{}
Expected Response:
{
"success": true,
"message": "Data retrieved successfully",
"data": {
"previous_step": "trainer_directory_settings",
"current_step": "agreements_step",
"next_step": "registration_complete",
"order": 4,
"total": 4,
"step_data": {
"title": "Trainer Agreement",
"registration_step": "agreements_step",
"sub_steps": [
{
"introduction": "At the heart of every service dog team is a foundation of trust, safety, and rigorous training.",
"sub_title": "Article 1/4",
"content": "<p>At the heart of every service dog team is a foundation of <strong>trust, safety, and rigorous training</strong>.</p><p>As a Service Dog Standards Trainer, your work shapes not only the behavior of dogs — but the <strong>daily lives of the people who rely on them.</strong></p>",
"next": "Service Dog Standards Trainer Agreement"
},
{
"introduction": "As a Service Dog Standards Trainer, I agree to uphold the following principles in my work with service dog ",
"sub_title": "Article 2/4",
"content": "<p>As a Service Dog Standards Trainer, I agree to uphold the following principles in my work with service dog handlers and their dogs:</p><p><strong>1. I will prioritize the well-being of my clients.</strong><br>I will do no harm. I will always consider the physical and emotional safety of both the human and canine participants in any training I provide. My methods will be humane, ethical, and grounded in best practices.</p><p><strong>2. I will empower handlers through clear and effective training.</strong><br>I will provide comprehensive instruction and guidance to help clients become capable and confident service dog handlers, always fostering a positive, respectful bond between dog and human.</p><p><strong>3. I will uphold high ethical standards in my practice.</strong><br>I will conduct myself with honesty, professionalism, and integrity in all interactions, both with clients and within the broader service dog community.</p><p><strong>4. I will protect client confidentiality.</strong><br>I understand that disability and medical information is personal and private. I will never share or disclose client details without clear, informed consent.</p><p><strong>5. I will be transparent and fair in my business practices.</strong><br>I will communicate openly and respectfully with clients. I will clearly disclose policies, pricing, expectations, and limitations of my services.</p><p><strong>6. I will follow all applicable laws and Service Dog Standards guidelines.</strong><br>I agree to stay informed of legal requirements related to service dog training, disability rights, and animal welfare. I will ensure that my practices are fully compliant.</p><p><strong>7. I accept full responsibility for my professional conduct.</strong><br>I will represent myself, my services, and my credentials honestly. I take ownership of my actions and the impact they may have.</p><p><strong>8. I will continue learning and contributing to the service dog community.</strong><br>I am committed to ongoing professional development, keeping up with emerging research, refining my skills, and supporting others in the field.</p><p><strong>Thanks for being one of the people who makes life better for someone with a service dog.</strong></p>",
"next": "You're Helping Ensure Safety, Independence, and Public Confidence"
},
{
"introduction": null,
"sub_title": "Article 3/4",
"content": "<p>Service dogs are more than companions. They are <strong>medical aids, mobility partners, and lifelines</strong> for disabled individuals navigating a world not always built for them.</p><p>Your support helps make sure that:</p><ul><li><strong>The handler stays independent</strong><br> by giving them the confidence to experience freedom and independence in daily life.</li><li><strong>Everyone stays safe and supported</strong><br> through thoughtful, respectful interactions.</li><li><strong>The public understands and respects service dogs</strong><br> so teams can work without judgment or interference.</li></ul>",
"next": "Service Dog Standards Is a Global Initiative"
},
{
"introduction": null,
"sub_title": "Article 4/4",
"content": "<p>Our guidelines are used by trainers, handlers, caregivers, and advocates around the world.</p><p>We don’t provide training directly; <strong>we set the training and behavior standards</strong> that <strong>promote</strong> <strong>safe, ethical, and responsible</strong> service dog partnership and training.</p><p>These shared expectations help ensure:</p><ul><li><strong>Consistency</strong></li><li><strong>Safety</strong></li><li><strong>Dignity</strong> for every team—no matter where they are.</li></ul><p>By being a part of <strong>Service Dog Standards</strong>, you're showing that <strong>you care about doing things the right way</strong>—for the <strong>handler, the dog, and the community.</strong></p><p><strong>Together, we can make a kinder, better-educated, and more accessible world for everyone.</strong></p>",
"next": null
}
]
}
}
}
6. Get info about user registration status
Endpoint: GET /api/v1/sign_up/register_info
Request Headers:
Authorization: Bearer your_generated_token
X-API-Key: your_api_key
Content-Type: application/json
Request Body (JSON):
{}
Expected Response:
{
"success": true,
"message": "Data retrieved successfully",
"data": {
"user_type": "trainer",
"previous_step": "trainer_directory_settings",
"current_step": "agreements_step",
"next_step": "registration_complete"
}
}
7. Get info for registration_complete step
Endpoint: GET /api/v1/sign_up/registration_complete
Request Headers:
Authorization: Bearer your_generated_token
X-API-Key: your_api_key
Content-Type: application/json
Request Body (JSON):
{}
Expected Response:
{
"success": true,
"message": "Data retrieved successfully",
"data": {
"current_step": "registration_complete",
"step_data": {
"user": {
"id": 182,
"full_name": "Test New Trainer",
"phone": "073-123-4567",
"email": "[email protected]",
"account_type": "trainer",
"registration_step": "registration_finished",
"registration_status": {
"registrationFinished": true,
"profileFieldsFilled": false,
"animalAdded": false,
"emergencyContactAdded": false,
"profileCompletionPercentage": 33,
"overallCompletionPercentage": 17,
"sdsAgreementValid": true,
"sdsExpirationDate": "2028-10-20"
},
"registration_completed": true,
"profile_photo_url": null
}
}
}
}
20 October 2025